@tsi-developpement/tsi-shared-ui 1.8.34 → 1.8.36
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.
- package/esm2022/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.mjs +8 -2
- package/esm2022/lib/tsi-components/reporting/reporting.component.mjs +3 -3
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +8 -3
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -613,11 +613,11 @@ export class ReportingComponent {
|
|
|
613
613
|
return key;
|
|
614
614
|
}
|
|
615
615
|
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.FichierService }, { token: i0.EnvironmentInjector }, { token: i10.MailingService }, { token: i11.InputRegistryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
616
|
-
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", selectedItemUids: "selectedItemUids", fromTsiForm: "fromTsiForm", customSendMailMode: "customSendMailMode", reportingInformation: "reportingInformation" }, outputs: { onSave: "onSave", refreshData: "refreshData", closedModalFileUpload: "closedModalFileUpload", toggleDesignMode: "toggleDesignMode" }, 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 id=\"{{ configModeButtonId }}\"\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=\"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=\"{{ 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]", inputs: ["presentationDesigner", "presentationDesignerBase"] }] }); }
|
|
616
|
+
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", selectedItemUids: "selectedItemUids", fromTsiForm: "fromTsiForm", customSendMailMode: "customSendMailMode", reportingInformation: "reportingInformation" }, outputs: { onSave: "onSave", refreshData: "refreshData", closedModalFileUpload: "closedModalFileUpload", toggleDesignMode: "toggleDesignMode" }, 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=\"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]", inputs: ["presentationDesigner", "presentationDesignerBase"] }] }); }
|
|
617
617
|
}
|
|
618
618
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportingComponent, decorators: [{
|
|
619
619
|
type: Component,
|
|
620
|
-
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
|
|
620
|
+
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=\"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"] }]
|
|
621
621
|
}], 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.FichierService }, { type: i0.EnvironmentInjector }, { type: i10.MailingService }, { type: i11.InputRegistryService }], propDecorators: { showImportExportButton: [{
|
|
622
622
|
type: Input
|
|
623
623
|
}], showNoteButton: [{
|
|
@@ -682,4 +682,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
682
682
|
type: ViewChild,
|
|
683
683
|
args: ['wrapper', { read: ElementRef }]
|
|
684
684
|
}] } });
|
|
685
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQXVCLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE9BQU8sRUFBNkMsT0FBTyxFQUE4QixNQUFNLGNBQWMsQ0FBQztBQUU5RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPekQsT0FBTyxFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUdyTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXakUsTUFBTSxPQUFPLGtCQUFrQjtJQW9CN0IsSUFDSSwwQkFBMEI7UUFDNUIsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksMEJBQTBCLENBQUMsS0FBYztRQUMzQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFnQkQsSUFDSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksbUJBQW1CLENBQUMsS0FBeUI7UUFDL0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBSUQsSUFDSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUkscUJBQXFCLENBQUMsS0FBeUI7UUFDakQsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUNJLEVBQUUsQ0FBQyxLQUF5QjtRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFLRCxJQUNXLGdCQUFnQixDQUFDLFFBQXNCO1FBQ2hELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFJRCxJQUNXLFdBQVcsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO0lBQzNCLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFBO0lBQzFCLENBQUM7SUFHRCxJQUNXLGtCQUFrQixDQUFDLEtBQWM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQTtJQUNsQyxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUE7SUFDakMsQ0FBQztJQUlELElBQ1csb0JBQW9CLENBQUMsS0FBdUM7UUFDckUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUE7SUFDbkMsQ0FBQztJQW9CRCxJQUFXLG1CQUFtQjtRQUM1QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMzQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO1FBQ25CLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsY0FBYztJQUNkLFlBQ1UsZ0JBQWlDLEVBQ2pDLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDOUMsbUJBQTJDLEVBQzNDLGNBQWlDLEVBQ2pDLHNCQUE4QyxFQUM5Qyw0QkFBeUQsRUFDekQsb0JBQXlDLEVBQzFDLGVBQStCLEVBQzlCLFNBQThCLEVBQzlCLGVBQStCLEVBQy9CLHFCQUE0QztRQVg1QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXdCO1FBQzNDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBNkI7UUFDekQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUMxQyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBcUI7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFoSy9DLGFBQVEsR0FBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDdEIsb0JBQWUsR0FBVyxnQ0FBZ0MsQ0FBQztRQUM1RSxjQUFTLEdBQWUsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUc1QywwRUFBMEU7UUFDakUsMkJBQXNCLEdBQVksSUFBSSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUNqQyxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFHMUMseUNBQW9DLEdBQVksSUFBSSxDQUFDO1FBQzdDLGdDQUEyQixHQUFZLEtBQUssQ0FBQztRQVVyRCxZQUFZO1FBQ0YsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFLbEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBbUJ2QywyQkFBc0IsR0FBVyxDQUFDLENBQUM7UUF1QmpDLHVCQUFrQixHQUFXLHlCQUF5QixDQUFDO1FBRXhELHNCQUFpQixHQUFlLEVBQUUsQ0FBQztRQVVuQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQVc5Qix3QkFBbUIsR0FBWSxLQUFLLENBQUE7UUFxQjVDLFlBQVk7UUFFWiwyQkFBMkI7UUFDakIsZ0JBQVcsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNqRSwwQkFBcUIsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUMzRSxxQkFBZ0IsR0FDeEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQU05QixZQUFPLEdBQTZCLEVBQUUsQ0FBQztRQUN2QyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4Qix3QkFBbUIsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBRXJDLG9CQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQztJQTZCbEMsQ0FBQztJQUVMLFlBQVk7SUFFWix3QkFBd0I7SUFDeEIsUUFBUTtJQUNSLENBQUM7SUFHRCxXQUFXO0lBQ1gsQ0FBQztJQUVELFlBQVk7SUFFWix1QkFBdUI7SUFDdkIsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQjtpQkFDbEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUM7aUJBQ3pELFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUE0QixFQUFFLEVBQUU7b0JBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xCLHNDQUFzQztvQkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLFFBQTJCLEVBQUUsRUFBRTtvQkFDckMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQzdCLDBDQUEwQyxDQUMzQyxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzlELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xCLHNDQUFzQztvQkFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLFFBQTJCLEVBQUUsRUFBRTtvQkFDckMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQzdCLDBDQUEwQyxDQUMzQyxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQTtRQUNsRSxDQUFDO2FBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQjtpQkFDbEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUM7aUJBQ3pELFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsQixzQ0FBc0M7b0JBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxRQUEyQixFQUFFLEVBQUU7b0JBQ3JDLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUM3QiwwQ0FBMEMsQ0FDM0MsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7YUFDRixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFFBQVEsQ0FDZCxFQUFVLEVBQ1YsaUJBQTBDO1FBRTFDLElBQUksRUFBRSxJQUFJLFNBQVMsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNoRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDdkIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzVELENBQUM7Z0JBRUQsSUFBSSxXQUFXLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzlDLElBQUksU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLElBQUksSUFBSSxHQUF3QjtvQkFDOUIsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUM5QyxXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLO29CQUN0QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07aUJBQ3pCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUMxQyxvQkFBb0IsRUFDcEIsSUFBSSxDQUNMLENBQUM7Z0JBQ0YsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQXFCLEVBQUUsRUFBRTtvQkFDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNULE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUNuQixPQUFNO29CQUNSLENBQUM7b0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDakIsT0FBTTtvQkFDUixDQUFDO29CQUNELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDeEMsRUFBRSxFQUNGLGlCQUFrQixDQUFDLFVBQVUsRUFDN0IsaUJBQWtCLENBQUMsWUFBWSxDQUNoQyxDQUFBO29CQUNELElBQUksQ0FBQyxnQkFBZ0I7eUJBQ2xCLHFCQUFxQixDQUFDLGFBQWEsQ0FBQzt5QkFDcEMsU0FBUyxDQUNSO3dCQUNFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7NEJBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFO2dDQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7NkJBQ2hCLENBQUMsQ0FBQzs0QkFFSCxJQUFJLFdBQVcsR0FBVyxFQUFFLENBQUM7NEJBQzdCLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7NEJBQ3pCLElBQUksQ0FBQyxlQUFlO2lDQUNqQixRQUFRLENBQ1AsR0FBRyxDQUFDLFNBQVUsRUFDZCxHQUFHLENBQUMsT0FBUSxFQUNaLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUNqQixXQUFXLEVBQ1gsR0FBRyxDQUFDLFNBQVMsQ0FDZDtpQ0FDQSxTQUFTLENBQUM7Z0NBQ1QsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQ0FDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUMzQixnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FDbEMsQ0FBQztnQ0FDSixDQUFDO2dDQUNELEtBQUssRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO29DQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29DQUNuQixJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQ2hELEtBQUssQ0FDTixDQUFDO2dDQUNKLENBQUM7NkJBQ0YsQ0FBQyxDQUFBO3dCQUVOLENBQUM7d0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7NEJBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDcEQsQ0FBQztxQkFDRixDQUNGLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUyxFQUFFLEVBQUU7b0JBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQzdCLDBDQUEwQyxDQUMzQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVLENBQ2hCLEVBQVUsRUFDVixpQkFBMEM7UUFFMUMsSUFBSSxFQUFFLElBQUksU0FBUyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUN2QixpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDNUQsQ0FBQztnQkFFRCxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDMUQsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDeEMsRUFBRSxFQUNGLGlCQUFrQixDQUFDLFVBQVUsRUFDN0IsaUJBQWtCLENBQUMsWUFBWSxDQUNoQyxDQUFBO2dCQUVELElBQUksQ0FBQyxnQkFBZ0I7cUJBQ2xCLHFCQUFxQixDQUFDLGFBQWEsQ0FBQztxQkFDcEMsU0FBUyxDQUNSO29CQUNFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNiLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM3QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQzt3QkFDYixDQUFDLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQzt3QkFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFFVixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2xDLENBQUM7b0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDcEQsQ0FBQztpQkFDRixDQUNGLENBQUM7Z0JBRUosSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FDOUIsMERBQTBELENBQzNELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FDN0IsMENBQTBDLENBQzNDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUNELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZUFBZTtpQkFDakIseUJBQXlCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQ3hDLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLFFBQTJCLEVBQUUsRUFBRTtvQkFDckMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBRXBCLE1BQU0sSUFBSSxHQUFHO1lBQ1gsSUFBSSxFQUFFLEVBQUU7WUFDUixVQUFVLEVBQUUsRUFBRTtZQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLEtBQUs7WUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsTUFBTTtZQUM5QixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFBO1FBRUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRTNELEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0I7UUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWdCO1FBQ3JCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7UUFDeEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUVoQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBNEIsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQXFCLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxXQUFXO29CQUFFLE9BQU87Z0JBRXpCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFNUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDcEMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QyxhQUFhLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzlCLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixhQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDNUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQy9CLGFBQWEsQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO2dCQUN0QyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQzdDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsYUFBYSxDQUFDLFdBQVcsR0FBRyxzQ0FBc0MsQ0FBQyxDQUFDLGFBQWE7Z0JBRWpGLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDbkQsSUFBSSxFQUFFLEdBQUcsRUFBRTt3QkFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO3dCQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyQixDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNiLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlFLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDO1lBRUYsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQjtRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sMkJBQTJCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3pILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVMsRUFBRSxFQUFFLENBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUVuRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUU5QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCO0lBQ2pCLFdBQVcsQ0FDakIsRUFBVSxFQUNWLGlCQUEwQztRQUUxQyxJQUFJLEVBQUUsSUFBSSxTQUFTLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xDLCtCQUErQjtZQUMvQixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUN2QixpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDNUQsQ0FBQztnQkFFRCxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDMUQsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksQ0FBQyxnQkFBZ0I7cUJBQ2xCLGdCQUFnQixDQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsRUFBRSxFQUNGLGlCQUFpQixFQUFFLFVBQVUsRUFDN0IsaUJBQWlCLEVBQUUsWUFBWSxDQUNoQyxDQUNGO3FCQUNBLFNBQVMsQ0FBQztvQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTt3QkFDbEIsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQzs0QkFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzRCQUVoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO2dDQUN4RCxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQ0FFbEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxDQUFDO29DQUMxRSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUE7b0NBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7d0NBQzNDLFNBQVMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0Isa0JBQWtCLElBQUksQ0FBQyxlQUFlLElBQUksb0JBQW9CLENBQUMsU0FBUyxJQUFJLFNBQVMsRUFBRSxDQUFDO29DQUNySSxDQUFDO3lDQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7d0NBQ3ZELFNBQVMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLHFCQUFxQixDQUFDLGVBQWUsSUFBSSxvQkFBb0IsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLElBQUksU0FBUyxFQUFFLENBQUM7b0NBQ3JPLENBQUM7eUNBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3Q0FDakQsU0FBUyxHQUFHLEdBQUcsT0FBTyxDQUFDLG9CQUFvQiwyQkFBMkIsSUFBSSxDQUFDLGVBQWUsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLElBQUksU0FBUyxFQUFFLENBQUM7b0NBQzlJLENBQUM7b0NBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7b0NBRWpDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQzlCLDBEQUEwRCxDQUMzRCxDQUFDO2dDQUNKLENBQUM7Z0NBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0NBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0NBQ3ZELENBQUM7Z0NBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7NkJBQ3BCLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7b0JBRUQsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3ZELENBQUM7b0JBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7aUJBQ3BCLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDO1FBQ0Qsb0JBQW9CO2FBQ2YsQ0FBQztZQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUM3QiwwQ0FBMEMsQ0FDM0MsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLEdBQVcsRUFDWCxVQUFrQixFQUNsQixZQUFxQixFQUNyQixNQUFlLEVBQ2YsS0FBYyxFQUNkLFNBQWtCLEVBQ2xCLE9BQWlCO1FBRWpCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RCxJQUFJLFFBQVEsR0FDVixJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDdEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksR0FBRyxJQUFJLG1EQUFtRCxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNyRSxJQUFJLGdCQUFnQixHQUFrQjtvQkFDcEMsaUJBQWlCLEVBQUUsR0FBRztvQkFDdEIsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7d0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQ3pFLElBQUksQ0FBQyxZQUFZO3dCQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7b0JBQ3JCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVztvQkFDakYsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixVQUFVLEVBQUUsVUFBVTtvQkFDdEIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFNBQVMsRUFBRSxVQUFVLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLO29CQUNwRSxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO29CQUN4RCxlQUFlLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtvQkFDekMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtvQkFDN0MsTUFBTSxFQUFFLE1BQU07b0JBQ2QsS0FBSyxFQUFFLEtBQUs7b0JBQ1osU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLE9BQU8sRUFBRSxPQUFPO29CQUNoQixjQUFjLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2lCQUN6QyxDQUFDO2dCQUVGLE9BQU8sZ0JBQWdCLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sS0FBSyxDQUNULDRHQUE0RyxDQUM3RyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVO1FBQ3RCLElBQUksSUFBeUIsQ0FBQztRQUM5QixJQUFJLEdBQUc7WUFDTCxJQUFJLEVBQUU7Z0JBQ0osYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUM1QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDcEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDdkMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDN0MsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDN0MsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDekMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUM3QyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUM3QyxjQUFjLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2FBQ3pDO1lBQ0QsVUFBVSxFQUFFLEVBQUU7WUFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07WUFDN0IsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQztRQUM1QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBUyxFQUFFLGNBQXVCLEtBQUs7UUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0QsWUFBWTtJQUVaLFlBQVksQ0FBQyxLQUFpQjtRQUM1QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzFDLHFCQUFxQjtJQUN2QixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBNEI7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQzlCLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUNuQixJQUFJLENBQUMsbUJBQW1CLENBQ3pCLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUN6RCxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFbkUsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN6QixDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJO2dCQUNyQixDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHO2FBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLEdBQUcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDL0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDaEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxzQkFBc0I7aUJBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQ3JDLFNBQVMsQ0FDUixLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFDekMsSUFBSSxJQUFJLEdBQ04sU0FBUztvQkFDVCxJQUFJLENBQUMsRUFBRTtvQkFDUCxvQkFBb0I7b0JBQ3BCLElBQUksQ0FBQyxZQUFZO29CQUNqQixvQkFBb0I7b0JBQ3BCLElBQUksQ0FBQyxTQUFTO29CQUNkLG1CQUFtQjtvQkFDbkIsSUFBSSxDQUFDLFVBQVU7b0JBQ2Ysb0JBQW9CO29CQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUVqQixJQUFJLElBQUksR0FBd0I7b0JBQzlCLElBQUksRUFBRTt3QkFDSixHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ1osWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO3dCQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7d0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTt3QkFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO3FCQUMxQjtvQkFDRCxXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLE9BQU87b0JBQ2QsTUFBTSxFQUFFLE9BQU87aUJBQ2hCLENBQUM7Z0JBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLCtCQUErQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBRTdFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVMsRUFBRSxFQUFFLENBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQ3RCLENBQUM7WUFDSixDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDUixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FDRixDQUFDO1FBQ04sQ0FBQztJQUVILENBQUM7SUFHRCxtQkFBbUIsQ0FBQyxNQUFtQjtRQUNyQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBUztRQUNaLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM1RCxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM1QixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsQ0FBQyxDQUFDLEdBQVc7UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSTtlQUNwQixJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzsrR0Ezd0JVLGtCQUFrQjttR0FBbEIsa0JBQWtCLDB1Q0FpSUMsVUFBVSw2QkNuSzFDLDAvTkF1TUE7OzRGRHJLYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZUFBZTsrY0FjaEIsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU9GLDBCQUEwQjtzQkFEN0IsS0FBSztnQkFTSSxNQUFNO3NCQUFmLE1BQU07Z0JBRUUsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFZRixxQkFBcUI7c0JBRHhCLEtBQUs7Z0JBY0YsRUFBRTtzQkFETCxLQUFLO2dCQVNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBWUssV0FBVztzQkFEckIsS0FBSztnQkFXSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBWUssb0JBQW9CO3NCQUQ5QixLQUFLO2dCQVlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFLUCxVQUFVO3NCQURULFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy90b29sdGlwUG9zaXRpb24uZW51bSc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSwgSHR0cE1ldGhvZFR5cGUsIFRzaVJlcG9ydFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElNb2RhbFNpemUsIElQYWdlZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgT3B0aW9uYWxFbmRwb2ludHMsIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsIEZpY2hpZXIsIFJlcG9ydFRvUHJpbnQsIFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IHF1ZXJ5UGFyYW1OYW1lc0NvbnN0IH0gZnJvbSAnLi4vLi4vY29uc3RzL3F1ZXJ5UGFyYW1OYW1lcy5jb25zdCc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBMYXlvdXRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0L2xheW91dC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNvcmQtaW5mby1wb3B1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWRlbnRpdHlNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb24vaWRlbnRpdHktbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydGluZy9yZXBvcnRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IG9wZW5BY3Rpb25MaXN0LCBvcGVuTWFuYWdlSW1wb3J0RXhwb3J0TW9kYWwsIG9wZW5NYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQsIG9wZW5Nb2RhbFVwbG9hZEdyaWQsIG9wZW5Ob3Rlc0xpc3QsIG9wZW5Uc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvbW9kYWwtb3Blbi5mdW5jdGlvbic7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vZXJyb3ItcmVzcG9uc2UtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwUm91dGVzIH0gZnJvbSAnLi4vLi4vcm91dGVzL2FwcC5yb3V0ZXMnO1xyXG5pbXBvcnQgeyBNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvbWFuYWdlLXJlcG9ydGluZy5yb3V0ZXMnO1xyXG5pbXBvcnQgeyBUc2lTZW5kTWFpbENvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1zZW5kLW1haWwvdHNpLXNlbmQtbWFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBFbWFpbEluZm9ybWF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uL2NvbmZpZ3VyYXRpb24vZW1haWwtaW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBNYWlsaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uL21haWxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcG9ydGluZ0luZm9ybWF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3JlcG9ydGluZy9yZXBvcnRpbmctaW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBUc2lNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC90c2ktbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IElucHV0UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi9pbnB1dC1yZWdpc3RyeS5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcmVwb3J0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXBvcnRpbmcuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcG9ydGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG4gIHJlcG9ydFRvUHJpbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIHRvU2VuZEVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvck1lc3NhZ2VLZXk6IHN0cmluZyA9ICdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnO1xyXG4gIG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTGFyZ2U7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9yZXBvcnREaXNjcmltaW5hdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gcGFyYW1ldHJlOiBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllID0gbmV3IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUoKTtcclxuICBASW5wdXQoKSBzaG93SW1wb3J0RXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Tm90ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0luZm9CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgc2hvd1ByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHNldCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI3JlZ2lvbiBJbnB1dCBwcm9wZXJ0aWVzXHJcbiAgQElucHV0KCkgZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLz0gYCR7R2VzdGlvbkNvbW1lcmNpYWxlU2VnbWVudHMuZmFjdHVyZVZlbnRlfS8xNjVlYzVmZC00ZDM0LTQ1NDYtYWUxNS0wMDQ0ZTcwOGI5ZDlgO1xyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGlzRm9ybUVuZHBvaW50UGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBidXNpbmVzc0NsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIEBJbnB1dCgpIGh0dHBNZXRob2RUeXBlPzogc3RyaW5nXHJcbiAgQElucHV0KCkgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tUmVwb3J0aW5nTW9kZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcGFnZWRSZXF1ZXN0PzogSVBhZ2VkUmVxdWVzdDtcclxuICBASW5wdXQoKVxyXG4gIGdldCByZXBvcnREaXNjcmltaW5hdG9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGlzY3JpbWluYXRvcjtcclxuICB9XHJcblxyXG4gIHNldCByZXBvcnREaXNjcmltaW5hdG9yKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3JlcG9ydERpc2NyaW1pbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIF9ub21icmVEb2N1bWVudHNKb2ludHM6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KClcclxuICBnZXQgbm9tYnJlRG9jdW1lbnRzSm9pbnRzKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbm9tYnJlRG9jdW1lbnRzSm9pbnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vbWJyZURvY3VtZW50c0pvaW50cyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX25vbWJyZURvY3VtZW50c0pvaW50cyA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9ub21icmVEb2N1bWVudHNKb2ludHMgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gJ3Nob3ctaGlkZS1jb25maWctYnV0dG9uJztcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtVWlkczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZEl0ZW1VaWRzKGxpc3RVaWRzOiBBcnJheTxhbnk+W10pIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbVVpZHMgPSBsaXN0VWlkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtVWlkcygpOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1VaWRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZnJvbVRzaUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGZyb21Uc2lGb3JtKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9mcm9tVHNpRm9ybSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZyb21Uc2lGb3JtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zyb21Uc2lGb3JtXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jdXN0b21TZW5kTWFpbE1vZGU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjdXN0b21TZW5kTWFpbE1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2N1c3RvbVNlbmRNYWlsTW9kZSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGN1c3RvbVNlbmRNYWlsTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXN0b21TZW5kTWFpbE1vZGVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlcG9ydGluZ0luZm9ybWF0aW9uPzogUmVwb3J0aW5nSW5mb3JtYXRpb25cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlcG9ydGluZ0luZm9ybWF0aW9uKHZhbHVlOiBSZXBvcnRpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fcmVwb3J0aW5nSW5mb3JtYXRpb24gPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXBvcnRpbmdJbmZvcm1hdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXBvcnRpbmdJbmZvcm1hdGlvblxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIEBPdXRwdXQoKSByZWZyZXNoRGF0YTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZWRNb2RhbEZpbGVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgdG9nZ2xlRGVzaWduTW9kZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgnd3JhcHBlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gIHdyYXBwZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgcmVwb3J0czogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVtdID0gW107XHJcbiAgc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xyXG5cclxuICBwdWJsaWMgZ2V0IGVuYWJsZVRvUHJpbnRSZXBvcnQoKXtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAhdGhpcy5mcm9tVHNpRm9ybSB8fCB0aGlzLl9pbnB1dFJlZ2lzdHJ5U2VydmljZS5nZXRBbGwoKS5ldmVyeSh4ID0+IHtcclxuICAgICAgcmV0dXJuICF4LmlzRGlydHlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXBvcnRGb3JGaWNoZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5mb3JtRW5kcG9pbnQ/LmluY2x1ZGVzKCdnZXRhbGxwYWdlZCcpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXBvcnRpbmdTZXJ2aWNlOiBSZXBvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZGVudGl0eU1hbmFnZXJTZXJ2aWNlOiBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogVHNpTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY29yZEluZm9Qb3B1cFNlcnZpY2U6IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgX2ZpY2hpZXJTZXJ2aWNlOiBGaWNoaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfbWFpbGluZ1NlcnZpY2U6IE1haWxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5wdXRSZWdpc3RyeVNlcnZpY2UgOiBJbnB1dFJlZ2lzdHJ5U2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvL2hhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGV2ZW50c1xyXG4gIG9uUHJpbnREZWZhdWx0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5nZXREZWZhdWx0UmVwb3J0KHRoaXMuZm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhOiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGRhdGE/LnVpZCwgZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBvcnRQZGYoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5fZXhwb3J0UGRmKGRhdGEudWlkLCBkYXRhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbmRQZGYoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VzdG9tU2VuZE1haWxNb2RlKSB7XHJcbiAgICAgIHRoaXMudG9TZW5kRW1haWwgPSB0aGlzLnJlcG9ydGluZ0luZm9ybWF0aW9uPy5kZXN0aW5hdGlvbkFkZHJlc3NcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbmRQZGYoZGF0YS51aWQsIGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbmRQZGYoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1FbmRwb2ludCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbikge1xyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24gPSB0aGlzLnJlcG9ydHMuZmluZCgoeCkgPT4geC51aWQgPT0gaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNhdmVTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLlhNZWRpdW07XHJcbiAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICBkYXRhOiB7IHNhdmVTdWJqZWN0LCBlbWFpbDogdGhpcy50b1NlbmRFbWFpbCB9LFxyXG4gICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBtb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICBUc2lTZW5kTWFpbENvbXBvbmVudCxcclxuICAgICAgICAgIGNvbmZcclxuICAgICAgICApO1xyXG4gICAgICAgIHNhdmVTdWJqZWN0LnN1YnNjcmliZSgodmFsOiBFbWFpbEluZm9ybWF0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXZhbC50b0FkZHJlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXZhbC5zdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24hLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXN0RW5kcG9pbnRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuZXhwb3J0UmVwb3J0RmlsZVRvUGRmKHJlcG9ydFRvUHJpbnQpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKGJsb2IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ1JlcG9ydC5wZGYnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogYmxvYi50eXBlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGxldCBhdHRhY2htZW50czogRmlsZVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2gobmV3RmlsZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFpbGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuc2VuZE1haWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWwudG9BZGRyZXNzISxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5zdWJqZWN0ISxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5tZXNzYWdlID8/IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5jY0FkZHJlc3NcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2VudFN1Y2Nlc3NGdWxseVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkb3dubG9hZGluZyB0aGUgUERGJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhwb3J0UGRmKFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydEluZm9ybWF0aW9uPzogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKGlkICE9IHVuZGVmaW5lZCAmJiBpZCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1FbmRwb2ludCAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtRW5kcG9pbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24pIHtcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uID0gdGhpcy5yZXBvcnRzLmZpbmQoKHgpID0+IHgudWlkID09IGlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24gfHwgIXJlcG9ydEluZm9ybWF0aW9uLnJlc3RFbmRwb2ludCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiEucmVwb3J0VHlwZSxcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXN0RW5kcG9pbnRcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmV4cG9ydFJlcG9ydEZpbGVUb1BkZihyZXBvcnRUb1ByaW50KVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5leHQ6IChibG9iKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gJ1JlcG9ydC5wZGYnO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXROb21icmVGaWNoaWVyKCkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZVxyXG4gICAgICAgIC5HZXROb21icmVGaWNoaWVySm9pbnRCeUlkKHRoaXMuaWQgPz8gXCJcIilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbWJyZURvY3VtZW50c0pvaW50cyA9IGRhdGE7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHNob3dVcGxvYWREaWFsb2coKSB7XHJcblxyXG4gICAgY29uc3QgY29uZiA9IHtcclxuICAgICAgZGF0YToge30sXHJcbiAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUhLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplIS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Nb2RhbFVwbG9hZEdyaWQodGhpcy5faW5qZWN0b3IsIGNvbmYpXHJcblxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlRmlsZU1hbmFnZUNvbXBvbmVudCgpKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XHJcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IFByb2dyZXNzRXZlbnQ8RmlsZVJlYWRlcj4pID0+IHtcclxuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgQXJyYXlCdWZmZXI7XHJcbiAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBiYXNlNjRDb250ZW50ID0gdGhpcy5hcnJheUJ1ZmZlclRvQmFzZTY0KGFycmF5QnVmZmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmljaGllclRvU2VuZCA9IG5ldyBGaWNoaWVyKCk7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5kYXRlRmljaGllciA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5ub20gPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5vYmpldCA9ICcnO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQubm9tRmljaGllckNvbXBsZXQgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQuY29udGVudSA9IGJhc2U2NENvbnRlbnQ7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC50YWJsZUxpZWUgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5wa2V5ID0gdGhpcy5pZDtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLnR5cGVGaWNoaWVyID0gJzQzN0MwOEQ1LUMxNjktNDE2Ny04RDM3LUY4QUM2QzkwNUUyMyc7IC8vIFRPRE86IE1vbW9cclxuXHJcbiAgICAgICAgdGhpcy5fZmljaGllclNlcnZpY2UuY3JlYXRlKGZpY2hpZXJUb1NlbmQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKHRoaXMubChcIkZpY2hpZXIgZW5yZWdpc3Ryw6kgIVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5sKFwiRXJyZXVyIGxvcnMgZGUgbOKAmWVucmVnaXN0cmVtZW50ICFcIikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaG93RGlhbG9nKCkge1xyXG4gICAgdGhpcy5fb3Blbk1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93RXhwb3J0SW1wb3J0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3Blbk1hbmFnZUltcG9ydEV4cG9ydE1vZGFsKHRoaXMuX2luamVjdG9yLCB0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuZm9ybU5hbWUsIHRoaXMucGFnZWRSZXF1ZXN0KVxyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsLCB0cnVlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmZyb21Uc2lGb3JtKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlRGVzaWduTW9kZS5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVMaXN0U3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX3ZpZXdSZXBvcnQoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgLy8gY2FzZSB0aGVyZSBpcyBkZWZhdWx0IHJlcG9ydFxyXG4gICAgICBpZiAodGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMuZm9ybUVuZHBvaW50ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uKSB7XHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiA9IHRoaXMucmVwb3J0cy5maW5kKCh4KSA9PiB4LnVpZCA9PSBpZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uIHx8ICFyZXBvcnRJbmZvcm1hdGlvbi5yZXN0RW5kcG9pbnQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmFkZFJlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlc3RFbmRwb2ludFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0VG9QcmludElkID0gZGF0YS51aWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydFRlbXBsYXRlQnlJZChpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVuYW50VWlkID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxWaWV3ZXIgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB1cmxWaWV3ZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtdmlld2VyLyR7dGhpcy5yZXBvcnRUb1ByaW50SWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdXJsVmlld2VyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHtBcHBSb3V0ZXMuYXBwfS8ke0FwcFJvdXRlcy5kYXNoYm9hcmR9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZFZpZXdlcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb1ByaW50fT0ke3RoaXMucmVwb3J0VG9QcmludElkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5SVEYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHVybFZpZXdlciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L21haWxtZXJnZS1yZWFkb25seW1vZGUvJHt0aGlzLnJlcG9ydFRvUHJpbnRJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmxWaWV3ZXIsICdfYmxhbmsnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gbm8gZGVmYXVsdCByZXBvcnRcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9QcmludChcclxuICAgIHVpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0VHlwZTogbnVtYmVyLFxyXG4gICAgcmVzdEVuZHBvaW50Pzogc3RyaW5nLFxyXG4gICAgbW9kdWxlPzogc3RyaW5nLFxyXG4gICAgb3JkZXI/OiBudW1iZXIsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvUHJpbnQge1xyXG4gICAgbGV0IHRva2VuID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG4gICAgbGV0IHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxyXG4gICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpLm5hbWU7XHJcbiAgICBpZiAodXNlcm5hbWUpIHtcclxuICAgICAgaWYgKHVpZCAmJiAvKnRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmKi8gdG9rZW4pIHtcclxuICAgICAgICBsZXQgbmV3UmVwb3J0VG9QcmludDogUmVwb3J0VG9QcmludCA9IHtcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChyZXN0RW5kcG9pbnQsIHRoaXMuaWQpID8/XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgIDogdGhpcy5mb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keSA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgICBmb3JtTmFtZTogdGhpcy5mb3JtTmFtZSxcclxuICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmdldEh0dHBNZXRob2RUeXBlKClcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3UmVwb3J0VG9QcmludDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiwgZm9ybU5hbWUsIGZvcm1FbmRwb2ludCBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vcGVuTW9kYWwoKSB7XHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZztcclxuICAgIGNvbmYgPSB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBvdGhlckZvcm1OYW1lOiB0aGlzLmZvcm1OYW1lLFxyXG4gICAgICAgIG90aGVyRm9ybUVuZHBvaW50OiB0aGlzLmZvcm1FbmRwb2ludCxcclxuICAgICAgICBmb3JtRW5kcG9pbnRCb2R5OiB0aGlzLmZvcm1FbmRwb2ludEJvZHksXHJcbiAgICAgICAgaXNGb3JtRW5kcG9pbnRQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkLFxyXG4gICAgICAgIGZpbHRlcnNIdG1sVGVtcGxhdGU6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50czogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICBidXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgcmVwb3J0RGlzY3JpbWluYXRvcjogdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yLFxyXG4gICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgIHJlcXVlc3REYXRhOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgIGN1c3RvbVJlcG9ydGluZ01vZGU6IHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSxcclxuICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5nZXRIdHRwTWV0aG9kVHlwZSgpLFxyXG4gICAgICB9LFxyXG4gICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IGF3YWl0IG9wZW5NYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQodGhpcy5faW5qZWN0b3IsIGNvbmYpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SHR0cE1ldGhvZFR5cGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc1JlcG9ydEZvckZpY2hlICYmICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUpIHtcclxuICAgICAgcmV0dXJuIEh0dHBNZXRob2RUeXBlLkdFVDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5odHRwTWV0aG9kVHlwZSAmJiB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cE1ldGhvZFR5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSHR0cE1ldGhvZFR5cGUuUE9TVDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlRmlsZU1hbmFnZUNvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VkTW9kYWxGaWxlVXBsb2FkLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsPzogYW55LCByZWZyZXNoRGF0YTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZnJlc2hEYXRhLmVtaXQocmVmcmVzaERhdGEpO1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvblJpZ2h0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy5fZ2V0QWxsUmVwb3J0cyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxuICB9XHJcblxyXG4gIGhpZGVDb250ZXh0TWVudSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuICAgIC8vIHRoaXMucmVwb3J0cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RDb250ZXh0T3B0aW9uKGl0ZW06IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZpZXdSZXBvcnQoaXRlbS51aWQpO1xyXG4gICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFJlcG9ydHMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnJlcG9ydHMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0cyhcclxuICAgICAgICAgIHRoaXMuZm9ybU5hbWUgPz8gJycsXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3JcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZ2V0QWxsUmVwb3J0cyhjbGlja1g6IG51bWJlciwgY2xpY2tZOiBudW1iZXIpIHtcclxuICAgIGF3YWl0IHRoaXMuZ2V0UmVwb3J0cygpO1xyXG5cclxuICAgIGlmICh0aGlzLnJlcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCByZWN0ID0gdGhpcy53cmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogY2xpY2tYIC0gcmVjdC5sZWZ0LFxyXG4gICAgICAgIHk6IGNsaWNrWSAtIHJlY3QudG9wLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyB2aWV3Tm90ZXMoKSB7XHJcbiAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTm90ZXNMaXN0KHRoaXMuX2luamVjdG9yKVxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB2aWV3QWN0aW9uKCkge1xyXG4gICAgY29uc3QgcmVmID0gYXdhaXQgb3BlbkFjdGlvbkxpc3QodGhpcy5faW5qZWN0b3IpXHJcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcbiAgXHJcbiAgdmlld0luZm8oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZEluZm9Qb3B1cFNlcnZpY2VcclxuICAgICAgICAuZ2V0SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MhLCB0aGlzLmlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9XHJcbiAgICAgICAgICAgICAgJ1VJRCA6ICAnICtcclxuICAgICAgICAgICAgICB0aGlzLmlkICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgYnkgOiAgJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5jcmVhdGlvblVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgYnkgOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLm1vZGlmVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlU2Fpc2llICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlTW9kaWY7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBVaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvblVzZXI6IGRhdGEuY3JlYXRpb25Vc2VyLFxyXG4gICAgICAgICAgICAgICAgbW9kaWZVc2VyOiBkYXRhLm1vZGlmVXNlcixcclxuICAgICAgICAgICAgICAgIGRhdGVTYWlzaWU6IGRhdGEuZGF0ZVNhaXNpZSxcclxuICAgICAgICAgICAgICAgIGRhdGVNb2RpZjogZGF0YS5kYXRlTW9kaWYsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aWR0aDogJzkwcmVtJyxcclxuICAgICAgICAgICAgICBoZWlnaHQ6ICc4MHJlbScsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIGhpZGUodmFsPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fZGlhbG9nUmVmICE9IG51bGwgJiYgdGhpcy5fZGlhbG9nUmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UodmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMubG9jYWxpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbXgtMlwiPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cIm1hbmFnZV9yZXBvcnRzX2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbaWNvblNyY109XCInLi9hc3NldHMvaWNvbnMvaWNvbi1wcmludGVyLWdyb3VwLXdoaXRlLnBuZydcIlxyXG4gICAgICBbaWNvbldpZHRoXT1cIjIwXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9yZXBvcnRzJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dEaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInByaW50X2RlZmF1bHRfcmVwb3J0X2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYnRuLXdyYXBwZXJcIlxyXG4gICAgI3dyYXBwZXJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXByaW50IHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX3JpZ2h0Q2xpY2snXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAoY2xpY2spPVwib25QcmludERlZmF1bHQoJGV2ZW50KVwiXHJcbiAgICAgIChyaWdodENsaWNrKT1cIm9uUmlnaHRDbGljaygkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgIDwhLS0gYHNoYXJlZF9yZXBvcnRpbmdfcHJpbnRfcmVwb3J0YCBrZXkgZm9yIGBJbXByaW1lcmAgdGV4dCAgKHJlcGxhY2UgaXQgYXMgdmFsdWUgb3IgdG9vbHRpcCBpZiBuZWVkIGl0KSAtLT5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic2hvd0NvbnRleHRNZW51ICYmIGVuYWJsZVRvUHJpbnRSZXBvcnRcIlxyXG4gICAgICBjbGFzcz1cImNvbnRleHQtbWVudVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgICAgICdsZWZ0LnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi54XHJcbiAgICAgIH1cIlxyXG4gICAgICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgcmVwb3J0IG9mIHJlcG9ydHNcIlxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb250ZXh0T3B0aW9uKHJlcG9ydClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgcmVwb3J0Lm5hbWUgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAqbmdJZj1cIihmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcykgJiYgZW5hYmxlVG9QcmludFJlcG9ydFwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzZW5kX3JlcG9ydF9ieV9lbWFpbF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXNlbmQgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfc2VuZF9tYWlsJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cIm9uU2VuZFBkZigkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIHNob3dVcGxvYWRCdXR0b25cIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYXR0YWNobWVudF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJ0bi13cmFwcGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXBhcGVyY2xpcCBwLWJ1dHRvbi1pY29uXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19hdHRhY2htZW50J1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dVcGxvYWREaWFsb2coKVwiXHJcbiAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgICA8c3BhbiAqbmdJZj1cIm5vbWJyZURvY3VtZW50c0pvaW50cyAmJiBub21icmVEb2N1bWVudHNKb2ludHMgPiAwXCIgY2xhc3M9XCJjdXN0b20tYmFkZ2VcIj5cclxuICAgICAge3sgbm9tYnJlRG9jdW1lbnRzSm9pbnRzIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiYnVzaW5lc3NDbGFzcyAmJiBzaG93SW1wb3J0RXhwb3J0QnV0dG9uXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImltcG9ydF9leHBvcnRfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1hcnJvdy1yaWdodC1hcnJvdy1sZWZ0IHAtYnV0dG9uLWljb25cIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbWFuYWdlX2V4cG9ydF9pbXBvcnQnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dFeHBvcnRJbXBvcnREaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd05vdGVCdXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNoYXJlZF9zaG93X25vdGVzX2J1dHRvblwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCJ7eyBjb25maWdNb2RlQnV0dG9uSWQgfX1cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLWNvbW1lbnQgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF90c2lfY29tcG9uZW50X2dlc3Rpb25fZGVzX25vdGVzJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXdhcm5pbmcgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKGNsaWNrKT1cInZpZXdOb3RlcygpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzaG93QWN0aW9uQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzaGFyZWRfc2hvd19hY3Rpb25fYnV0dG9uXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBpZD1cIidzaG93LWFjdGlvbi1idXR0b24nXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1ib2x0IHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfdHNpX2NvbXBvbmVudF9nZXN0aW9uX2Rlc19hY3Rpb24nXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24td2FybmluZyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5IHRleHQtd2hpdGVcIlxyXG4gICAgICAob25DbGljayk9XCJ2aWV3QWN0aW9uKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dJbmZvQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzaGFyZWRfc2hvd19pbmZvX2J1dHRvblwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCInc2hvdy1pbmZvLWJ1dHRvbidcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLWluZm8gcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9hY3Rpb25zX2luZm8nXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24taW5mbyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5IHRleHQtd2hpdGVcIlxyXG4gICAgICAoY2xpY2spPVwidmlld0luZm8oJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd1ByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCJ7eyBjb25maWdNb2RlQnV0dG9uSWQgfX1cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLWV5ZSBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3RzaV9jb21wb25lbnRfY29uZmlnX3Nob3dfaGlkZSdcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAoY2xpY2spPVwicHJlc2VudGF0aW9uRGVzaWduZXJDb25maWcoKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPGRpdiAqbmdJZj1cInNob3dDb250ZXh0TWVudVwiXHJcbiAgY2xhc3M9XCJjb250ZXh0LW1lbnVcIlxyXG4gIFtuZ1N0eWxlXT1cIntcclxuICAgICd0b3AucHgnOiBjb250ZXh0TWVudVBvc2l0aW9uLnksXHJcbiAgICAnbGVmdC5weCc6IGNvbnRleHRNZW51UG9zaXRpb24ueFxyXG4gIH1cIlxyXG4gIChtb3VzZWxlYXZlKT1cImhpZGVDb250ZXh0TWVudSgpXCI+XHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgcmVwb3J0IG9mIHJlcG9ydHNcIlxyXG4gICAgY2xhc3M9XCJtZW51LWl0ZW1cIlxyXG4gICAgKGNsaWNrKT1cIm9uU2VsZWN0Q29udGV4dE9wdGlvbihyZXBvcnQpXCI+XHJcbiAgICB7e3JlcG9ydC5uYW1lfX1cclxuICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG4iXX0=
|
|
685
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQXVCLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE9BQU8sRUFBNkMsT0FBTyxFQUE4QixNQUFNLGNBQWMsQ0FBQztBQUU5RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPekQsT0FBTyxFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUdyTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1B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RyxZQUFZO3NCQUFwQixLQUFLO2dCQUVGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFZRixxQkFBcUI7c0JBRHhCLEtBQUs7Z0JBY0YsRUFBRTtzQkFETCxLQUFLO2dCQVNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBWUssV0FBVztzQkFEckIsS0FBSztnQkFXSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBWUssb0JBQW9CO3NCQUQ5QixLQUFLO2dCQVlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFLUCxVQUFVO3NCQURULFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy90b29sdGlwUG9zaXRpb24uZW51bSc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSwgSHR0cE1ldGhvZFR5cGUsIFRzaVJlcG9ydFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElNb2RhbFNpemUsIElQYWdlZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgT3B0aW9uYWxFbmRwb2ludHMsIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsIEZpY2hpZXIsIFJlcG9ydFRvUHJpbnQsIFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IHF1ZXJ5UGFyYW1OYW1lc0NvbnN0IH0gZnJvbSAnLi4vLi4vY29uc3RzL3F1ZXJ5UGFyYW1OYW1lcy5jb25zdCc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBMYXlvdXRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0L2xheW91dC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNvcmQtaW5mby1wb3B1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWRlbnRpdHlNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb24vaWRlbnRpdHktbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydGluZy9yZXBvcnRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IG9wZW5BY3Rpb25MaXN0LCBvcGVuTWFuYWdlSW1wb3J0RXhwb3J0TW9kYWwsIG9wZW5NYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQsIG9wZW5Nb2RhbFVwbG9hZEdyaWQsIG9wZW5Ob3Rlc0xpc3QsIG9wZW5Uc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvbW9kYWwtb3Blbi5mdW5jdGlvbic7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vZXJyb3ItcmVzcG9uc2UtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwUm91dGVzIH0gZnJvbSAnLi4vLi4vcm91dGVzL2FwcC5yb3V0ZXMnO1xyXG5pbXBvcnQgeyBNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvbWFuYWdlLXJlcG9ydGluZy5yb3V0ZXMnO1xyXG5pbXBvcnQgeyBUc2lTZW5kTWFpbENvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1zZW5kLW1haWwvdHNpLXNlbmQtbWFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBFbWFpbEluZm9ybWF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uL2NvbmZpZ3VyYXRpb24vZW1haWwtaW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBNYWlsaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uL21haWxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcG9ydGluZ0luZm9ybWF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3JlcG9ydGluZy9yZXBvcnRpbmctaW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBUc2lNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC90c2ktbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IElucHV0UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi9pbnB1dC1yZWdpc3RyeS5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcmVwb3J0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXBvcnRpbmcuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcG9ydGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG4gIHJlcG9ydFRvUHJpbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIHRvU2VuZEVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvck1lc3NhZ2VLZXk6IHN0cmluZyA9ICdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnO1xyXG4gIG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTGFyZ2U7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9yZXBvcnREaXNjcmltaW5hdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gcGFyYW1ldHJlOiBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllID0gbmV3IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUoKTtcclxuICBASW5wdXQoKSBzaG93SW1wb3J0RXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Tm90ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0luZm9CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgc2hvd1ByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHNldCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI3JlZ2lvbiBJbnB1dCBwcm9wZXJ0aWVzXHJcbiAgQElucHV0KCkgZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLz0gYCR7R2VzdGlvbkNvbW1lcmNpYWxlU2VnbWVudHMuZmFjdHVyZVZlbnRlfS8xNjVlYzVmZC00ZDM0LTQ1NDYtYWUxNS0wMDQ0ZTcwOGI5ZDlgO1xyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGlzRm9ybUVuZHBvaW50UGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBidXNpbmVzc0NsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIEBJbnB1dCgpIGh0dHBNZXRob2RUeXBlPzogc3RyaW5nXHJcbiAgQElucHV0KCkgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tUmVwb3J0aW5nTW9kZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcGFnZWRSZXF1ZXN0PzogSVBhZ2VkUmVxdWVzdDtcclxuICBASW5wdXQoKVxyXG4gIGdldCByZXBvcnREaXNjcmltaW5hdG9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGlzY3JpbWluYXRvcjtcclxuICB9XHJcblxyXG4gIHNldCByZXBvcnREaXNjcmltaW5hdG9yKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3JlcG9ydERpc2NyaW1pbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIF9ub21icmVEb2N1bWVudHNKb2ludHM6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KClcclxuICBnZXQgbm9tYnJlRG9jdW1lbnRzSm9pbnRzKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbm9tYnJlRG9jdW1lbnRzSm9pbnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vbWJyZURvY3VtZW50c0pvaW50cyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX25vbWJyZURvY3VtZW50c0pvaW50cyA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9ub21icmVEb2N1bWVudHNKb2ludHMgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gJ3Nob3ctaGlkZS1jb25maWctYnV0dG9uJztcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtVWlkczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZEl0ZW1VaWRzKGxpc3RVaWRzOiBBcnJheTxhbnk+W10pIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbVVpZHMgPSBsaXN0VWlkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtVWlkcygpOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1VaWRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZnJvbVRzaUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGZyb21Uc2lGb3JtKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9mcm9tVHNpRm9ybSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZyb21Uc2lGb3JtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zyb21Uc2lGb3JtXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jdXN0b21TZW5kTWFpbE1vZGU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjdXN0b21TZW5kTWFpbE1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2N1c3RvbVNlbmRNYWlsTW9kZSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGN1c3RvbVNlbmRNYWlsTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXN0b21TZW5kTWFpbE1vZGVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlcG9ydGluZ0luZm9ybWF0aW9uPzogUmVwb3J0aW5nSW5mb3JtYXRpb25cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlcG9ydGluZ0luZm9ybWF0aW9uKHZhbHVlOiBSZXBvcnRpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fcmVwb3J0aW5nSW5mb3JtYXRpb24gPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXBvcnRpbmdJbmZvcm1hdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXBvcnRpbmdJbmZvcm1hdGlvblxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIEBPdXRwdXQoKSByZWZyZXNoRGF0YTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZWRNb2RhbEZpbGVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgdG9nZ2xlRGVzaWduTW9kZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgnd3JhcHBlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gIHdyYXBwZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgcmVwb3J0czogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVtdID0gW107XHJcbiAgc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xyXG5cclxuICBwdWJsaWMgZ2V0IGVuYWJsZVRvUHJpbnRSZXBvcnQoKXtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAhdGhpcy5mcm9tVHNpRm9ybSB8fCB0aGlzLl9pbnB1dFJlZ2lzdHJ5U2VydmljZS5nZXRBbGwoKS5ldmVyeSh4ID0+IHtcclxuICAgICAgcmV0dXJuICF4LmlzRGlydHlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXBvcnRGb3JGaWNoZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5mb3JtRW5kcG9pbnQ/LmluY2x1ZGVzKCdnZXRhbGxwYWdlZCcpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXBvcnRpbmdTZXJ2aWNlOiBSZXBvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZGVudGl0eU1hbmFnZXJTZXJ2aWNlOiBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogVHNpTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY29yZEluZm9Qb3B1cFNlcnZpY2U6IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgX2ZpY2hpZXJTZXJ2aWNlOiBGaWNoaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfbWFpbGluZ1NlcnZpY2U6IE1haWxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5wdXRSZWdpc3RyeVNlcnZpY2UgOiBJbnB1dFJlZ2lzdHJ5U2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvL2hhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGV2ZW50c1xyXG4gIG9uUHJpbnREZWZhdWx0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5nZXREZWZhdWx0UmVwb3J0KHRoaXMuZm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhOiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGRhdGE/LnVpZCwgZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBvcnRQZGYoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5fZXhwb3J0UGRmKGRhdGEudWlkLCBkYXRhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbmRQZGYoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VzdG9tU2VuZE1haWxNb2RlKSB7XHJcbiAgICAgIHRoaXMudG9TZW5kRW1haWwgPSB0aGlzLnJlcG9ydGluZ0luZm9ybWF0aW9uPy5kZXN0aW5hdGlvbkFkZHJlc3NcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbmRQZGYoZGF0YS51aWQsIGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbmRQZGYoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1FbmRwb2ludCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbikge1xyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24gPSB0aGlzLnJlcG9ydHMuZmluZCgoeCkgPT4geC51aWQgPT0gaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNhdmVTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLlhNZWRpdW07XHJcbiAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICBkYXRhOiB7IHNhdmVTdWJqZWN0LCBlbWFpbDogdGhpcy50b1NlbmRFbWFpbCB9LFxyXG4gICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBtb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICBUc2lTZW5kTWFpbENvbXBvbmVudCxcclxuICAgICAgICAgIGNvbmZcclxuICAgICAgICApO1xyXG4gICAgICAgIHNhdmVTdWJqZWN0LnN1YnNjcmliZSgodmFsOiBFbWFpbEluZm9ybWF0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXZhbC50b0FkZHJlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXZhbC5zdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24hLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXN0RW5kcG9pbnRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuZXhwb3J0UmVwb3J0RmlsZVRvUGRmKHJlcG9ydFRvUHJpbnQpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKGJsb2IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ1JlcG9ydC5wZGYnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogYmxvYi50eXBlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGxldCBhdHRhY2htZW50czogRmlsZVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2gobmV3RmlsZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFpbGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuc2VuZE1haWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWwudG9BZGRyZXNzISxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5zdWJqZWN0ISxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5tZXNzYWdlID8/IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5jY0FkZHJlc3NcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2VudFN1Y2Nlc3NGdWxseVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkb3dubG9hZGluZyB0aGUgUERGJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhwb3J0UGRmKFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydEluZm9ybWF0aW9uPzogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKGlkICE9IHVuZGVmaW5lZCAmJiBpZCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1FbmRwb2ludCAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtRW5kcG9pbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24pIHtcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uID0gdGhpcy5yZXBvcnRzLmZpbmQoKHgpID0+IHgudWlkID09IGlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24gfHwgIXJlcG9ydEluZm9ybWF0aW9uLnJlc3RFbmRwb2ludCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiEucmVwb3J0VHlwZSxcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXN0RW5kcG9pbnRcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmV4cG9ydFJlcG9ydEZpbGVUb1BkZihyZXBvcnRUb1ByaW50KVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5leHQ6IChibG9iKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gJ1JlcG9ydC5wZGYnO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXROb21icmVGaWNoaWVyKCkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZVxyXG4gICAgICAgIC5HZXROb21icmVGaWNoaWVySm9pbnRCeUlkKHRoaXMuaWQgPz8gXCJcIilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbWJyZURvY3VtZW50c0pvaW50cyA9IGRhdGE7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHNob3dVcGxvYWREaWFsb2coKSB7XHJcblxyXG4gICAgY29uc3QgY29uZiA9IHtcclxuICAgICAgZGF0YToge30sXHJcbiAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUhLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplIS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Nb2RhbFVwbG9hZEdyaWQodGhpcy5faW5qZWN0b3IsIGNvbmYpXHJcblxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlRmlsZU1hbmFnZUNvbXBvbmVudCgpKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XHJcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IFByb2dyZXNzRXZlbnQ8RmlsZVJlYWRlcj4pID0+IHtcclxuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgQXJyYXlCdWZmZXI7XHJcbiAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBiYXNlNjRDb250ZW50ID0gdGhpcy5hcnJheUJ1ZmZlclRvQmFzZTY0KGFycmF5QnVmZmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmljaGllclRvU2VuZCA9IG5ldyBGaWNoaWVyKCk7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5kYXRlRmljaGllciA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5ub20gPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5vYmpldCA9ICcnO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQubm9tRmljaGllckNvbXBsZXQgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQuY29udGVudSA9IGJhc2U2NENvbnRlbnQ7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC50YWJsZUxpZWUgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5wa2V5ID0gdGhpcy5pZDtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLnR5cGVGaWNoaWVyID0gJzQzN0MwOEQ1LUMxNjktNDE2Ny04RDM3LUY4QUM2QzkwNUUyMyc7IC8vIFRPRE86IE1vbW9cclxuXHJcbiAgICAgICAgdGhpcy5fZmljaGllclNlcnZpY2UuY3JlYXRlKGZpY2hpZXJUb1NlbmQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKHRoaXMubChcIkZpY2hpZXIgZW5yZWdpc3Ryw6kgIVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5sKFwiRXJyZXVyIGxvcnMgZGUgbOKAmWVucmVnaXN0cmVtZW50ICFcIikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaG93RGlhbG9nKCkge1xyXG4gICAgdGhpcy5fb3Blbk1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93RXhwb3J0SW1wb3J0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3Blbk1hbmFnZUltcG9ydEV4cG9ydE1vZGFsKHRoaXMuX2luamVjdG9yLCB0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuZm9ybU5hbWUsIHRoaXMucGFnZWRSZXF1ZXN0KVxyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsLCB0cnVlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmZyb21Uc2lGb3JtKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlRGVzaWduTW9kZS5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVMaXN0U3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX3ZpZXdSZXBvcnQoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgLy8gY2FzZSB0aGVyZSBpcyBkZWZhdWx0IHJlcG9ydFxyXG4gICAgICBpZiAodGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMuZm9ybUVuZHBvaW50ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uKSB7XHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiA9IHRoaXMucmVwb3J0cy5maW5kKCh4KSA9PiB4LnVpZCA9PSBpZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uIHx8ICFyZXBvcnRJbmZvcm1hdGlvbi5yZXN0RW5kcG9pbnQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmFkZFJlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlc3RFbmRwb2ludFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0VG9QcmludElkID0gZGF0YS51aWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydFRlbXBsYXRlQnlJZChpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVuYW50VWlkID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxWaWV3ZXIgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB1cmxWaWV3ZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtdmlld2VyLyR7dGhpcy5yZXBvcnRUb1ByaW50SWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdXJsVmlld2VyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHtBcHBSb3V0ZXMuYXBwfS8ke0FwcFJvdXRlcy5kYXNoYm9hcmR9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZFZpZXdlcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb1ByaW50fT0ke3RoaXMucmVwb3J0VG9QcmludElkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5SVEYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHVybFZpZXdlciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L21haWxtZXJnZS1yZWFkb25seW1vZGUvJHt0aGlzLnJlcG9ydFRvUHJpbnRJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmxWaWV3ZXIsICdfYmxhbmsnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gbm8gZGVmYXVsdCByZXBvcnRcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9QcmludChcclxuICAgIHVpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0VHlwZTogbnVtYmVyLFxyXG4gICAgcmVzdEVuZHBvaW50Pzogc3RyaW5nLFxyXG4gICAgbW9kdWxlPzogc3RyaW5nLFxyXG4gICAgb3JkZXI/OiBudW1iZXIsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvUHJpbnQge1xyXG4gICAgbGV0IHRva2VuID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG4gICAgbGV0IHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxyXG4gICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpLm5hbWU7XHJcbiAgICBpZiAodXNlcm5hbWUpIHtcclxuICAgICAgaWYgKHVpZCAmJiAvKnRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmKi8gdG9rZW4pIHtcclxuICAgICAgICBsZXQgbmV3UmVwb3J0VG9QcmludDogUmVwb3J0VG9QcmludCA9IHtcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChyZXN0RW5kcG9pbnQsIHRoaXMuaWQpID8/XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgIDogdGhpcy5mb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keSA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgICBmb3JtTmFtZTogdGhpcy5mb3JtTmFtZSxcclxuICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmdldEh0dHBNZXRob2RUeXBlKClcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3UmVwb3J0VG9QcmludDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiwgZm9ybU5hbWUsIGZvcm1FbmRwb2ludCBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vcGVuTW9kYWwoKSB7XHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZztcclxuICAgIGNvbmYgPSB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBvdGhlckZvcm1OYW1lOiB0aGlzLmZvcm1OYW1lLFxyXG4gICAgICAgIG90aGVyRm9ybUVuZHBvaW50OiB0aGlzLmZvcm1FbmRwb2ludCxcclxuICAgICAgICBmb3JtRW5kcG9pbnRCb2R5OiB0aGlzLmZvcm1FbmRwb2ludEJvZHksXHJcbiAgICAgICAgaXNGb3JtRW5kcG9pbnRQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkLFxyXG4gICAgICAgIGZpbHRlcnNIdG1sVGVtcGxhdGU6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50czogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICBidXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgcmVwb3J0RGlzY3JpbWluYXRvcjogdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yLFxyXG4gICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgIHJlcXVlc3REYXRhOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgIGN1c3RvbVJlcG9ydGluZ01vZGU6IHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSxcclxuICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5nZXRIdHRwTWV0aG9kVHlwZSgpLFxyXG4gICAgICB9LFxyXG4gICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IGF3YWl0IG9wZW5NYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQodGhpcy5faW5qZWN0b3IsIGNvbmYpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SHR0cE1ldGhvZFR5cGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc1JlcG9ydEZvckZpY2hlICYmICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUpIHtcclxuICAgICAgcmV0dXJuIEh0dHBNZXRob2RUeXBlLkdFVDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5odHRwTWV0aG9kVHlwZSAmJiB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cE1ldGhvZFR5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSHR0cE1ldGhvZFR5cGUuUE9TVDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlRmlsZU1hbmFnZUNvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VkTW9kYWxGaWxlVXBsb2FkLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsPzogYW55LCByZWZyZXNoRGF0YTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZnJlc2hEYXRhLmVtaXQocmVmcmVzaERhdGEpO1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvblJpZ2h0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy5fZ2V0QWxsUmVwb3J0cyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxuICB9XHJcblxyXG4gIGhpZGVDb250ZXh0TWVudSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuICAgIC8vIHRoaXMucmVwb3J0cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RDb250ZXh0T3B0aW9uKGl0ZW06IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZpZXdSZXBvcnQoaXRlbS51aWQpO1xyXG4gICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFJlcG9ydHMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnJlcG9ydHMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0cyhcclxuICAgICAgICAgIHRoaXMuZm9ybU5hbWUgPz8gJycsXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3JcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZ2V0QWxsUmVwb3J0cyhjbGlja1g6IG51bWJlciwgY2xpY2tZOiBudW1iZXIpIHtcclxuICAgIGF3YWl0IHRoaXMuZ2V0UmVwb3J0cygpO1xyXG5cclxuICAgIGlmICh0aGlzLnJlcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCByZWN0ID0gdGhpcy53cmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogY2xpY2tYIC0gcmVjdC5sZWZ0LFxyXG4gICAgICAgIHk6IGNsaWNrWSAtIHJlY3QudG9wLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyB2aWV3Tm90ZXMoKSB7XHJcbiAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTm90ZXNMaXN0KHRoaXMuX2luamVjdG9yKVxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB2aWV3QWN0aW9uKCkge1xyXG4gICAgY29uc3QgcmVmID0gYXdhaXQgb3BlbkFjdGlvbkxpc3QodGhpcy5faW5qZWN0b3IpXHJcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcbiAgXHJcbiAgdmlld0luZm8oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZEluZm9Qb3B1cFNlcnZpY2VcclxuICAgICAgICAuZ2V0SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MhLCB0aGlzLmlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9XHJcbiAgICAgICAgICAgICAgJ1VJRCA6ICAnICtcclxuICAgICAgICAgICAgICB0aGlzLmlkICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgYnkgOiAgJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5jcmVhdGlvblVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgYnkgOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLm1vZGlmVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlU2Fpc2llICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlTW9kaWY7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBVaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvblVzZXI6IGRhdGEuY3JlYXRpb25Vc2VyLFxyXG4gICAgICAgICAgICAgICAgbW9kaWZVc2VyOiBkYXRhLm1vZGlmVXNlcixcclxuICAgICAgICAgICAgICAgIGRhdGVTYWlzaWU6IGRhdGEuZGF0ZVNhaXNpZSxcclxuICAgICAgICAgICAgICAgIGRhdGVNb2RpZjogZGF0YS5kYXRlTW9kaWYsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aWR0aDogJzkwcmVtJyxcclxuICAgICAgICAgICAgICBoZWlnaHQ6ICc4MHJlbScsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIGhpZGUodmFsPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fZGlhbG9nUmVmICE9IG51bGwgJiYgdGhpcy5fZGlhbG9nUmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UodmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMubG9jYWxpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbXgtMlwiPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cIm1hbmFnZV9yZXBvcnRzX2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbaWNvblNyY109XCInLi9hc3NldHMvaWNvbnMvaWNvbi1wcmludGVyLWdyb3VwLXdoaXRlLnBuZydcIlxyXG4gICAgICBbaWNvbldpZHRoXT1cIjIwXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9yZXBvcnRzJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dEaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInByaW50X2RlZmF1bHRfcmVwb3J0X2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYnRuLXdyYXBwZXJcIlxyXG4gICAgI3dyYXBwZXJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXByaW50IHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX3JpZ2h0Q2xpY2snXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAoY2xpY2spPVwib25QcmludERlZmF1bHQoJGV2ZW50KVwiXHJcbiAgICAgIChyaWdodENsaWNrKT1cIm9uUmlnaHRDbGljaygkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgIDwhLS0gYHNoYXJlZF9yZXBvcnRpbmdfcHJpbnRfcmVwb3J0YCBrZXkgZm9yIGBJbXByaW1lcmAgdGV4dCAgKHJlcGxhY2UgaXQgYXMgdmFsdWUgb3IgdG9vbHRpcCBpZiBuZWVkIGl0KSAtLT5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic2hvd0NvbnRleHRNZW51ICYmIGVuYWJsZVRvUHJpbnRSZXBvcnRcIlxyXG4gICAgICBjbGFzcz1cImNvbnRleHQtbWVudVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgICAgICdsZWZ0LnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi54XHJcbiAgICAgIH1cIlxyXG4gICAgICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgcmVwb3J0IG9mIHJlcG9ydHNcIlxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb250ZXh0T3B0aW9uKHJlcG9ydClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgcmVwb3J0Lm5hbWUgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAqbmdJZj1cIihmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcykgJiYgZW5hYmxlVG9QcmludFJlcG9ydFwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzZW5kX3JlcG9ydF9ieV9lbWFpbF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXNlbmQgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfc2VuZF9tYWlsJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cIm9uU2VuZFBkZigkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIHNob3dVcGxvYWRCdXR0b25cIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYXR0YWNobWVudF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJ0bi13cmFwcGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXBhcGVyY2xpcCBwLWJ1dHRvbi1pY29uXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19hdHRhY2htZW50J1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dVcGxvYWREaWFsb2coKVwiXHJcbiAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgICA8c3BhbiAqbmdJZj1cIm5vbWJyZURvY3VtZW50c0pvaW50cyAmJiBub21icmVEb2N1bWVudHNKb2ludHMgPiAwXCIgY2xhc3M9XCJjdXN0b20tYmFkZ2VcIj5cclxuICAgICAge3sgbm9tYnJlRG9jdW1lbnRzSm9pbnRzIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiYnVzaW5lc3NDbGFzcyAmJiBzaG93SW1wb3J0RXhwb3J0QnV0dG9uXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImltcG9ydF9leHBvcnRfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1hcnJvdy1yaWdodC1hcnJvdy1sZWZ0IHAtYnV0dG9uLWljb25cIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbWFuYWdlX2V4cG9ydF9pbXBvcnQnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dFeHBvcnRJbXBvcnREaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd05vdGVCdXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNoYXJlZF9zaG93X25vdGVzX2J1dHRvblwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1jb21tZW50IHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfdHNpX2NvbXBvbmVudF9nZXN0aW9uX2Rlc19ub3RlcydcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi13YXJuaW5nIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHkgdGV4dC13aGl0ZVwiXHJcbiAgICAgIChjbGljayk9XCJ2aWV3Tm90ZXMoKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd0FjdGlvbkJ1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hhcmVkX3Nob3dfYWN0aW9uX2J1dHRvblwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCInc2hvdy1hY3Rpb24tYnV0dG9uJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktYm9sdCBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3RzaV9jb21wb25lbnRfZ2VzdGlvbl9kZXNfYWN0aW9uJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXdhcm5pbmcgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKG9uQ2xpY2spPVwidmlld0FjdGlvbigpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzaG93SW5mb0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hhcmVkX3Nob3dfaW5mb19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwiJ3Nob3ctaW5mby1idXR0b24nXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1pbmZvIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19pbmZvJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKGNsaWNrKT1cInZpZXdJbmZvKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwie3sgY3VzdG9tUmVwb3J0aW5nTW9kZSA/ICdjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3QnIDogY29uZmlnTW9kZUJ1dHRvbklkIH19XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1leWUgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF90c2lfY29tcG9uZW50X2NvbmZpZ19zaG93X2hpZGUnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXYgKm5nSWY9XCJzaG93Q29udGV4dE1lbnVcIlxyXG4gIGNsYXNzPVwiY29udGV4dC1tZW51XCJcclxuICBbbmdTdHlsZV09XCJ7XHJcbiAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgJ2xlZnQucHgnOiBjb250ZXh0TWVudVBvc2l0aW9uLnhcclxuICB9XCJcclxuICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChjbGljayk9XCJvblNlbGVjdENvbnRleHRPcHRpb24ocmVwb3J0KVwiPlxyXG4gICAge3tyZXBvcnQubmFtZX19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuIl19
|