@eqproject/eqp-dynamic-module 2.11.0 → 2.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +4 -4
  2. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +4 -4
  3. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +4 -4
  4. package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +1 -1
  5. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +8 -8
  6. package/esm2020/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.mjs +12 -12
  7. package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +12 -12
  8. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +9 -9
  9. package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +4 -4
  10. package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +1 -1
  11. package/esm2020/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +2 -2
  12. package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +2 -2
  13. package/esm2020/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +4 -4
  14. package/esm2020/lib/components/private/graphs/graphs.component.mjs +1 -1
  15. package/esm2020/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +4 -4
  16. package/esm2020/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +2 -2
  17. package/esm2020/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +2 -2
  18. package/esm2020/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +4 -4
  19. package/esm2020/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +2 -2
  20. package/esm2020/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +2 -2
  21. package/fesm2015/eqproject-eqp-dynamic-module.mjs +71 -71
  22. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  23. package/fesm2020/eqproject-eqp-dynamic-module.mjs +71 -71
  24. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  25. package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +1 -1
  26. package/lib/components/private/add-form-field/add-form-field.component.d.ts +1 -1
  27. package/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.d.ts +9 -9
  28. package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +9 -9
  29. package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +7 -7
  30. package/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.d.ts +1 -1
  31. package/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.d.ts +1 -1
  32. package/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.d.ts +1 -1
  33. package/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.d.ts +1 -1
  34. package/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.d.ts +1 -1
  35. package/package.json +2 -2
@@ -176,7 +176,7 @@ export class FilterFormStatisticComponent {
176
176
  this.exportEqpTable.exportFileName = "DynamicModule_" + this.form.Code;
177
177
  this.exportEqpTable.buttonIcon = "cloud-download";
178
178
  // tmw-table non ha un formato XLSX nativo (v. AI_BUILD_PLAN.md di tmw-table, decisione
179
- // "zero I/O") - a differenza di eqp-table (che delegava a mat-table-exporter) va fornito un
179
+ // "zero I/O") va fornito un
180
180
  // customExportHandlers che genera l'XLSX con la libreria xlsx (SheetJS), già presente come
181
181
  // dipendenza pinnata nell'override di package.json.
182
182
  this.exportEqpTable.customExportHandlers = { xlsx: (rows, columns) => this.exportRowsAsXlsx(rows, columns) };
@@ -531,10 +531,10 @@ export class FilterFormStatisticComponent {
531
531
  }
532
532
  }
533
533
  FilterFormStatisticComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterFormStatisticComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
534
- FilterFormStatisticComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", userID: "userID", externalButtons: "externalButtons", actionButtons: "actionButtons", formID: "formID", form: "form", record: "record", onlyView: "onlyView", showHiddenFields: "showHiddenFields", defaultListActions: "defaultListActions", filterResultViewMode: "filterResultViewMode", Statistic: "Statistic", numberOfColumns: "numberOfColumns" }, outputs: { fireTrigger: "fireTrigger", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", afterFilter: "afterFilter", afterOutputExternalFilters: "afterOutputExternalFilters" }, viewQueries: [{ propertyName: "tableOutdated", first: true, predicate: ["tableOutdated"], descendants: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"!showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton)\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"outputExternalFilters()\">\r\n Salva modifiche filtro\r\n </button> \r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <tmw-table\r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n\r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </tmw-table>\r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields' let-outdatedfields='outdatedFields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"(!field.InListView && !showHiddenFields)\"\r\n [ngClass]=\"utilityService.getFieldFilterStyleClass(field, numberOfColumns)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [filterResultViewMode]=\"filterResultViewMode\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"outdatedTableLoaded && outdatedFields != null && outdatedFields.length > 0\">\r\n\r\n <div class=\"outdatedTableContainer\">\r\n\r\n <h2>Filtri Obsoleti</h2>\r\n <p>Sono filtri che sono stati configurati in una versione precedente di questo modulo e poi salvati</p>\r\n\r\n <tmw-table\r\n class=\"outdatedTable\"\r\n style=\"cursor: pointer\"\r\n #tableOutdated\r\n emptyTableMessage=\"\"\r\n [data]=\"outdatedFields\"\r\n [columns]=\"columnsOutdated\"\r\n\r\n [createMatCard]=\"false\"\r\n\r\n [matPaginatorCount]=\"outdatedFields != null && outdatedFields.length > 0 ? outdatedFields.length : 0\"\r\n [matPaginatorIndex]=\"0\"\r\n [matPaginatorSize]=\"5\"\r\n [matPaginatorLength]=\"[5]\"\r\n >\r\n </tmw-table>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".dynamic-module-eqp-table{padding:20px}.outdatedTableContainer{width:100%;display:flex;justify-content:center;align-items:center;flex-flow:column;margin-top:35px}.outdatedTableContainer .outdatedTable{width:80%}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.TmwTableComponent, selector: "tmw-table", inputs: ["data", "columns", "headerTitle", "emptyTableMessage", "tableColor", "createMatCard", "createMatCardHeader", "isMultiLanguage", "cultureInfo", "rowHeightMode", "rowHeight", "rowExpandable", "enableMultiSort", "isTableSearcheable", "searchText", "isSingleColumnFilter", "showSingleFilterButton", "switchFilterType", "switchFilterToGenericText", "switchFilterToSingleText", "showFilterText", "hideFilterText", "singleFilterColumnVisible", "currencyFilterToReplace", "currencyFilterToUse", "serverSideSort", "serverSideFilter", "selection", "isMultipleSelection", "disableRow", "disableRowColor", "isHighlight", "highlightColor", "rowCssClass", "cellCssClass", "headerCellCssClass", "rowIdentity", "isSelectedPropertyName", "paginatorVisible", "matPaginatorLength", "matPaginatorSize", "matPaginatorIndex", "matPaginatorCount", "disablePageStorageSave", "tableName", "disableColumnStateStorageSave", "showFirstLastButtons", "serverSidePagination", "serverPagination", "loading", "antiFreeze", "antiFreezeThreshold", "virtualScroll", "estimatedRowHeight", "virtualScrollBuffer", "enableDragAndDrop", "enableDragColumn", "changeDragRowPosition", "enableDragDrop", "isStickyHeader", "columnOverflowMode", "maxBodyHeight", "allowNewLine", "cardBreakpoint", "forceCardLayout", "chooseColumnsToShow", "chooseColumnsToShowText", "customButtons", "enableColumnReorder", "bulkActions", "showAggregationRow", "exportEqpTable", "notPaginatedExport", "notPaginatedFunctionType", "notPaginatedFunctionPath", "notPaginatedFunctionPostData", "notPaginatedFunctionReturnParameter", "notPaginatedFunctionReturnIsJson", "notPaginatedMergeController", "notPaginatedMergePostData", "suppressRenderDataUpdate"], outputs: ["antiFreezeChange", "columnResize", "columnReorder", "sortChange", "multiSortChange", "filteredColumns", "filterChange", "checkboxInfo", "checkboxJustSelectedInfo", "highlightSelected", "highlightDeselected", "pageChange", "dragStartedEvent", "dragReleasedEvent", "dragEndedEvent", "dragDropEvent", "eqpExportStarted", "eqpExportCompleted", "eqpExportEnded", "exportAllRequested"] }, { kind: "component", type: i6.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "orgaID", "form", "defaultListViewFunction", "externalButtons", "actionButtons", "onlyView", "records", "highlightFilter", "QueryEditorComponent", "formulaObject", "contestualizationParams"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent", "dragStarted", "dragReleased", "out", "fireTrigger", "clickDragIndicator"] }, { kind: "component", type: i7.DynamicModuleFilterFixComponent, selector: "dynamic-module-filter-fix", inputs: ["field", "form", "record", "Statistic", "filterResultViewMode"], outputs: ["filterChange"] }] });
534
+ FilterFormStatisticComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", userID: "userID", externalButtons: "externalButtons", actionButtons: "actionButtons", formID: "formID", form: "form", record: "record", onlyView: "onlyView", showHiddenFields: "showHiddenFields", defaultListActions: "defaultListActions", filterResultViewMode: "filterResultViewMode", Statistic: "Statistic", numberOfColumns: "numberOfColumns" }, outputs: { fireTrigger: "fireTrigger", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", afterFilter: "afterFilter", afterOutputExternalFilters: "afterOutputExternalFilters" }, viewQueries: [{ propertyName: "tableOutdated", first: true, predicate: ["tableOutdated"], descendants: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"!showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton)\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"outputExternalFilters()\">\r\n Salva modifiche filtro\r\n </button> \r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-tmw-table\">\r\n <tmw-table\r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n\r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </tmw-table>\r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields' let-outdatedfields='outdatedFields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"(!field.InListView && !showHiddenFields)\"\r\n [ngClass]=\"utilityService.getFieldFilterStyleClass(field, numberOfColumns)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [filterResultViewMode]=\"filterResultViewMode\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"outdatedTableLoaded && outdatedFields != null && outdatedFields.length > 0\">\r\n\r\n <div class=\"outdatedTableContainer\">\r\n\r\n <h2>Filtri Obsoleti</h2>\r\n <p>Sono filtri che sono stati configurati in una versione precedente di questo modulo e poi salvati</p>\r\n\r\n <tmw-table\r\n class=\"outdatedTable\"\r\n style=\"cursor: pointer\"\r\n #tableOutdated\r\n emptyTableMessage=\"\"\r\n [data]=\"outdatedFields\"\r\n [columns]=\"columnsOutdated\"\r\n\r\n [createMatCard]=\"false\"\r\n\r\n [matPaginatorCount]=\"outdatedFields != null && outdatedFields.length > 0 ? outdatedFields.length : 0\"\r\n [matPaginatorIndex]=\"0\"\r\n [matPaginatorSize]=\"5\"\r\n [matPaginatorLength]=\"[5]\"\r\n >\r\n </tmw-table>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".dynamic-module-tmw-table{padding:20px}.outdatedTableContainer{width:100%;display:flex;justify-content:center;align-items:center;flex-flow:column;margin-top:35px}.outdatedTableContainer .outdatedTable{width:80%}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.TmwTableComponent, selector: "tmw-table", inputs: ["data", "columns", "headerTitle", "emptyTableMessage", "tableColor", "createMatCard", "createMatCardHeader", "isMultiLanguage", "cultureInfo", "rowHeightMode", "rowHeight", "rowExpandable", "enableMultiSort", "isTableSearcheable", "searchText", "isSingleColumnFilter", "showSingleFilterButton", "switchFilterType", "switchFilterToGenericText", "switchFilterToSingleText", "showFilterText", "hideFilterText", "singleFilterColumnVisible", "currencyFilterToReplace", "currencyFilterToUse", "serverSideSort", "serverSideFilter", "selection", "isMultipleSelection", "disableRow", "disableRowColor", "isHighlight", "highlightColor", "rowCssClass", "cellCssClass", "headerCellCssClass", "rowIdentity", "isSelectedPropertyName", "paginatorVisible", "matPaginatorLength", "matPaginatorSize", "matPaginatorIndex", "matPaginatorCount", "disablePageStorageSave", "tableName", "disableColumnStateStorageSave", "showFirstLastButtons", "serverSidePagination", "serverPagination", "loading", "antiFreeze", "antiFreezeThreshold", "virtualScroll", "estimatedRowHeight", "virtualScrollBuffer", "enableDragAndDrop", "enableDragColumn", "changeDragRowPosition", "enableDragDrop", "isStickyHeader", "columnOverflowMode", "maxBodyHeight", "allowNewLine", "cardBreakpoint", "forceCardLayout", "chooseColumnsToShow", "chooseColumnsToShowText", "customButtons", "enableColumnReorder", "bulkActions", "showAggregationRow", "exportEqpTable", "notPaginatedExport", "notPaginatedFunctionType", "notPaginatedFunctionPath", "notPaginatedFunctionPostData", "notPaginatedFunctionReturnParameter", "notPaginatedFunctionReturnIsJson", "notPaginatedMergeController", "notPaginatedMergePostData", "suppressRenderDataUpdate"], outputs: ["antiFreezeChange", "columnResize", "columnReorder", "sortChange", "multiSortChange", "filteredColumns", "filterChange", "checkboxInfo", "checkboxJustSelectedInfo", "highlightSelected", "highlightDeselected", "pageChange", "dragStartedEvent", "dragReleasedEvent", "dragEndedEvent", "dragDropEvent", "eqpExportStarted", "eqpExportCompleted", "eqpExportEnded", "exportAllRequested"] }, { kind: "component", type: i6.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "orgaID", "form", "defaultListViewFunction", "externalButtons", "actionButtons", "onlyView", "records", "highlightFilter", "QueryEditorComponent", "formulaObject", "contestualizationParams"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent", "dragStarted", "dragReleased", "out", "fireTrigger", "clickDragIndicator"] }, { kind: "component", type: i7.DynamicModuleFilterFixComponent, selector: "dynamic-module-filter-fix", inputs: ["field", "form", "record", "Statistic", "filterResultViewMode"], outputs: ["filterChange"] }] });
535
535
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterFormStatisticComponent, decorators: [{
536
536
  type: Component,
537
- args: [{ selector: 'filter-form-statistic', template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"!showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton)\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"outputExternalFilters()\">\r\n Salva modifiche filtro\r\n </button> \r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <tmw-table\r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n\r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </tmw-table>\r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields' let-outdatedfields='outdatedFields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"(!field.InListView && !showHiddenFields)\"\r\n [ngClass]=\"utilityService.getFieldFilterStyleClass(field, numberOfColumns)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [filterResultViewMode]=\"filterResultViewMode\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"outdatedTableLoaded && outdatedFields != null && outdatedFields.length > 0\">\r\n\r\n <div class=\"outdatedTableContainer\">\r\n\r\n <h2>Filtri Obsoleti</h2>\r\n <p>Sono filtri che sono stati configurati in una versione precedente di questo modulo e poi salvati</p>\r\n\r\n <tmw-table\r\n class=\"outdatedTable\"\r\n style=\"cursor: pointer\"\r\n #tableOutdated\r\n emptyTableMessage=\"\"\r\n [data]=\"outdatedFields\"\r\n [columns]=\"columnsOutdated\"\r\n\r\n [createMatCard]=\"false\"\r\n\r\n [matPaginatorCount]=\"outdatedFields != null && outdatedFields.length > 0 ? outdatedFields.length : 0\"\r\n [matPaginatorIndex]=\"0\"\r\n [matPaginatorSize]=\"5\"\r\n [matPaginatorLength]=\"[5]\"\r\n >\r\n </tmw-table>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".dynamic-module-eqp-table{padding:20px}.outdatedTableContainer{width:100%;display:flex;justify-content:center;align-items:center;flex-flow:column;margin-top:35px}.outdatedTableContainer .outdatedTable{width:80%}\n"] }]
537
+ args: [{ selector: 'filter-form-statistic', template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"!showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton)\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"outputExternalFilters()\">\r\n Salva modifiche filtro\r\n </button> \r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-tmw-table\">\r\n <tmw-table\r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n\r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </tmw-table>\r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields' let-outdatedfields='outdatedFields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"(!field.InListView && !showHiddenFields)\"\r\n [ngClass]=\"utilityService.getFieldFilterStyleClass(field, numberOfColumns)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [filterResultViewMode]=\"filterResultViewMode\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"outdatedTableLoaded && outdatedFields != null && outdatedFields.length > 0\">\r\n\r\n <div class=\"outdatedTableContainer\">\r\n\r\n <h2>Filtri Obsoleti</h2>\r\n <p>Sono filtri che sono stati configurati in una versione precedente di questo modulo e poi salvati</p>\r\n\r\n <tmw-table\r\n class=\"outdatedTable\"\r\n style=\"cursor: pointer\"\r\n #tableOutdated\r\n emptyTableMessage=\"\"\r\n [data]=\"outdatedFields\"\r\n [columns]=\"columnsOutdated\"\r\n\r\n [createMatCard]=\"false\"\r\n\r\n [matPaginatorCount]=\"outdatedFields != null && outdatedFields.length > 0 ? outdatedFields.length : 0\"\r\n [matPaginatorIndex]=\"0\"\r\n [matPaginatorSize]=\"5\"\r\n [matPaginatorLength]=\"[5]\"\r\n >\r\n </tmw-table>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".dynamic-module-tmw-table{padding:20px}.outdatedTableContainer{width:100%;display:flex;justify-content:center;align-items:center;flex-flow:column;margin-top:35px}.outdatedTableContainer .outdatedTable{width:80%}\n"] }]
538
538
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UtilityHelperService }]; }, propDecorators: { configurations: [{
539
539
  type: Input
540
540
  }], endPointConfiguration: [{
@@ -580,4 +580,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
580
580
  type: ViewChildren,
581
581
  args: ["fieldTemplate"]
582
582
  }] } });
583
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZvcm0tc3RhdGlzdGljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXN0YXRpc3RpY3MvZmlsdGVyLWZvcm0tc3RhdGlzdGljL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1zdGF0aXN0aWNzL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy9maWx0ZXItZm9ybS1zdGF0aXN0aWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5SCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBUSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFnQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRW5GLE9BQU8sRUFBNkMsYUFBYSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFNUgsT0FBTyxFQUFFLGVBQWUsRUFBYSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFr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OzswSEFwbkJVLDRCQUE0Qjs4R0FBNUIsNEJBQTRCLHc0QkMxQnpDLGsxSkFnSGM7NEZEdEZELDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSx1QkFBdUI7MklBTXhCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFd0MsYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTZCbkMsZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBR1AsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtU2NhbGFyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpZWxkRml4Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtIH0gZnJvbSAnLi8uLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyU3RhdGlzdGljLCBTdGF0aXN0aWMgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvc3RhdGlzdGljLm1vZGVsJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCc7XHJcbmltcG9ydCB7IENvbmZpZ0NvbHVtbiwgVG13VGFibGVDb21wb25lbnQsIFRtd1RhYmxlRXhwb3J0Q29uZmlnLCBUeXBlQ29sdW1uIH0gZnJvbSAndG13LXRhYmxlJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uLCBGaXJlVHJpZ2dlcn0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBMb2dpY09wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2xvZ2ljT3BlcmF0b3IubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmaWx0ZXItZm9ybS1zdGF0aXN0aWMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItZm9ybS1zdGF0aXN0aWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJGb3JtU3RhdGlzdGljQ29tcG9uZW50IHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBBcnJheTxBY3Rpb25CdXR0b24+ID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsOyAvLyBwcmV2aWV3XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIHByZXZpZXcgY29uZmlnXHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQgfCBzdHJpbmcgPSBudWxsOyAvLyBlZGl0XHJcbiAgQElucHV0KCkgb25seVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93SGlkZGVuRmllbGRzOiBib29sZWFuID0gdHJ1ZTsgIFxyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7XHJcbiAgQElucHV0KCkgZmlsdGVyUmVzdWx0Vmlld01vZGU6IER5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0gPSBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLklOVEVSTkFMX0VRUFRBQkxFO1xyXG4gIEBJbnB1dCgpIFN0YXRpc3RpYzogRmlsdGVyU3RhdGlzdGljID0gbnVsbDtcclxuICBASW5wdXQoKSBudW1iZXJPZkNvbHVtbnM6IG51bWJlciA9IDM7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZU91dGRhdGVkXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZU91dGRhdGVkOiBUbXdUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgLy9QYWdpbmF0aW9uXHJcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwMDtcclxuICBwYWdlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgcGFnZUxlbmd0aDogQXJyYXk8bnVtYmVyPiA9IFs1LDEwLDI1LDEwMF1cclxuXHJcbiAgZXhwb3J0RXFwVGFibGU6IFRtd1RhYmxlRXhwb3J0Q29uZmlnID0ge307XHJcbiAgZmlsdGVyUmVzdWx0Vmlld01vZGVzID0gRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bTtcclxuXHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgc2hvd0JhY2tCdXR0b24gPSB0cnVlO1xyXG4gIHNob3dOZXdTZWFyY2hCdXR0b24gPSB0cnVlO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dMaXN0VmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbHRlclJlc3VsdHM6IEFycmF5PER5blJlY29yZD4gPSBudWxsO1xyXG4gIGZpbHRlckVxcFRhYmxlUmVzdWx0czogQXJyYXk8YW55PiA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgbGlzdFZpZXdDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RDb25maWcoKTtcclxuICBjb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+ID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBjb2x1bW5zT3V0ZGF0ZWQ6IEFycmF5PENvbmZpZ0NvbHVtbj4gPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIG91dGRhdGVkRmllbGRzOiBBcnJheTxTdGF0aXN0aWM+ID0gbmV3IEFycmF5PFN0YXRpc3RpYz4oKTtcclxuICBvdXRkYXRlZFRhYmxlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGZvcm1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGZpZWxkR3JvdXBzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PEJhc2VGaWVsZD4gfSA9IHt9O1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRmlsdGVyOiBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PER5blJlY29yZD4+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyT3V0cHV0RXh0ZXJuYWxGaWx0ZXJzOiBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGlzdGljPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGlzdGljPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFwiZmllbGRUZW1wbGF0ZVwiKVxyXG4gIGZpZWxkVGVtcGxhdGU6IFF1ZXJ5TGlzdDxEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQ+O1xyXG4gIGZpbHRlcnM6IEZpbHRlclN0YXRpc3RpYyA9IG5ldyBGaWx0ZXJTdGF0aXN0aWMoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmZvcm0uSUQgPT09ICd1bmRlZmluZWQnKXsgdGhpcy5mb3JtID0gbnVsbDsgfVxyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsICYmIHRoaXMuZm9ybUlEICE9IG51bGwpe1xyXG5cclxuXHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyTG9hZCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJMb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBhZnRlckxvYWQoKXtcclxuICAgIC8vIGFkZCBwdcOyIGZ1bnppb25hcmUgYW5jaGUgY29tZSBtb2RpZmljYSBlIGNvbWUgcHJldmlld1xyXG4gICAgLy8gaW4gYWRkIGFiYmlhbW8gaW4gaW5wdXQgbCdJRCBkZWwgRm9ybVxyXG4gICAgLy8gaW4gbW9kaWZpY2EgYWJiaWFtbyBpbiBpbnB1dCBsJ0lEIGRlbCBSZWNvcmRcclxuICAgIC8vIGluIHByZXZpZXcgYWJiaWFtbyBpbiBpbnB1dCBpbCBGb3JtKGNhc28gY29uZmlndXJhdG9yKSBvIGwnSUQgZGVsIG1vZHVsbyBvbiBvbmx5VmlldyBpbXBvc3RhdG8gYSB0cnVlXHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkFwcGx5RmlsdGVyLlVybCA9IHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuQXBwbHlGaWx0ZXIuVXJsICsgXCIvXCIgKyB0aGlzLmZvcm1JRDtcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcbiAgICB0aGlzLnNob3dTYXZlQnV0dG9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbjtcclxuICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uO1xyXG4gICAgdGhpcy5zaG93TmV3U2VhcmNoQnV0dG9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93TmV3U2VhcmNoQnV0dG9uO1xyXG5cclxuICAgIHRoaXMubGlzdFZpZXdDb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIHRoaXMubGlzdFZpZXdDb25maWd1cmF0aW9ucy51c2VySUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRDtcclxuICAgIHRoaXMubGlzdFZpZXdDb25maWd1cmF0aW9ucy5leHRlcm5hbEJ1dHRvbnMgPSBudWxsO1xyXG4gICAgdGhpcy5saXN0Vmlld0NvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG51bGw7XHJcbiAgICB0aGlzLmxpc3RWaWV3Q29uZmlndXJhdGlvbnMuZGVmYXVsdExpc3RBY3Rpb25zID0gdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnM7XHJcblxyXG4gICAgaWYodGhpcy5yZWNvcmQgPT0gbnVsbCl7XHJcbiAgICAgIHRoaXMucHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdFJlc3BvbnNlUmVjb3JkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljICE9IG51bGwgJiYgdGhpcy5TdGF0aXN0aWMuU3RhdGlzdGljcyAhPSBudWxsICYmIHRoaXMuU3RhdGlzdGljLlN0YXRpc3RpY3MubGVuZ3RoID4gMCl7XHJcbiAgICAgIC8vIElsIGZpbHRybyB2aWVuZSBjYXJpY2F0byBkYWxsJ2VzdGVybm8gZSBwb3RyZWJiZXJvIGVzc2VyY2kgZGVpIGNhbXBpIG5vbiBwacO5IGF0dHVhbGkgZSBxdWluZGkgdmFubm8gc2VwYXJhdGlcclxuICAgICAgdGhpcy5maWx0ZXJzID0gdGhpcy5TdGF0aXN0aWM7XHJcbiAgICAgIHRoaXMuU3RhdGlzdGljLlN0YXRpc3RpY3MuZm9yRWFjaCgoc3RhdGlzdGljRmllbGQ6IFN0YXRpc3RpYykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0aXN0aWNGaWVsZC5maWVsZHR5cGUgPT0gbnVsbCl7IHJldHVybjsgfVxyXG4gICAgICAgIHZhciBmb3VuZEZpZWxkSW5kZXggPSB0aGlzLmZvcm0uRmllbGRzLmZpbmQoeCA9PiB4Lk5hbWUgPT0gc3RhdGlzdGljRmllbGQua2V5KTtcclxuICAgICAgICBpZiAoZm91bmRGaWVsZEluZGV4ID09IG51bGwpe1xyXG4gICAgICAgICAgLy8gSWwgY2FtcG8gw6ggcHJlc2VudGUgbmVpIGZpbHRyaSBtYSBub24gbmVsbGEgZGVmaW5pemlvbmUgZGVsIGZvcm0gYXR0dWFsZS4gSWwgZmlsdHJvIMOoIHF1aW5kaSBvdXRkYXRlZDtcclxuICAgICAgICAgIHRoaXMub3V0ZGF0ZWRGaWVsZHMucHVzaChzdGF0aXN0aWNGaWVsZCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgXHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICB0aGlzLm91dGRhdGVkVGFibGVMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBsJ2luaXppYWxpenphemlvbmUgdGVybWluYSBjb24gaWwgcmVjdXBlcm8gZGVsIHJlY29yZCBvIGNvbiBsJ2luaXppYWxpenphemlvbmUgZGVsIGZvcm0gdnVvdG9cclxuICAgIFxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgICBcclxuICB9XHJcbiAgXHJcbiAgY29uZmlndXJlQ29sdW1ucygpe1xyXG5cclxuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgXHJcbiAgICAvLyBzZWdubyBhbmNoZSBsJ0lEIGRlbGwndXRlbnRlIGNoZSByaXNwb25kZVxyXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwidXNlcklEXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJVdGVudGVcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5maWx0ZXJFcXBUYWJsZVJlc3VsdHMgPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5maWx0ZXJSZXN1bHRzICE9IG51bGwgJiYgdGhpcy5maWx0ZXJSZXN1bHRzLmxlbmd0aCA+IDApe1xyXG4gICAgICBcclxuICAgICAgLy8gQ3JlYSBjYW1waSBlIGNvbnRlbnV0aSB0YWJlbGxhXHJcbiAgICAgIHRoaXMuZmlsdGVyUmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsaW5kZXgpID0+IHtcclxuICAgICAgICB2YXIgb2JqZWN0ID0gSlNPTi5wYXJzZShyZXN1bHQuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgaWYgKGluZGV4ID09IDApe1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChlbGVtZW50LGluZGV4MikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHsga2V5OiBlbGVtZW50LCBkaXNwbGF5OiBlbGVtZW50LCBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfX0sKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goeyBrZXk6IFwiQW5zd2VyRGF0ZVwiLCBkaXNwbGF5OiBcIkFuc3dlckRhdGVcIiwgdHlwZTogVHlwZUNvbHVtbi5EYXRlLCBmb3JtYXQ6IFwiZGQvTU0veXl5eSBISDptbTpzc1wiLCB2YWx1ZTogKCkgPT4geyByZXR1cm4gcmVzdWx0LkFuc3dlckRhdGU7IH0sIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMCVcIiB9fSwpO1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goeyBrZXk6IFwiVmVyc2lvblwiLCBkaXNwbGF5OiBcIlZlcnNpb25cIiwgdmFsdWU6ICgpID0+IHsgcmV0dXJuIHJlc3VsdC5WZXJzaW9uOyB9LCBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfX0sKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlckVxcFRhYmxlUmVzdWx0cy5wdXNoKG9iamVjdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29sdW1uc091dGRhdGVkID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnNPdXRkYXRlZC5wdXNoKHtcclxuICAgICAgICBrZXk6ICdhY3Rpb24nLCBkaXNwbGF5OiAnJyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sIGJ1dHRvbk1lbnVJY29uOiAnc2V0dGluZ3MnLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiAnMCAwIDEwJScgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IG5hbWU6IFwiUmltdW92aVwiLCBpY29uOiAndHJhc2gnLCBmbjogKGVsZW1lbnQsIGNvbCwgZWxlbWVudEluZGV4KSA9PiB0aGlzLmRlbGV0ZU91dGRhdGVkRE1GaWx0ZXIoZWxlbWVudCkgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zT3V0ZGF0ZWQucHVzaCh7IGtleTogXCJrZXlcIiwgZGlzcGxheTogXCJOb21lIGNhbXBvXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCAzMCVcIiB9fSwpO1xyXG5cclxuICAgIHRoaXMuY29sdW1uc091dGRhdGVkLnB1c2goe1xyXG4gICAgICBrZXk6IFwibG9naWNvcGVyYXRvclwiLFxyXG4gICAgICBkaXNwbGF5OiBcIk9wZXJhdG9yZVwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkVudW0sXHJcbiAgICAgIGVudW1Nb2RlbDogTG9naWNPcGVyYXRvcixcclxuICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29sdW1uc091dGRhdGVkLnB1c2goeyBrZXk6IFwidmFsdWVcIiwgZGlzcGxheTogXCJWYWxvcmVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH19LCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJjb2x1bW5zT3V0ZGF0ZWQgZXNlZ3VpdG9cIik7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVFeHBvcnQoKXtcclxuICAgIHRoaXMuZXhwb3J0RXFwVGFibGUuYnV0dG9uVGV4dCA9IFwiU2NhcmljYVwiXHJcbiAgICB0aGlzLmV4cG9ydEVxcFRhYmxlLmV4cG9ydEZpbGVUeXBlID0gXCJ4bHN4XCI7XHJcbiAgICB0aGlzLmV4cG9ydEVxcFRhYmxlLmV4cG9ydEZpbGVOYW1lID0gXCJEeW5hbWljTW9kdWxlX1wiK3RoaXMuZm9ybS5Db2RlO1xyXG4gICAgdGhpcy5leHBvcnRFcXBUYWJsZS5idXR0b25JY29uID0gXCJjbG91ZC1kb3dubG9hZFwiO1xyXG4gICAgLy8gdG13LXRhYmxlIG5vbiBoYSB1biBmb3JtYXRvIFhMU1ggbmF0aXZvICh2LiBBSV9CVUlMRF9QTEFOLm1kIGRpIHRtdy10YWJsZSwgZGVjaXNpb25lXHJcbiAgICAvLyBcInplcm8gSS9PXCIpIC0gYSBkaWZmZXJlbnphIGRpIGVxcC10YWJsZSAoY2hlIGRlbGVnYXZhIGEgbWF0LXRhYmxlLWV4cG9ydGVyKSB2YSBmb3JuaXRvIHVuXHJcbiAgICAvLyBjdXN0b21FeHBvcnRIYW5kbGVycyBjaGUgZ2VuZXJhIGwnWExTWCBjb24gbGEgbGlicmVyaWEgeGxzeCAoU2hlZXRKUyksIGdpw6AgcHJlc2VudGUgY29tZVxyXG4gICAgLy8gZGlwZW5kZW56YSBwaW5uYXRhIG5lbGwnb3ZlcnJpZGUgZGkgcGFja2FnZS5qc29uLlxyXG4gICAgdGhpcy5leHBvcnRFcXBUYWJsZS5jdXN0b21FeHBvcnRIYW5kbGVycyA9IHsgeGxzeDogKHJvd3MsIGNvbHVtbnMpID0+IHRoaXMuZXhwb3J0Um93c0FzWGxzeChyb3dzLCBjb2x1bW5zKSB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRSb3dzQXNYbHN4KHJvd3M6IGFueVtdLCBjb2x1bW5zOiBDb25maWdDb2x1bW5bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXhwb3J0YWJsZSA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudHlwZSAhPT0gVHlwZUNvbHVtbi5NZW51QWN0aW9uICYmIGNvbC50eXBlICE9PSBUeXBlQ29sdW1uLlNpbXBsZUFjdGlvbik7XHJcbiAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnaXQtSVQnKTtcclxuICAgIGNvbnN0IGhlYWRlciA9IGV4cG9ydGFibGUubWFwKGNvbCA9PiBjb2wuZGlzcGxheSk7XHJcbiAgICBjb25zdCBib2R5ID0gcm93cy5tYXAocm93ID0+IGV4cG9ydGFibGUubWFwKGNvbCA9PiB7XHJcbiAgICAgIGxldCB2YWx1ZSA9IHR5cGVvZiBjb2wudmFsdWUgPT09ICdmdW5jdGlvbicgPyBjb2wudmFsdWUocm93KSA6IChjb2wua2V5ID8gcm93W2NvbC5rZXldIDogdW5kZWZpbmVkKTtcclxuICAgICAgaWYgKGNvbC50eXBlID09PSBUeXBlQ29sdW1uLkRhdGUgJiYgdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIHZhbHVlID0gZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBjb2wuZm9ybWF0ID8/ICdzaG9ydERhdGUnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICB9KSk7XHJcbiAgICBjb25zdCB3b3Jrc2hlZXQgPSBYTFNYLnV0aWxzLmFvYV90b19zaGVldChbaGVhZGVyLCAuLi5ib2R5XSk7XHJcbiAgICBjb25zdCB3b3JrYm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcclxuICAgIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod29ya2Jvb2ssIHdvcmtzaGVldCwgJ0V4cG9ydCcpO1xyXG4gICAgWExTWC53cml0ZUZpbGUod29ya2Jvb2ssICh0aGlzLmV4cG9ydEVxcFRhYmxlLmV4cG9ydEZpbGVOYW1lIHx8ICdleHBvcnQnKSArICcueGxzeCcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRpIG9nbmkgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gcmVjb3JkLlxyXG4gICAqIFNlcnZlIGFkIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRpIHR1dHRpIGkgY2FtcGkgY2hlIGhhbm5vIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIG9uRmlsdGVyQ2hhbmdlKGV2OlN0YXRpc3RpYykge1xyXG4gICAgdmFyIHN0YXRpc3RpY3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVycy5TdGF0aXN0aWNzLmZpbHRlcih4ID0+IHgua2V5ICE9IGV2LmtleSkpKTtcclxuXHJcbiAgICBpZiAoc3RhdGlzdGljcy5sZW5ndGggPiAwKXtcclxuICAgICAgdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MgPSBzdGF0aXN0aWNzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MgPSBuZXcgQXJyYXk8U3RhdGlzdGljPigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgoZXYubG9naWNvcGVyYXRvciAhPSBudWxsICYmIGV2LnZhbHVlICE9IG51bGwpIHx8IGV2LnZpc2libGUpe1xyXG4gICAgIHRoaXMuZmlsdGVycy5TdGF0aXN0aWNzLnB1c2goZXYpOyBcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBBcHBseUZpbHRlcigpe1xyXG4gICAgdGhpcy5maWx0ZXJzLkFkZGl0aW9uYWxQYXJhbXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXM7XHJcbiAgICB0aGlzLmZpbHRlcnMuUHJlZmlsdGVyUGFyYW1zID0gdGhpcy5jb25maWd1cmF0aW9ucy5wcmVmaWx0ZXJQYXJhbXM7XHJcblxyXG4gICAgdmFyIGZpbHRlclBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJmaWx0ZXJcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZpbHRlcnMsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgfVxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkFwcGx5RmlsdGVyLFxyXG4gICAgICBmaWx0ZXJQYXJhbXMsXHJcbiAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmZpbHRlclJlc3VsdHMgPSByZXM7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVFeHBvcnQoKTtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgICAgICB0aGlzLnNob3dMaXN0VmlldyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZnRlckZpbHRlci5lbWl0KHJlcyk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvdXRwdXRFeHRlcm5hbEZpbHRlcnMoKXtcclxuICAgIHRoaXMuYWZ0ZXJPdXRwdXRFeHRlcm5hbEZpbHRlcnMuZW1pdCh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlT3V0ZGF0ZWRETUZpbHRlcihlbDogU3RhdGlzdGljKXtcclxuICAgIHZhciBpbmRleFRvRGVsZXRlID0gdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MuZmluZEluZGV4KHggPT4geC5rZXkgPT0gZWwua2V5KTtcclxuICAgIHRoaXMuZmlsdGVycy5TdGF0aXN0aWNzLnNwbGljZShpbmRleFRvRGVsZXRlLDEpO1xyXG4gICAgdmFyIG91dGRhdGVkSW5kZXhUb0RlbGV0ZSA9IHRoaXMub3V0ZGF0ZWRGaWVsZHMuZmluZEluZGV4KHggPT4geC5rZXkgPT0gZWwua2V5KTtcclxuICAgIHRoaXMub3V0ZGF0ZWRGaWVsZHMuc3BsaWNlKG91dGRhdGVkSW5kZXhUb0RlbGV0ZSwxKTtcclxuICAgIHRoaXMudGFibGVPdXRkYXRlZC5yZWxvYWREYXRhdGFibGUoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCl7XHJcblxyXG4gICAgLy8gUmVzZXR0byBpIGNhbXBpIGRlbCByZWNvcmRcclxuICAgIE9iamVjdC5rZXlzKHRoaXMucmVjb3JkKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIHRoaXMucmVjb3JkW2tleV0gPSBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJSZXN1bHRzID0gbnVsbDtcclxuICAgIHRoaXMuZmlsdGVycy5TdGF0aXN0aWNzID0gW107XHJcbiAgICB0aGlzLnNob3dMaXN0VmlldyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKXsgICAgXHJcbiAgICB0aGlzLnJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgIGlmKHRoaXMub25seVZpZXcgPT0gdHJ1ZSl7XHJcbiAgICAgIC8vIG1vZGFsaXTDoCBwcmV2aWV3XHJcbiAgICAgIGlmKHRoaXMuZm9ybSAhPSBudWxsKXtcclxuICAgICAgICAvLyBwcmV2aWV3IHBlciBpbCBjb25maWd1cmF0b3JcclxuICAgICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgICB9IGVsc2UgaWYodGhpcy5mb3JtSUQgIT0gbnVsbCl7XHJcbiAgICAgICAgLy8gcHJldmlldyBwZXIgYWRtaW5cclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEKCkgLy8gZGVudHJvIGNoaWFtYSBmaWVsZHNDb25maWdcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gYWdnaXVnbmkgbnVvdm9cclxuICAgICAgdGhpcy5maWVsZHNDb25maWcoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZWRpdFJlc3BvbnNlUmVjb3JkKCl7XHJcbiAgICAgIC8vIG1vZGlpbHTDoCBtb2RpZmljYVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgLy8gYWxsb3JhIMOoIHVuIElEXHJcbiAgICAgICAgdGhpcy5nZXRSZWNvcmRCeUlEKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaWwgcmVjb3JkIHZpZW5lIHBhc3NhdG8gY29tZSB0YWxlXHJcbiAgICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElEID0gXCIzXCI7XHJcbiAgICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgICAgdGhpcy5nZXRGb3JtQnlJRGFuZFZlcnNpb24oKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV4aXQpIHtcclxuICAgICAgLy8gdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQobnVsbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQoKDxSZWNvcmQ+dGhpcy5yZWNvcmQpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpbCByZWNvcmQgYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBvblNhdmVSZWNvcmQoZXZlbnQ6IFJlY29yZCkge1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5TYXZlRW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICB2YXIgZHluUmVjOiBEeW5SZWNvcmQgPSBuZXcgRHluUmVjb3JkKCk7XHJcbiAgICAgIGR5blJlYy5JRCA9IGV2ZW50LklEID8/IG51bGw7XHJcbiAgICAgIGR5blJlYy5FbnRJRCA9IHRoaXMuZm9ybS5JRDtcclxuICAgICAgZHluUmVjLlZlcnNpb24gPSB0aGlzLmZvcm0uVmVyc2lvbjtcclxuICAgICAgZHluUmVjLnVzZXJJRCA9IHRoaXMudXNlcklEO1xyXG4gICAgICBkeW5SZWMuVmFsdWVzID0gZXZlbnQgPz8gbnVsbDtcclxuICAgICAgZHluUmVjLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHRoaXMuY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzKGV2ZW50KTtcclxuICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIlJlY29yZFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogZHluUmVjLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7fVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGNpIGVudHJvIHNvbG8gc2Ugw6ggc3RhdG8gcGFzc2F0byBpbCBwYXJhbWV0cm8gXCJyZWNvcmRcIiBjb21lIHN0cmluZ2FcclxuICBnZXRSZWNvcmRCeUlEKCkge1xyXG4gICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLnJlY29yZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG5cclxuICAgICAgICAoPFJlY29yZD50aGlzLnJlY29yZCkgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICB0aGlzLnJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICB0aGlzLnJlY29yZC5FbnRJRCA9IHJlcy5FbnRJRDtcclxuICAgICAgICB0aGlzLnJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJlY29yZC5WYWx1ZXMgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgICAgIC8vIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEYW5kVmVyc2lvbigpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRGb3JtQnlJRGFuZFZlcnNpb24oKSB7XHJcbiAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6ICg8UmVjb3JkPnRoaXMucmVjb3JkKS5FbnRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb24sXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdldEZvcm1CeUlEYW5kVmVyc2lvbiAtIHRoaXMgcmVjb3JkXCIsIDxSZWNvcmQ+dGhpcy5yZWNvcmQpXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBcclxuICBmaWVsZHNDb25maWcoKXsgICAgICBcclxuICAgIHRoaXMuY3JlYXRlUmVjb3JkUHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgIGlmICh0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldFN0YXRpc3RpY0Zyb21GaWVsZE5hbWUoU3RhdGlzdGljczogQXJyYXk8U3RhdGlzdGljPiA9IG51bGwsIGZpZWxkTmFtZTogc3RyaW5nKTogU3RhdGlzdGljIHtcclxuICAgIHJldHVybiBTdGF0aXN0aWNzID09IG51bGwgfHwgU3RhdGlzdGljcy5sZW5ndGggPT0gMCA/IG51bGwgOiBTdGF0aXN0aWNzLmZpbmQoeCA9PiB4LmtleSA9PSBmaWVsZE5hbWUpO1xyXG4gIH0gIFxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBuZWxsJ29nZ2V0dG8gUmVjb3JkIGxlIHByb3ByaWV0w6AgbWFuY2FudGkgcmlzcGV0dG8gYWkgY2FtcGkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZVJlY29yZFByb3BlcnRpZXMoKSB7XHJcbiAgICBjb25zdCByZWNvcmRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXModGhpcy5yZWNvcmQpO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoIXJlY29yZFByb3BlcnRpZXMuZmluZCgocCkgPT4gcCA9PT0gZmllbGQuTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFtmaWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Jbm5lckZvcm1zICYmIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFycmF5TmFtZTogc3RyaW5nID0gZm9ybS5OYW1lLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgICBpZiAoIXJlY29yZFByb3BlcnRpZXMuZmluZCgocCkgPT4gcCA9PT0gYXJyYXlOYW1lKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpb3JkaW5hcmUgaSBjYW1waSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVvcmRlckZvcm1GaWVsZHMoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcyAmJiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb24gPyAxIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvbiA/IC0xIDogMCApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuQ3JlYXRlRm9ybUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLFxyXG4gICAgICB0aGlzLm9ubHlWaWV3XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaSBncnVwcGkgaW4gY3VpIHJhZ2dydXBwYXJlIGkgY2FtcGkgZGVsbGEgZm9ybSBpbiBiYXNlXHJcbiAgICogYSBjb21lIMOoIHN0YXRhIGNvbmZpZ3VyYXRhIGRhbGwndXRlbnRlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRHcm91cHMoKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5zb3J0KChhLCBiKSA9PiBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uID8gMSA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24gPyAtMSA6IDAgKVxyXG4gICAgICAubWFwKChnKSA9PiBnLk5hbWUpXHJcbiAgICAgIC5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBzW2dyb3VwTmFtZV0gPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyhyZWNvcmQ6UmVjb3JkKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVjb3JkXCIsIHJlY29yZCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQsIHRoaXMuZm9ybSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpO1xyXG4gICAgXHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IHRoaXMuZ2V0UmVzcG9uc2VUZW1wbGF0ZSh0aGlzLmZvcm0pOyAvLyBvZ2dldHRvIG5lbCBxdWFsZSB2aWVuZSBjb3N0cnVpdG8gaWwgdGVtcGxhdGUgbyBjaGUgcHJlbmRlIGlsIHZhbG9yZSBkYSB1biB0ZW1wbGF0ZSBlc3Rlcm5vXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwidGVtcGxhdGVcIiwgdGVtcGxhdGUpO1xyXG5cclxuICAgIGNvbnN0IHJlZ2V4ID0gLyMjKFtcXHddKykjIy9nO1xyXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZSwgb3V0cHV0VmFsdWVzQXJyYXksIHJlZ2V4KTsgLy8gb2dnZXR0byBjaGUgY29udGVycsOgIGwnb3V0cHV0IGVsYWJvcmF0byAgICBcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVmFsdWVzKHJlY29yZDogUmVjb3JkLCBmb3JtOiBGb3JtICk6IEFycmF5PGFueT4ge1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIGFycmF5IGNvbiBpIHZhbG9yaSBkZWxsZSByaXNwb3N0ZVxyXG4gICAgLy8oPER5blJlY29yZD50aGlzLnJlY29yZCkuVmFsdWVzIMOoIGxhIGxpc3RhIGRpIG9nZ2V0dGkge2ZpZWxkTmFtZTogdmFsb3JlfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIihyZWNvcmQpLlZhbHVlc1wiLCByZWNvcmQpO1xyXG4gICAgZm9yIChsZXQgZmllbGROYW1lIGluIHJlY29yZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIGZpZWxkTmFtZSDDqCBpbCBub21lIGRlbCBjYW1wb1xyXG4gICAgICAgIC8vIFBSRVBBUk8gVkFSSUFCSUxJIFZBTE9SSSBDT1JSRVRUSVxyXG4gICAgICAgIGxldCBmb3VuZE9iamVjdCA9IGZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAob2JqKSA9PiBvYmouTmFtZSA9PT0gZmllbGROYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZmllbGROYW1lXCIsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZvdW5kT2JqZWN0XCIsIGZvdW5kT2JqZWN0KTtcclxuICAgICAgICAvLyBnZXN0aXJlIGNhc28gZmllbGR0eXBlIDggW2VsZW5jbyBnZW5lcmljb11cclxuICAgICAgICAvLyBmYXJlIHVuIGV2YWwgcGVyIHBvcG9sYXJlIGkgdmFsdWVQYWlycyBzZSDDqCBwcmVzZW50ZSB1bmEgZm9ybXVsYVxyXG4gICAgICAgIC8vIHByZW5kZXJlIGxhIGxhYmVsIGNvcnJldHRhXHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICBpZiAoZm91bmRPYmplY3QuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl0pIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChmb3VuZE9iamVjdC5Gb3JtdWxhKSBcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gYWdnaXVuZ28gYSB2YWx1ZXBhaXJzIGkgdmFsb3JpIGNhbGNvbGF0aVxyXG4gICAgICAgICAgICAvLyAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgICAgICAgIHZhciB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgICAgZm91bmRPYmplY3QuRm9ybXVsYSxcclxuICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJ0ZW1wXCIsIHRlbXApO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGtleTIgaW4gdGVtcCkge1xyXG4gICAgICAgICAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXkyXSkpIFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNbTnVtYmVyKGtleTIpXSA9IHRlbXBba2V5Ml07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNba2V5Ml0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKHJlY29yZCkuVmFsdWVzW2ZpZWxkTmFtZV1cIiwgcmVjb3JkW2ZpZWxkTmFtZV0pO1xyXG4gICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV1cIiwgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV0pO1xyXG4gICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgaW52ZXJ0ZWQgPSB7fTtcclxuICAgICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycykgXHJcbiAgICAgICAgICB7IFxyXG4gICAgICAgICAgICBpbnZlcnRlZFsoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW2tleV1dID0ga2V5OyBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSBpbnZlcnRlZDtcclxuICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZE5hbWVdXTtcclxuICAgICAgICB9IGVsc2UgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlY29yZFtmaWVsZE5hbWVdXCIsIHJlY29yZFtmaWVsZE5hbWVdKTtcclxuICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSByZWNvcmRbZmllbGROYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvdXRwdXRWYWx1ZXNBcnJheSAxXCIsIG91dHB1dFZhbHVlc0FycmF5KTtcclxuICAgIC8vIGNhbmNlbGxvIGkgdmFsb3JpIGluZGVmaW5pdGkgbyBudWxsaVxyXG4gICAgZm9yKGNvbnN0IGNoaWF2ZSBpbiBvdXRwdXRWYWx1ZXNBcnJheSl7XHJcbiAgICAgIGlmKG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gdW5kZWZpbmVkIHx8IG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gbnVsbClcclxuICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9ICcnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWVzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVGVtcGxhdGUoZm9ybTogRm9ybSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAvLyBQUkVQQVJPIE8gUFJFTkRPIExBIFNUUlVUVFVSQSBEQSBTVEFNUEFSRVxyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoYmFzZUZpZWxkOiBCYXNlRmllbGQpID0+IHtcclxuICAgICAgdGVtcGxhdGUgKz0gJzxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcXVlc3Rpb25cIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuTGFiZWxzdHlsZUNTUyArICdcIj4nICsgYmFzZUZpZWxkLkRlc2NyaXB0aW9uICsgJzo8L3NwYW4+IDxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcmVzcG9uc2VcIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuRmllbGRzdHlsZUNTUyArICdcIj4gIyMnICsgYmFzZUZpZWxkLk5hbWUgKyAnIyM8L3NwYW4+IFxcbiA8YnI+ICc7XHJcbiAgICB9KTtcclxuICAgIC8vIChhdHR1YWxtZW50ZSBub24gZXNpc3RlIGlsIGNvbmNldHRvIGRpIHRlbXBhdGUgZGkgb3V0cHV0KVxyXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlOiBzdHJpbmcsIG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+LCByZWdleCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShyZWdleCwgKG1hdGNoLCBncm91cCkgPT4ge1xyXG4gICAgICByZXR1cm4gPHN0cmluZz5vdXRwdXRWYWx1ZXNBcnJheVtncm91cF07XHJcbiAgICB9KTtcclxuICB9ICAgXHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBhZGQtZm9ybS1yZWNvcmQtaGVhZGVyXCIgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxoND48Yj57e2Zvcm0uTmFtZX19PC9iPjwvaDQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtXCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtZm9ybVwiPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBTRU1QTElDRSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dMaXN0Vmlld1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGRzOiBmb3JtLkZpZWxkcyB9XCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtc2VtcGxpY2VcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L2Zvcm0+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yIG0tMiBhZGQtZm9ybS1yZWNvcmQtYnV0dG9uc1wiXHJcbiAgICAgICAgKm5nSWY9XCIoc2hvd0JhY2tCdXR0b24gfHwgc2hvd1NhdmVCdXR0b24pXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBtLTIgdGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInNob3dMaXN0VmlldyAmJiBzaG93TmV3U2VhcmNoQnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0KClcIj5cclxuICAgICAgICAgICAgICAgIE51b3ZhIHJpY2VyY2FcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIXNob3dMaXN0VmlldyAmJiBmaWx0ZXJSZXN1bHRWaWV3TW9kZSAhPSBmaWx0ZXJSZXN1bHRWaWV3TW9kZXMuRklMVEVSU19PTkxZXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJBcHBseUZpbHRlcigpXCI+XHJcbiAgICAgICAgICAgICAgIEVzZWd1aSBGaWx0cm9cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZmlsdGVyUmVzdWx0Vmlld01vZGUgPT0gZmlsdGVyUmVzdWx0Vmlld01vZGVzLkZJTFRFUlNfT05MWVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3V0cHV0RXh0ZXJuYWxGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgICAgU2FsdmEgbW9kaWZpY2hlIGZpbHRyb1xyXG4gICAgICAgICAgICA8L2J1dHRvbj4gICAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxsaXN0LXZpZXctZm9ybS1yZWNvcmRcclxuICAgICpuZ0lmPVwic2hvd0xpc3RWaWV3ICYmIGZpbHRlclJlc3VsdFZpZXdNb2RlID09IGZpbHRlclJlc3VsdFZpZXdNb2Rlcy5JTlRFUk5BTF9MSVNUVklFVyAmJiBmaWx0ZXJSZXN1bHRzICE9IG51bGxcIlxyXG4gICAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1saXN0LXZpZXdcIlxyXG4gICAgW2NvbmZpZ3VyYXRpb25zXT1cImxpc3RWaWV3Q29uZmlndXJhdGlvbnNcIlxyXG4gICAgW2NvbXBpbGVDb25maWd1cmF0aW9uc109XCJjb25maWd1cmF0aW9uc1wiXHJcbiAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICBbb25seVZpZXddPVwidHJ1ZVwiXHJcbiAgICBbcmVjb3Jkc109XCJmaWx0ZXJSZXN1bHRzXCJcclxuICAgIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuICAgID5cclxuICAgIDwvbGlzdC12aWV3LWZvcm0tcmVjb3JkPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93TGlzdFZpZXcgJiYgZmlsdGVyUmVzdWx0Vmlld01vZGUgPT0gZmlsdGVyUmVzdWx0Vmlld01vZGVzLklOVEVSTkFMX0VRUFRBQkxFICYmIGZpbHRlckVxcFRhYmxlUmVzdWx0cyAhPSBudWxsXCIgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1lcXAtdGFibGVcIj5cclxuICAgICAgICA8dG13LXRhYmxlXHJcblxyXG4gICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXHJcbiAgICAgICAgICAgICN0YWJsZVxyXG4gICAgICAgICAgICBlbXB0eVRhYmxlTWVzc2FnZT1cIlwiXHJcbiAgICAgICAgICAgIFtkYXRhXT1cImZpbHRlckVxcFRhYmxlUmVzdWx0c1wiXHJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICAgICAgICBbZXhwb3J0RXFwVGFibGVdPVwiZXhwb3J0RXFwVGFibGVcIlxyXG5cclxuICAgICAgICAgICAgW2Nob29zZUNvbHVtbnNUb1Nob3ddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtzd2l0Y2hGaWx0ZXJUeXBlXT1cInRydWVcIlxyXG5cclxuICAgICAgICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZVBhZ2VTdG9yYWdlU2F2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzTXVsdGlMYW5ndWFnZV09XCJ0cnVlXCJcclxuXHJcbiAgICAgICAgICAgIFttYXRQYWdpbmF0b3JDb3VudF09XCJmaWx0ZXJFcXBUYWJsZVJlc3VsdHMgIT0gbnVsbCAmJiBmaWx0ZXJFcXBUYWJsZVJlc3VsdHMubGVuZ3RoID4gMCA/IGZpbHRlckVxcFRhYmxlUmVzdWx0cy5sZW5ndGggOiAwXCJcclxuICAgICAgICAgICAgW21hdFBhZ2luYXRvckluZGV4XT1cInBhZ2VJbmRleFwiXHJcbiAgICAgICAgICAgIFttYXRQYWdpbmF0b3JTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgW21hdFBhZ2luYXRvckxlbmd0aF09XCJwYWdlTGVuZ3RoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC90bXctdGFibGU+XHJcbiAgICA8L2Rpdj4gXHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgTEEgVklTVUFMSVpaQVpJT05FIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGVzIGxldC1maWVsZHM9J2ZpZWxkcycgbGV0LW91dGRhdGVkZmllbGRzPSdvdXRkYXRlZEZpZWxkcyc+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhc2hvd0xpc3RWaWV3XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzXCIgW2hpZGRlbl09XCIoIWZpZWxkLkluTGlzdFZpZXcgJiYgIXNob3dIaWRkZW5GaWVsZHMpXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidXRpbGl0eVNlcnZpY2UuZ2V0RmllbGRGaWx0ZXJTdHlsZUNsYXNzKGZpZWxkLCBudW1iZXJPZkNvbHVtbnMpXCI+XHJcbiAgICAgICAgICAgIDxkeW5hbWljLW1vZHVsZS1maWx0ZXItZml4ICNmaWVsZFRlbXBsYXRlIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbcmVjb3JkXT1cInJlY29yZFwiIFtmaWx0ZXJSZXN1bHRWaWV3TW9kZV09XCJmaWx0ZXJSZXN1bHRWaWV3TW9kZVwiIFtTdGF0aXN0aWNdPVwiZ2V0U3RhdGlzdGljRnJvbUZpZWxkTmFtZShTdGF0aXN0aWM/LlN0YXRpc3RpY3MsZmllbGQuTmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJvbkZpbHRlckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvZHluYW1pYy1tb2R1bGUtZmlsdGVyLWZpeD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIm91dGRhdGVkVGFibGVMb2FkZWQgJiYgb3V0ZGF0ZWRGaWVsZHMgIT0gbnVsbCAmJiBvdXRkYXRlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRkYXRlZFRhYmxlQ29udGFpbmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8aDI+RmlsdHJpIE9ic29sZXRpPC9oMj5cclxuICAgICAgICAgICAgPHA+U29ubyBmaWx0cmkgY2hlIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaW4gdW5hIHZlcnNpb25lIHByZWNlZGVudGUgZGkgcXVlc3RvIG1vZHVsbyBlIHBvaSBzYWx2YXRpPC9wPlxyXG5cclxuICAgICAgICAgICAgPHRtdy10YWJsZVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJvdXRkYXRlZFRhYmxlXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICN0YWJsZU91dGRhdGVkXHJcbiAgICAgICAgICAgICAgICBlbXB0eVRhYmxlTWVzc2FnZT1cIlwiXHJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJvdXRkYXRlZEZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zT3V0ZGF0ZWRcIlxyXG5cclxuICAgICAgICAgICAgICAgIFtjcmVhdGVNYXRDYXJkXT1cImZhbHNlXCJcclxuXHJcbiAgICAgICAgICAgICAgICBbbWF0UGFnaW5hdG9yQ291bnRdPVwib3V0ZGF0ZWRGaWVsZHMgIT0gbnVsbCAmJiBvdXRkYXRlZEZpZWxkcy5sZW5ndGggPiAwID8gb3V0ZGF0ZWRGaWVsZHMubGVuZ3RoIDogMFwiXHJcbiAgICAgICAgICAgICAgICBbbWF0UGFnaW5hdG9ySW5kZXhdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICBbbWF0UGFnaW5hdG9yU2l6ZV09XCI1XCJcclxuICAgICAgICAgICAgICAgIFttYXRQYWdpbmF0b3JMZW5ndGhdPVwiWzVdXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L3Rtdy10YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
583
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZvcm0tc3RhdGlzdGljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXN0YXRpc3RpY3MvZmlsdGVyLWZvcm0tc3RhdGlzdGljL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1zdGF0aXN0aWNzL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy9maWx0ZXItZm9ybS1zdGF0aXN0aWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5SCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBUSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFnQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRW5GLE9BQU8sRUFBNkMsYUFBYSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFNUgsT0FBTyxFQUFFLGVBQWUsRUFBYSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3pILE9BQU8sRUFBeUQsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7OztBQU92RSxNQUFNLE9BQU8sNEJBQTRCO0lBMER2QyxZQUNVLEdBQXNCLEVBQ3ZCLGNBQW9DO1FBRG5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQXZEcEMsb0JBQWUsR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDakUsa0JBQWEsR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFFL0QsV0FBTSxHQUFXLElBQUksQ0FBQyxDQUFDLFVBQVU7UUFDakMsU0FBSSxHQUFTLElBQUksQ0FBQyxDQUFDLGlCQUFpQjtRQUNwQyxXQUFNLEdBQW9CLElBQUksQ0FBQyxDQUFDLE9BQU87UUFDdkMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMsdUJBQWtCLEdBQThDLElBQUkseUNBQXlDLENBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVJLHlCQUFvQixHQUEwQyxxQ0FBcUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUN0SCxjQUFTLEdBQW9CLElBQUksQ0FBQztRQUNsQyxvQkFBZSxHQUFXLENBQUMsQ0FBQztRQUUzQixnQkFBVyxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO1FBSW5GLFlBQVk7UUFDWixhQUFRLEdBQVcsR0FBRyxDQUFDO1FBQ3ZCLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsZUFBVSxHQUFrQixDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRXpDLG1CQUFjLEdBQXlCLEVBQUUsQ0FBQztRQUMxQywwQkFBcUIsR0FBRyxxQ0FBcUMsQ0FBQztRQUU5RCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGtCQUFhLEdBQXFCLElBQUksQ0FBQztRQUN2QywwQkFBcUIsR0FBZSxJQUFJLEtBQUssRUFBTyxDQUFDO1FBQ3JELDJCQUFzQixHQUE0QixJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDaEYsWUFBTyxHQUF3QixJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUN6RCxvQkFBZSxHQUF3QixJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUNqRSxtQkFBYyxHQUFxQixJQUFJLEtBQUssRUFBYSxDQUFDO1FBQzFELHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUdyQyxnQkFBVyxHQUF3QyxFQUFFLENBQUM7UUFDdEQsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDeEMsa0JBQWEsR0FBRyxhQUFhLENBQUM7UUFFcEIsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRSx5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4RSxnQkFBVyxHQUFtQyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUNuRiwrQkFBMEIsR0FBa0MsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFJMUcsWUFBTyxHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO0lBSzlDLENBQUM7SUFFSixRQUFRO1FBRU4sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBQztZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQUU7UUFDbEYsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBQztZQUczQyxNQUFNLG1CQUFtQixHQUN2QixJQUFJLEtBQUssRUFBc0IsQ0FBQztZQUNsQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDdkIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUNoRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUNGLENBQUM7U0FHSDthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BCO0lBR0gsQ0FBQztJQUVELFNBQVM7UUFDUCx3REFBd0Q7UUFDeEQsd0NBQXdDO1FBQ3hDLCtDQUErQztRQUMvQyx3R0FBd0c7UUFDeEcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM1SCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQztRQUN6RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQztRQUVuRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDaEUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUV6RSxJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFDO1lBQ3JCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ25DO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDdEcsK0dBQStHO1lBQy9HLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUF5QixFQUFFLEVBQUU7Z0JBQzlELElBQUksY0FBYyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUM7b0JBQUUsT0FBTztpQkFBRTtnQkFDaEQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9FLElBQUksZUFBZSxJQUFJLElBQUksRUFBQztvQkFDMUIseUdBQXlHO29CQUN6RyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDMUM7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUVGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FFakM7UUFFRCxnR0FBZ0c7UUFFaEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCO1FBRWQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFbEIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmO1lBQ0UsR0FBRyxFQUFFLFFBQVE7WUFDYixPQUFPLEVBQUUsUUFBUTtZQUNqQixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1NBQzNCLENBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLEtBQUssRUFBTyxDQUFDO1FBRTlDLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBRTlELGlDQUFpQztZQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDakQsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFDO29CQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUMsQ0FBRSxDQUFDO29CQUN2RixDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUMsQ0FBRSxDQUFDO29CQUMvTCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBQyxDQUFFLENBQUM7aUJBRWpJO2dCQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3RCLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVU7WUFDdkQsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUMzQixPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsRUFBRTthQUM3RztTQUNGLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBQyxDQUFFLENBQUM7UUFFOUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsR0FBRyxFQUFFLGVBQWU7WUFDcEIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFDLENBQUUsQ0FBQztRQUU1RixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxHQUFHLGdCQUFnQixHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDO1FBQ2xELHVGQUF1RjtRQUN2Riw0QkFBNEI7UUFDNUIsMkZBQTJGO1FBQzNGLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQy9HLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFXLEVBQUUsT0FBdUI7UUFDM0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNySCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2hELElBQUksS0FBSyxHQUFHLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakQsS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUM7YUFDOUQ7WUFDRCxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxJQUFJLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsRUFBWTtRQUN6QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxHLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1NBQ3RDO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBQztZQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakM7SUFFSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztRQUVuRSxJQUFJLFlBQVksR0FBRztZQUNqQjtnQkFDRSxTQUFTLEVBQUUsUUFBUTtnQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUN4QixTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUNwQztTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQzlDLFlBQVksRUFDWixDQUFDLEdBQXFCLEVBQUUsRUFBRTtZQUV4QixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxFQUFhO1FBQ2xDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUs7UUFFSCw2QkFBNkI7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUM7WUFDdkIsbUJBQW1CO1lBQ25CLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUM7Z0JBQ25CLDhCQUE4QjtnQkFDOUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCO2lCQUFNLElBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUM7Z0JBQzVCLG9CQUFvQjtnQkFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBLENBQUMsNkJBQTZCO2FBQ2pEO1NBQ0Y7YUFBTTtZQUNMLGlCQUFpQjtZQUNqQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBQ0Qsa0JBQWtCO1FBQ2Qsb0JBQW9CO1FBQ3BCLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUNuQyxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO2FBQU07WUFDTCxvQ0FBb0M7WUFDcEMscUNBQXFDO1lBQ3JDLGlDQUFpQztZQUNqQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxJQUFhO1FBQzFCLElBQUksSUFBSSxFQUFFO1lBQ1IsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7YUFBTTtZQUNMLDBDQUEwQztZQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFVLElBQUksQ0FBQyxNQUFPLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FBQyxLQUFhO1FBQ3hCLElBQ0UsS0FBSyxJQUFJLElBQUk7WUFDYixJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSTtZQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFlBQVksRUFDL0M7WUFDQSxJQUFJLE1BQU0sR0FBYyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7WUFDN0IsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM1QixNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUM7WUFDOUIsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRSxJQUFJLG1CQUFtQixHQUFHO2dCQUN4QjtvQkFDRSxTQUFTLEVBQUUsUUFBUTtvQkFDbkIsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDO2lCQUNwQzthQUNGLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQy9DLG1CQUFtQixFQUNuQixDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNOLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUNGLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsSUFBSSxDQUFDLE1BQU07UUFDbEMsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxLQUFLLEVBQXNCLENBQUM7UUFDbEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsVUFBVSxFQUFFLEVBQUU7WUFDZCxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQ2hELG1CQUFtQixFQUNuQixDQUFDLEdBQVMsRUFBRSxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUNaLENBQUM7SUFDSixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLGFBQWE7UUFDWCw0QkFBNEI7UUFDNUIsSUFBSSxtQkFBbUIsR0FBRztZQUN4QjtnQkFDRSxTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3ZCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFDbEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBYyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBRWxCLElBQUksQ0FBQyxNQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdEQscURBQXFEO1lBQ3JELHNCQUFzQjtZQUN0QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRCxxQkFBcUI7UUFDbkIsd0NBQXdDO1FBQ3hDLElBQUksbUJBQW1CLEdBQUc7WUFDeEI7Z0JBQ0UsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFVBQVUsRUFBVyxJQUFJLENBQUMsTUFBTyxDQUFDLEtBQUs7Z0JBQ3ZDLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDO1lBQ0Q7Z0JBQ0UsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFVBQVUsRUFBVyxJQUFJLENBQUMsTUFBTyxDQUFDLE9BQU87Z0JBQ3pDLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDO1NBQ0YsQ0FBQztRQUNGLGFBQWEsQ0FBQyxRQUFRLENBQUMscUNBQXFDLEVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2xGLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUMxRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtZQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBRWhCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7YUFDMUI7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksa0JBQWtCLENBQUMsUUFBUSxFQUFFO1lBQzNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELHlCQUF5QixDQUFDLGFBQStCLElBQUksRUFBRSxTQUFpQjtRQUM5RSxPQUFPLFVBQVUsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQWtCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNoQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwQyxNQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRTtvQkFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQzdCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQzdCLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQztTQUNoRztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDUCxJQUFJLENBQUMsTUFBTyxFQUNyQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRTthQUNuSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDbEIsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ25ELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FDakMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQVFIOztPQUVHO0lBQ0ssd0JBQXdCLENBQUMsTUFBYTtRQUM1QyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxpQkFBaUIsR0FBZSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RSxhQUFhLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFFL0QsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDhGQUE4RjtRQUMxSixhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU3QyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMscUNBQXFDLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsOENBQThDO0lBRXZJLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsSUFBVTtRQUNsRCxJQUFJLGlCQUFpQixHQUFlLEVBQUUsQ0FBQyxDQUFDLG9DQUFvQztRQUM1RSwyRUFBMkU7UUFDM0UsYUFBYSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxLQUFLLElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRTtZQUM1QixJQUFJO2dCQUNGLGdDQUFnQztnQkFDaEMsb0NBQW9DO2dCQUNwQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDaEMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUNoQyxDQUFDO2dCQUNGLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDbkQsNkNBQTZDO2dCQUM3QyxtRUFBbUU7Z0JBQ25FLDZCQUE2QjtnQkFDN0IsZ0ZBQWdGO2dCQUNoRixJQUFJLFdBQVcsQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQzdEO29CQUNFLElBQUksV0FBVyxDQUFDLE9BQU8sRUFDdkI7d0JBQ0UsMkNBQTJDO3dCQUMzQyxpREFBaUQ7d0JBQ2pELElBQUksSUFBSSxHQUFHLG9CQUFvQixDQUFDLG9CQUFvQixDQUNsRCxXQUFXLENBQUMsT0FBTyxFQUNuQixNQUFNLEVBQ04sSUFBSSxDQUNMLENBQUM7d0JBQ0EsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ3JDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFOzRCQUN2QixJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDOUM7Z0NBQ21CLFdBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzZCQUNyRTtpQ0FDRDtnQ0FDbUIsV0FBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQzdEO3lCQUNGO3dCQUNELGFBQWEsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hFLGFBQWEsQ0FBQyxRQUFRLENBQUMsNkRBQTZELEVBQW1CLFdBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkosaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQW9CLFdBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7cUJBQzVGO29CQUNELElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztvQkFDZCxhQUFhLENBQUMsUUFBUSxDQUFDLDBDQUEwQyxFQUFtQixXQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzdHLEtBQUssSUFBSSxHQUFHLElBQXFCLFdBQVksQ0FBQyxVQUFVLEVBQzVEO3dCQUNFLFFBQVEsQ0FBa0IsV0FBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDL0Q7b0JBQ2dCLFdBQVksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO29CQUNwRCxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBb0IsV0FBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDNUY7cUJBQ0Q7b0JBQ0UsYUFBYSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDL0QsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNsRDtnQkFDRCxnRkFBZ0Y7YUFDakY7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRCxhQUFhLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDakUsdUNBQXVDO1FBQ3ZDLEtBQUksTUFBTSxNQUFNLElBQUksaUJBQWlCLEVBQUM7WUFDcEMsSUFBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSTtnQkFDOUUsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO1NBQy9CO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRU8sbUJBQW1CLENBQUMsSUFBVTtRQUNwQyxJQUFJLFFBQVEsR0FBVyxFQUFFLENBQUM7UUFDMUIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBb0IsRUFBRSxFQUFFO1lBQzNDLFFBQVEsSUFBSSx5Q0FBeUMsR0FBRyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUMsV0FBVyxHQUFHLGtEQUFrRCxHQUFHLFNBQVMsQ0FBQyxhQUFhLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7UUFDbFAsQ0FBQyxDQUFDLENBQUM7UUFDSCw0REFBNEQ7UUFDNUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLHFDQUFxQyxDQUFDLFFBQWdCLEVBQUUsaUJBQTZCLEVBQUUsS0FBSztRQUNsRyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlDLE9BQWUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzswSEFwbkJVLDRCQUE0Qjs4R0FBNUIsNEJBQTRCLHc0QkMxQnpDLGsxSkFnSGM7NEZEdEZELDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSx1QkFBdUI7MklBTXhCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFd0MsYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTZCbkMsZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBR1AsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtU2NhbGFyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpZWxkRml4Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtIH0gZnJvbSAnLi8uLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyU3RhdGlzdGljLCBTdGF0aXN0aWMgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvc3RhdGlzdGljLm1vZGVsJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCc7XHJcbmltcG9ydCB7IENvbmZpZ0NvbHVtbiwgVG13VGFibGVDb21wb25lbnQsIFRtd1RhYmxlRXhwb3J0Q29uZmlnLCBUeXBlQ29sdW1uIH0gZnJvbSAndG13LXRhYmxlJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uLCBGaXJlVHJpZ2dlcn0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBMb2dpY09wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2xvZ2ljT3BlcmF0b3IubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmaWx0ZXItZm9ybS1zdGF0aXN0aWMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItZm9ybS1zdGF0aXN0aWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJGb3JtU3RhdGlzdGljQ29tcG9uZW50IHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBBcnJheTxBY3Rpb25CdXR0b24+ID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsOyAvLyBwcmV2aWV3XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIHByZXZpZXcgY29uZmlnXHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQgfCBzdHJpbmcgPSBudWxsOyAvLyBlZGl0XHJcbiAgQElucHV0KCkgb25seVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93SGlkZGVuRmllbGRzOiBib29sZWFuID0gdHJ1ZTsgIFxyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7XHJcbiAgQElucHV0KCkgZmlsdGVyUmVzdWx0Vmlld01vZGU6IER5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0gPSBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLklOVEVSTkFMX0VRUFRBQkxFO1xyXG4gIEBJbnB1dCgpIFN0YXRpc3RpYzogRmlsdGVyU3RhdGlzdGljID0gbnVsbDtcclxuICBASW5wdXQoKSBudW1iZXJPZkNvbHVtbnM6IG51bWJlciA9IDM7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZU91dGRhdGVkXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZU91dGRhdGVkOiBUbXdUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgLy9QYWdpbmF0aW9uXHJcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwMDtcclxuICBwYWdlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgcGFnZUxlbmd0aDogQXJyYXk8bnVtYmVyPiA9IFs1LDEwLDI1LDEwMF1cclxuXHJcbiAgZXhwb3J0RXFwVGFibGU6IFRtd1RhYmxlRXhwb3J0Q29uZmlnID0ge307XHJcbiAgZmlsdGVyUmVzdWx0Vmlld01vZGVzID0gRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bTtcclxuXHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgc2hvd0JhY2tCdXR0b24gPSB0cnVlO1xyXG4gIHNob3dOZXdTZWFyY2hCdXR0b24gPSB0cnVlO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dMaXN0VmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbHRlclJlc3VsdHM6IEFycmF5PER5blJlY29yZD4gPSBudWxsO1xyXG4gIGZpbHRlckVxcFRhYmxlUmVzdWx0czogQXJyYXk8YW55PiA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgbGlzdFZpZXdDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RDb25maWcoKTtcclxuICBjb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+ID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBjb2x1bW5zT3V0ZGF0ZWQ6IEFycmF5PENvbmZpZ0NvbHVtbj4gPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIG91dGRhdGVkRmllbGRzOiBBcnJheTxTdGF0aXN0aWM+ID0gbmV3IEFycmF5PFN0YXRpc3RpYz4oKTtcclxuICBvdXRkYXRlZFRhYmxlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGZvcm1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGZpZWxkR3JvdXBzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PEJhc2VGaWVsZD4gfSA9IHt9O1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRmlsdGVyOiBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PER5blJlY29yZD4+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyT3V0cHV0RXh0ZXJuYWxGaWx0ZXJzOiBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGlzdGljPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGlzdGljPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFwiZmllbGRUZW1wbGF0ZVwiKVxyXG4gIGZpZWxkVGVtcGxhdGU6IFF1ZXJ5TGlzdDxEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQ+O1xyXG4gIGZpbHRlcnM6IEZpbHRlclN0YXRpc3RpYyA9IG5ldyBGaWx0ZXJTdGF0aXN0aWMoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmZvcm0uSUQgPT09ICd1bmRlZmluZWQnKXsgdGhpcy5mb3JtID0gbnVsbDsgfVxyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsICYmIHRoaXMuZm9ybUlEICE9IG51bGwpe1xyXG5cclxuXHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyTG9hZCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJMb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBhZnRlckxvYWQoKXtcclxuICAgIC8vIGFkZCBwdcOyIGZ1bnppb25hcmUgYW5jaGUgY29tZSBtb2RpZmljYSBlIGNvbWUgcHJldmlld1xyXG4gICAgLy8gaW4gYWRkIGFiYmlhbW8gaW4gaW5wdXQgbCdJRCBkZWwgRm9ybVxyXG4gICAgLy8gaW4gbW9kaWZpY2EgYWJiaWFtbyBpbiBpbnB1dCBsJ0lEIGRlbCBSZWNvcmRcclxuICAgIC8vIGluIHByZXZpZXcgYWJiaWFtbyBpbiBpbnB1dCBpbCBGb3JtKGNhc28gY29uZmlndXJhdG9yKSBvIGwnSUQgZGVsIG1vZHVsbyBvbiBvbmx5VmlldyBpbXBvc3RhdG8gYSB0cnVlXHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkFwcGx5RmlsdGVyLlVybCA9IHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuQXBwbHlGaWx0ZXIuVXJsICsgXCIvXCIgKyB0aGlzLmZvcm1JRDtcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcbiAgICB0aGlzLnNob3dTYXZlQnV0dG9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbjtcclxuICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uO1xyXG4gICAgdGhpcy5zaG93TmV3U2VhcmNoQnV0dG9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93TmV3U2VhcmNoQnV0dG9uO1xyXG5cclxuICAgIHRoaXMubGlzdFZpZXdDb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIHRoaXMubGlzdFZpZXdDb25maWd1cmF0aW9ucy51c2VySUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRDtcclxuICAgIHRoaXMubGlzdFZpZXdDb25maWd1cmF0aW9ucy5leHRlcm5hbEJ1dHRvbnMgPSBudWxsO1xyXG4gICAgdGhpcy5saXN0Vmlld0NvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG51bGw7XHJcbiAgICB0aGlzLmxpc3RWaWV3Q29uZmlndXJhdGlvbnMuZGVmYXVsdExpc3RBY3Rpb25zID0gdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnM7XHJcblxyXG4gICAgaWYodGhpcy5yZWNvcmQgPT0gbnVsbCl7XHJcbiAgICAgIHRoaXMucHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdFJlc3BvbnNlUmVjb3JkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljICE9IG51bGwgJiYgdGhpcy5TdGF0aXN0aWMuU3RhdGlzdGljcyAhPSBudWxsICYmIHRoaXMuU3RhdGlzdGljLlN0YXRpc3RpY3MubGVuZ3RoID4gMCl7XHJcbiAgICAgIC8vIElsIGZpbHRybyB2aWVuZSBjYXJpY2F0byBkYWxsJ2VzdGVybm8gZSBwb3RyZWJiZXJvIGVzc2VyY2kgZGVpIGNhbXBpIG5vbiBwacO5IGF0dHVhbGkgZSBxdWluZGkgdmFubm8gc2VwYXJhdGlcclxuICAgICAgdGhpcy5maWx0ZXJzID0gdGhpcy5TdGF0aXN0aWM7XHJcbiAgICAgIHRoaXMuU3RhdGlzdGljLlN0YXRpc3RpY3MuZm9yRWFjaCgoc3RhdGlzdGljRmllbGQ6IFN0YXRpc3RpYykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0aXN0aWNGaWVsZC5maWVsZHR5cGUgPT0gbnVsbCl7IHJldHVybjsgfVxyXG4gICAgICAgIHZhciBmb3VuZEZpZWxkSW5kZXggPSB0aGlzLmZvcm0uRmllbGRzLmZpbmQoeCA9PiB4Lk5hbWUgPT0gc3RhdGlzdGljRmllbGQua2V5KTtcclxuICAgICAgICBpZiAoZm91bmRGaWVsZEluZGV4ID09IG51bGwpe1xyXG4gICAgICAgICAgLy8gSWwgY2FtcG8gw6ggcHJlc2VudGUgbmVpIGZpbHRyaSBtYSBub24gbmVsbGEgZGVmaW5pemlvbmUgZGVsIGZvcm0gYXR0dWFsZS4gSWwgZmlsdHJvIMOoIHF1aW5kaSBvdXRkYXRlZDtcclxuICAgICAgICAgIHRoaXMub3V0ZGF0ZWRGaWVsZHMucHVzaChzdGF0aXN0aWNGaWVsZCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgXHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICB0aGlzLm91dGRhdGVkVGFibGVMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBsJ2luaXppYWxpenphemlvbmUgdGVybWluYSBjb24gaWwgcmVjdXBlcm8gZGVsIHJlY29yZCBvIGNvbiBsJ2luaXppYWxpenphemlvbmUgZGVsIGZvcm0gdnVvdG9cclxuICAgIFxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgICBcclxuICB9XHJcbiAgXHJcbiAgY29uZmlndXJlQ29sdW1ucygpe1xyXG5cclxuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgXHJcbiAgICAvLyBzZWdubyBhbmNoZSBsJ0lEIGRlbGwndXRlbnRlIGNoZSByaXNwb25kZVxyXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwidXNlcklEXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJVdGVudGVcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5maWx0ZXJFcXBUYWJsZVJlc3VsdHMgPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5maWx0ZXJSZXN1bHRzICE9IG51bGwgJiYgdGhpcy5maWx0ZXJSZXN1bHRzLmxlbmd0aCA+IDApe1xyXG4gICAgICBcclxuICAgICAgLy8gQ3JlYSBjYW1waSBlIGNvbnRlbnV0aSB0YWJlbGxhXHJcbiAgICAgIHRoaXMuZmlsdGVyUmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsaW5kZXgpID0+IHtcclxuICAgICAgICB2YXIgb2JqZWN0ID0gSlNPTi5wYXJzZShyZXN1bHQuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgaWYgKGluZGV4ID09IDApe1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChlbGVtZW50LGluZGV4MikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHsga2V5OiBlbGVtZW50LCBkaXNwbGF5OiBlbGVtZW50LCBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfX0sKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goeyBrZXk6IFwiQW5zd2VyRGF0ZVwiLCBkaXNwbGF5OiBcIkFuc3dlckRhdGVcIiwgdHlwZTogVHlwZUNvbHVtbi5EYXRlLCBmb3JtYXQ6IFwiZGQvTU0veXl5eSBISDptbTpzc1wiLCB2YWx1ZTogKCkgPT4geyByZXR1cm4gcmVzdWx0LkFuc3dlckRhdGU7IH0sIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMCVcIiB9fSwpO1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goeyBrZXk6IFwiVmVyc2lvblwiLCBkaXNwbGF5OiBcIlZlcnNpb25cIiwgdmFsdWU6ICgpID0+IHsgcmV0dXJuIHJlc3VsdC5WZXJzaW9uOyB9LCBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfX0sKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlckVxcFRhYmxlUmVzdWx0cy5wdXNoKG9iamVjdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29sdW1uc091dGRhdGVkID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnNPdXRkYXRlZC5wdXNoKHtcclxuICAgICAgICBrZXk6ICdhY3Rpb24nLCBkaXNwbGF5OiAnJyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sIGJ1dHRvbk1lbnVJY29uOiAnc2V0dGluZ3MnLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiAnMCAwIDEwJScgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IG5hbWU6IFwiUmltdW92aVwiLCBpY29uOiAndHJhc2gnLCBmbjogKGVsZW1lbnQsIGNvbCwgZWxlbWVudEluZGV4KSA9PiB0aGlzLmRlbGV0ZU91dGRhdGVkRE1GaWx0ZXIoZWxlbWVudCkgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zT3V0ZGF0ZWQucHVzaCh7IGtleTogXCJrZXlcIiwgZGlzcGxheTogXCJOb21lIGNhbXBvXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCAzMCVcIiB9fSwpO1xyXG5cclxuICAgIHRoaXMuY29sdW1uc091dGRhdGVkLnB1c2goe1xyXG4gICAgICBrZXk6IFwibG9naWNvcGVyYXRvclwiLFxyXG4gICAgICBkaXNwbGF5OiBcIk9wZXJhdG9yZVwiLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkVudW0sXHJcbiAgICAgIGVudW1Nb2RlbDogTG9naWNPcGVyYXRvcixcclxuICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29sdW1uc091dGRhdGVkLnB1c2goeyBrZXk6IFwidmFsdWVcIiwgZGlzcGxheTogXCJWYWxvcmVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH19LCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJjb2x1bW5zT3V0ZGF0ZWQgZXNlZ3VpdG9cIik7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVFeHBvcnQoKXtcclxuICAgIHRoaXMuZXhwb3J0RXFwVGFibGUuYnV0dG9uVGV4dCA9IFwiU2NhcmljYVwiXHJcbiAgICB0aGlzLmV4cG9ydEVxcFRhYmxlLmV4cG9ydEZpbGVUeXBlID0gXCJ4bHN4XCI7XHJcbiAgICB0aGlzLmV4cG9ydEVxcFRhYmxlLmV4cG9ydEZpbGVOYW1lID0gXCJEeW5hbWljTW9kdWxlX1wiK3RoaXMuZm9ybS5Db2RlO1xyXG4gICAgdGhpcy5leHBvcnRFcXBUYWJsZS5idXR0b25JY29uID0gXCJjbG91ZC1kb3dubG9hZFwiO1xyXG4gICAgLy8gdG13LXRhYmxlIG5vbiBoYSB1biBmb3JtYXRvIFhMU1ggbmF0aXZvICh2LiBBSV9CVUlMRF9QTEFOLm1kIGRpIHRtdy10YWJsZSwgZGVjaXNpb25lXHJcbiAgICAvLyBcInplcm8gSS9PXCIpIHZhIGZvcm5pdG8gdW5cclxuICAgIC8vIGN1c3RvbUV4cG9ydEhhbmRsZXJzIGNoZSBnZW5lcmEgbCdYTFNYIGNvbiBsYSBsaWJyZXJpYSB4bHN4IChTaGVldEpTKSwgZ2nDoCBwcmVzZW50ZSBjb21lXHJcbiAgICAvLyBkaXBlbmRlbnphIHBpbm5hdGEgbmVsbCdvdmVycmlkZSBkaSBwYWNrYWdlLmpzb24uXHJcbiAgICB0aGlzLmV4cG9ydEVxcFRhYmxlLmN1c3RvbUV4cG9ydEhhbmRsZXJzID0geyB4bHN4OiAocm93cywgY29sdW1ucykgPT4gdGhpcy5leHBvcnRSb3dzQXNYbHN4KHJvd3MsIGNvbHVtbnMpIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydFJvd3NBc1hsc3gocm93czogYW55W10sIGNvbHVtbnM6IENvbmZpZ0NvbHVtbltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBleHBvcnRhYmxlID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC50eXBlICE9PSBUeXBlQ29sdW1uLk1lbnVBY3Rpb24gJiYgY29sLnR5cGUgIT09IFR5cGVDb2x1bW4uU2ltcGxlQWN0aW9uKTtcclxuICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdpdC1JVCcpO1xyXG4gICAgY29uc3QgaGVhZGVyID0gZXhwb3J0YWJsZS5tYXAoY29sID0+IGNvbC5kaXNwbGF5KTtcclxuICAgIGNvbnN0IGJvZHkgPSByb3dzLm1hcChyb3cgPT4gZXhwb3J0YWJsZS5tYXAoY29sID0+IHtcclxuICAgICAgbGV0IHZhbHVlID0gdHlwZW9mIGNvbC52YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGNvbC52YWx1ZShyb3cpIDogKGNvbC5rZXkgPyByb3dbY29sLmtleV0gOiB1bmRlZmluZWQpO1xyXG4gICAgICBpZiAoY29sLnR5cGUgPT09IFR5cGVDb2x1bW4uRGF0ZSAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdmFsdWUgPSBkYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIGNvbC5mb3JtYXQgPz8gJ3Nob3J0RGF0ZScpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZSA/PyAnJztcclxuICAgIH0pKTtcclxuICAgIGNvbnN0IHdvcmtzaGVldCA9IFhMU1gudXRpbHMuYW9hX3RvX3NoZWV0KFtoZWFkZXIsIC4uLmJvZHldKTtcclxuICAgIGNvbnN0IHdvcmtib29rID0gWExTWC51dGlscy5ib29rX25ldygpO1xyXG4gICAgWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldCh3b3JrYm9vaywgd29ya3NoZWV0LCAnRXhwb3J0Jyk7XHJcbiAgICBYTFNYLndyaXRlRmlsZSh3b3JrYm9vaywgKHRoaXMuZXhwb3J0RXFwVGFibGUuZXhwb3J0RmlsZU5hbWUgfHwgJ2V4cG9ydCcpICsgJy54bHN4Jyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB2YWxvcmUgZGkgb2duaSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byByZWNvcmQuXHJcbiAgICogU2VydmUgYWQgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGkgdHV0dGkgaSBjYW1waSBjaGUgaGFubm8gdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgb25GaWx0ZXJDaGFuZ2UoZXY6U3RhdGlzdGljKSB7XHJcbiAgICB2YXIgc3RhdGlzdGljcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MuZmlsdGVyKHggPT4geC5rZXkgIT0gZXYua2V5KSkpO1xyXG5cclxuICAgIGlmIChzdGF0aXN0aWNzLmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLmZpbHRlcnMuU3RhdGlzdGljcyA9IHN0YXRpc3RpY3M7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcnMuU3RhdGlzdGljcyA9IG5ldyBBcnJheTxTdGF0aXN0aWM+KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKChldi5sb2dpY29wZXJhdG9yICE9IG51bGwgJiYgZXYudmFsdWUgIT0gbnVsbCkgfHwgZXYudmlzaWJsZSl7XHJcbiAgICAgdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MucHVzaChldik7IFxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIEFwcGx5RmlsdGVyKCl7XHJcbiAgICB0aGlzLmZpbHRlcnMuQWRkaXRpb25hbFBhcmFtcyA9IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcztcclxuICAgIHRoaXMuZmlsdGVycy5QcmVmaWx0ZXJQYXJhbXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnByZWZpbHRlclBhcmFtcztcclxuXHJcbiAgICB2YXIgZmlsdGVyUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImZpbHRlclwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZmlsdGVycyxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdLFxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuQXBwbHlGaWx0ZXIsXHJcbiAgICAgIGZpbHRlclBhcmFtcyxcclxuICAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZmlsdGVyUmVzdWx0cyA9IHJlcztcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZUV4cG9ydCgpO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIHRoaXMuc2hvd0xpc3RWaWV3ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFmdGVyRmlsdGVyLmVtaXQocmVzKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG91dHB1dEV4dGVybmFsRmlsdGVycygpe1xyXG4gICAgdGhpcy5hZnRlck91dHB1dEV4dGVybmFsRmlsdGVycy5lbWl0KHRoaXMuZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVPdXRkYXRlZERNRmlsdGVyKGVsOiBTdGF0aXN0aWMpe1xyXG4gICAgdmFyIGluZGV4VG9EZWxldGUgPSB0aGlzLmZpbHRlcnMuU3RhdGlzdGljcy5maW5kSW5kZXgoeCA9PiB4LmtleSA9PSBlbC5rZXkpO1xyXG4gICAgdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3Muc3BsaWNlKGluZGV4VG9EZWxldGUsMSk7XHJcbiAgICB2YXIgb3V0ZGF0ZWRJbmRleFRvRGVsZXRlID0gdGhpcy5vdXRkYXRlZEZpZWxkcy5maW5kSW5kZXgoeCA9PiB4LmtleSA9PSBlbC5rZXkpO1xyXG4gICAgdGhpcy5vdXRkYXRlZEZpZWxkcy5zcGxpY2Uob3V0ZGF0ZWRJbmRleFRvRGVsZXRlLDEpO1xyXG4gICAgdGhpcy50YWJsZU91dGRhdGVkLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKXtcclxuXHJcbiAgICAvLyBSZXNldHRvIGkgY2FtcGkgZGVsIHJlY29yZFxyXG4gICAgT2JqZWN0LmtleXModGhpcy5yZWNvcmQpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgdGhpcy5yZWNvcmRba2V5XSA9IG51bGw7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpbHRlclJlc3VsdHMgPSBudWxsO1xyXG4gICAgdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MgPSBbXTtcclxuICAgIHRoaXMuc2hvd0xpc3RWaWV3ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZCgpeyAgICBcclxuICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgaWYodGhpcy5vbmx5VmlldyA9PSB0cnVlKXtcclxuICAgICAgLy8gbW9kYWxpdMOgIHByZXZpZXdcclxuICAgICAgaWYodGhpcy5mb3JtICE9IG51bGwpe1xyXG4gICAgICAgIC8vIHByZXZpZXcgcGVyIGlsIGNvbmZpZ3VyYXRvclxyXG4gICAgICAgIHRoaXMuZmllbGRzQ29uZmlnKCk7XHJcbiAgICAgIH0gZWxzZSBpZih0aGlzLmZvcm1JRCAhPSBudWxsKXtcclxuICAgICAgICAvLyBwcmV2aWV3IHBlciBhZG1pblxyXG4gICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKSAvLyBkZW50cm8gY2hpYW1hIGZpZWxkc0NvbmZpZ1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBhZ2dpdWduaSBudW92b1xyXG4gICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBlZGl0UmVzcG9uc2VSZWNvcmQoKXtcclxuICAgICAgLy8gbW9kaWlsdMOgIG1vZGlmaWNhXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWNvcmQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAvLyBhbGxvcmEgw6ggdW4gSURcclxuICAgICAgICB0aGlzLmdldFJlY29yZEJ5SUQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBpbCByZWNvcmQgdmllbmUgcGFzc2F0byBjb21lIHRhbGVcclxuICAgICAgICAvLyAoPFJlY29yZD50aGlzLnJlY29yZCkuRW50SUQgPSBcIjNcIjtcclxuICAgICAgICAvLyAoPFJlY29yZD50aGlzLnJlY29yZCkuVmVyc2lvbjtcclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEYW5kVmVyc2lvbigpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaSBkYXRpIGluc2VyaXRpIGRhbGwndXRlbnRlIHVuYSB2b2x0YSBjb25jbHVzYSBsYSBjb21waWxhemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKi9cclxuICBzYXZlT3JFeGl0Rm9ybShleGl0OiBib29sZWFuKSB7XHJcbiAgICBpZiAoZXhpdCkge1xyXG4gICAgICAvLyB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KG51bGwpO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZChudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZCgoPFJlY29yZD50aGlzLnJlY29yZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGlsIHJlY29yZCBhZ2dpdW50byBvIG1vZGlmaWNhdG8uXHJcbiAgICogU2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kUG9pbnQgcGVyIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwYXNzYW5kbyBsJ29nZ2V0byBkYSBzYWx2YXJlXHJcbiAgICogbmVsIGJvZHkgZGVsbGEgY2hpYW1hdGEsIGFsdHJpbWVudGkgc2NhdGVuYSBsJ2V2ZW50byBcInNhdmVSZWNvcmRcIi5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGV2ZW50ICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIHZhciBkeW5SZWM6IER5blJlY29yZCA9IG5ldyBEeW5SZWNvcmQoKTtcclxuICAgICAgZHluUmVjLklEID0gZXZlbnQuSUQgPz8gbnVsbDtcclxuICAgICAgZHluUmVjLkVudElEID0gdGhpcy5mb3JtLklEO1xyXG4gICAgICBkeW5SZWMuVmVyc2lvbiA9IHRoaXMuZm9ybS5WZXJzaW9uO1xyXG4gICAgICBkeW5SZWMudXNlcklEID0gdGhpcy51c2VySUQ7XHJcbiAgICAgIGR5blJlYy5WYWx1ZXMgPSBldmVudCA/PyBudWxsO1xyXG4gICAgICBkeW5SZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gdGhpcy5jcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMoZXZlbnQpO1xyXG4gICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiUmVjb3JkXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiBkeW5SZWMsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuU2F2ZUVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZnRlclNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZmllbGRzQ29uZmlnKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHt9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gY2kgZW50cm8gc29sbyBzZSDDqCBzdGF0byBwYXNzYXRvIGlsIHBhcmFtZXRybyBcInJlY29yZFwiIGNvbWUgc3RyaW5nYVxyXG4gIGdldFJlY29yZEJ5SUQoKSB7XHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMucmVjb3JkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcblxyXG4gICAgICAgICg8UmVjb3JkPnRoaXMucmVjb3JkKSA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLklEID0gcmVzLklEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlZhbHVlcyA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldEZvcm1CeUlEYW5kVmVyc2lvbigpIHtcclxuICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICBQYXJhbVZhbHVlOiAoPFJlY29yZD50aGlzLnJlY29yZCkuVmVyc2lvbixcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uIC0gdGhpcyByZWNvcmRcIiwgPFJlY29yZD50aGlzLnJlY29yZClcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZVJlY29yZFByb3BlcnRpZXMoKTtcclxuICAgICAgICB0aGlzLnJlb3JkZXJGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgICAgICBpZiAodGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSkge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIFxyXG4gIGZpZWxkc0NvbmZpZygpeyAgICAgIFxyXG4gICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGb3JtRmllbGRzKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlzdGljRnJvbUZpZWxkTmFtZShTdGF0aXN0aWNzOiBBcnJheTxTdGF0aXN0aWM+ID0gbnVsbCwgZmllbGROYW1lOiBzdHJpbmcpOiBTdGF0aXN0aWMge1xyXG4gICAgcmV0dXJuIFN0YXRpc3RpY3MgPT0gbnVsbCB8fCBTdGF0aXN0aWNzLmxlbmd0aCA9PSAwID8gbnVsbCA6IFN0YXRpc3RpY3MuZmluZCh4ID0+IHgua2V5ID09IGZpZWxkTmFtZSk7XHJcbiAgfSAgXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIG5lbGwnb2dnZXR0byBSZWNvcmQgbGUgcHJvcHJpZXTDoCBtYW5jYW50aSByaXNwZXR0byBhaSBjYW1waSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlUmVjb3JkUHJvcGVydGllcygpIHtcclxuICAgIGNvbnN0IHJlY29yZFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyh0aGlzLnJlY29yZCk7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKChwKSA9PiBwID09PSBmaWVsZC5OYW1lKSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5mb3JtLklubmVyRm9ybXMgJiYgdGhpcy5mb3JtLklubmVyRm9ybXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyYXlOYW1lOiBzdHJpbmcgPSBmb3JtLk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKChwKSA9PiBwID09PSBhcnJheU5hbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmlvcmRpbmFyZSBpIGNhbXBpIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW9yZGVyRm9ybUZpZWxkcygpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzICYmIHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvbiA/IDEgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uID8gLTEgOiAwICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoKSB7XHJcbiAgICB0aGlzLmZvcm1Gb3JtID0gdGhpcy51dGlsaXR5U2VydmljZS5DcmVhdGVGb3JtRm9ybUdyb3VwKFxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLFxyXG4gICAgICAoPFJlY29yZD50aGlzLnJlY29yZCksXHJcbiAgICAgIHRoaXMub25seVZpZXdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpIGdydXBwaSBpbiBjdWkgcmFnZ3J1cHBhcmUgaSBjYW1waSBkZWxsYSBmb3JtIGluIGJhc2VcclxuICAgKiBhIGNvbWUgw6ggc3RhdGEgY29uZmlndXJhdGEgZGFsbCd1dGVudGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZEdyb3VwcygpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnNvcnQoKGEsIGIpID0+IGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb24gPyAxIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvbiA/IC0xIDogMCApXHJcbiAgICAgIC5tYXAoKGcpID0+IGcuTmFtZSlcclxuICAgICAgLmZvckVhY2goKGdyb3VwTmFtZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmllbGRHcm91cHNbZ3JvdXBOYW1lXSA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKFxyXG4gICAgICAgICAgKGYpID0+IGYuRmllbGRHcm91cCA9PSBncm91cE5hbWVcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzKHJlY29yZDpSZWNvcmQpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJyZWNvcmRcIiwgcmVjb3JkKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJmb3JtXCIsIHRoaXMuZm9ybSk7XHJcbiAgICBsZXQgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4gPSB0aGlzLmdldFJlc3BvbnNlVmFsdWVzKHJlY29yZCwgdGhpcy5mb3JtKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvdXRwdXRWYWx1ZXNBcnJheVwiLCBvdXRwdXRWYWx1ZXNBcnJheSk7XHJcbiAgICBcclxuICAgIGxldCB0ZW1wbGF0ZTogc3RyaW5nID0gdGhpcy5nZXRSZXNwb25zZVRlbXBsYXRlKHRoaXMuZm9ybSk7IC8vIG9nZ2V0dG8gbmVsIHF1YWxlIHZpZW5lIGNvc3RydWl0byBpbCB0ZW1wbGF0ZSBvIGNoZSBwcmVuZGUgaWwgdmFsb3JlIGRhIHVuIHRlbXBsYXRlIGVzdGVybm9cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJ0ZW1wbGF0ZVwiLCB0ZW1wbGF0ZSk7XHJcblxyXG4gICAgY29uc3QgcmVnZXggPSAvIyMoW1xcd10rKSMjL2c7XHJcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlLCBvdXRwdXRWYWx1ZXNBcnJheSwgcmVnZXgpOyAvLyBvZ2dldHRvIGNoZSBjb250ZXJyw6AgbCdvdXRwdXQgZWxhYm9yYXRvICAgIFxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVzcG9uc2VWYWx1ZXMocmVjb3JkOiBSZWNvcmQsIGZvcm06IEZvcm0gKTogQXJyYXk8YW55PiB7XHJcbiAgICBsZXQgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4gPSBbXTsgLy8gYXJyYXkgY29uIGkgdmFsb3JpIGRlbGxlIHJpc3Bvc3RlXHJcbiAgICAvLyg8RHluUmVjb3JkPnRoaXMucmVjb3JkKS5WYWx1ZXMgw6ggbGEgbGlzdGEgZGkgb2dnZXR0aSB7ZmllbGROYW1lOiB2YWxvcmV9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKHJlY29yZCkuVmFsdWVzXCIsIHJlY29yZCk7XHJcbiAgICBmb3IgKGxldCBmaWVsZE5hbWUgaW4gcmVjb3JkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gZmllbGROYW1lIMOoIGlsIG5vbWUgZGVsIGNhbXBvXHJcbiAgICAgICAgLy8gUFJFUEFSTyBWQVJJQUJJTEkgVkFMT1JJIENPUlJFVFRJXHJcbiAgICAgICAgbGV0IGZvdW5kT2JqZWN0ID0gZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgIChvYmopID0+IG9iai5OYW1lID09PSBmaWVsZE5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJmaWVsZE5hbWVcIiwgZmllbGROYW1lKTtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZm91bmRPYmplY3RcIiwgZm91bmRPYmplY3QpO1xyXG4gICAgICAgIC8vIGdlc3RpcmUgY2FzbyBmaWVsZHR5cGUgOCBbZWxlbmNvIGdlbmVyaWNvXVxyXG4gICAgICAgIC8vIGZhcmUgdW4gZXZhbCBwZXIgcG9wb2xhcmUgaSB2YWx1ZVBhaXJzIHNlIMOoIHByZXNlbnRlIHVuYSBmb3JtdWxhXHJcbiAgICAgICAgLy8gcHJlbmRlcmUgbGEgbGFiZWwgY29ycmV0dGFcclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIGlmIChmb3VuZE9iamVjdC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXSkgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKGZvdW5kT2JqZWN0LkZvcm11bGEpIFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBhZ2dpdW5nbyBhIHZhbHVlcGFpcnMgaSB2YWxvcmkgY2FsY29sYXRpXHJcbiAgICAgICAgICAgIC8vICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgICAgICAgdmFyIHRlbXAgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgICAgICAgICAgICBmb3VuZE9iamVjdC5Gb3JtdWxhLFxyXG4gICAgICAgICAgICAgIHJlY29yZCxcclxuICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInRlbXBcIiwgdGVtcCk7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQga2V5MiBpbiB0ZW1wKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0ZW1wW2tleTJdKSkgXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tOdW1iZXIoa2V5MildID0gdGVtcFtrZXkyXTtcclxuICAgICAgICAgICAgICB9IGVsc2UgXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1trZXkyXSA9IHRlbXBba2V5Ml07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCIocmVjb3JkKS5WYWx1ZXNbZmllbGROYW1lXVwiLCByZWNvcmRbZmllbGROYW1lXSk7XHJcbiAgICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCIoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZE5hbWVdXVwiLCAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZE5hbWVdXSk7XHJcbiAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZE5hbWVdXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBpbnZlcnRlZCA9IHt9O1xyXG4gICAgICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCIoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzXCIsICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMpO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzKSBcclxuICAgICAgICAgIHsgXHJcbiAgICAgICAgICAgIGludmVydGVkWyg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNba2V5XV0gPSBrZXk7IFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA9IGludmVydGVkO1xyXG4gICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGROYW1lXSA9ICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkTmFtZV1dO1xyXG4gICAgICAgIH0gZWxzZSBcclxuICAgICAgICB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVjb3JkW2ZpZWxkTmFtZV1cIiwgcmVjb3JkW2ZpZWxkTmFtZV0pO1xyXG4gICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGROYW1lXSA9IHJlY29yZFtmaWVsZE5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm91dHB1dFZhbHVlc0FycmF5IDFcIiwgb3V0cHV0VmFsdWVzQXJyYXkpO1xyXG4gICAgLy8gY2FuY2VsbG8gaSB2YWxvcmkgaW5kZWZpbml0aSBvIG51bGxpXHJcbiAgICBmb3IoY29uc3QgY2hpYXZlIGluIG91dHB1dFZhbHVlc0FycmF5KXtcclxuICAgICAgaWYob3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9PSB1bmRlZmluZWQgfHwgb3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9PSBudWxsKVxyXG4gICAgICBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID0gJydcclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXRWYWx1ZXNBcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVzcG9uc2VUZW1wbGF0ZShmb3JtOiBGb3JtKTogc3RyaW5nIHtcclxuICAgIGxldCB0ZW1wbGF0ZTogc3RyaW5nID0gXCJcIjtcclxuICAgIC8vIFBSRVBBUk8gTyBQUkVORE8gTEEgU1RSVVRUVVJBIERBIFNUQU1QQVJFXHJcbiAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChiYXNlRmllbGQ6IEJhc2VGaWVsZCkgPT4ge1xyXG4gICAgICB0ZW1wbGF0ZSArPSAnPHNwYW4gY2xhc3M9XCJkeW5hZm9ybS1xdWVzdGlvblwiIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5MYWJlbHN0eWxlQ1NTICsgJ1wiPicgKyBiYXNlRmllbGQuRGVzY3JpcHRpb24gKyAnOjwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJkeW5hZm9ybS1yZXNwb25zZVwiIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5GaWVsZHN0eWxlQ1NTICsgJ1wiPiAjIycgKyBiYXNlRmllbGQuTmFtZSArICcjIzwvc3Bhbj4gXFxuIDxicj4gJztcclxuICAgIH0pO1xyXG4gICAgLy8gKGF0dHVhbG1lbnRlIG5vbiBlc2lzdGUgaWwgY29uY2V0dG8gZGkgdGVtcGF0ZSBkaSBvdXRwdXQpXHJcbiAgICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyc1dpdGhWYWx1ZXModGVtcGxhdGU6IHN0cmluZywgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4sIHJlZ2V4KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ2V4LCAobWF0Y2gsIGdyb3VwKSA9PiB7XHJcbiAgICAgIHJldHVybiA8c3RyaW5nPm91dHB1dFZhbHVlc0FycmF5W2dyb3VwXTtcclxuICAgIH0pO1xyXG4gIH0gICBcclxuXHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRlclwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWR5bmFtaWMtbW9kdWxlLXRpdGxlIGFkZC1mb3JtLXJlY29yZC1oZWFkZXJcIiAqbmdJZj1cInNob3dUaXRsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPGg0PjxiPnt7Zm9ybS5OYW1lfX08L2I+PC9oND5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUZvcm1cIiBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1mb3JtXCI+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIFNFTVBMSUNFIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0xpc3RWaWV3XCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZHM6IGZvcm0uRmllbGRzIH1cIiBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1zZW1wbGljZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwvZm9ybT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG10LTIgbS0yIGFkZC1mb3JtLXJlY29yZC1idXR0b25zXCJcclxuICAgICAgICAqbmdJZj1cIihzaG93QmFja0J1dHRvbiB8fCBzaG93U2F2ZUJ1dHRvbilcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIG0tMiB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd0xpc3RWaWV3ICYmIHNob3dOZXdTZWFyY2hCdXR0b25cIiAoY2xpY2spPVwicmVzZXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgTnVvdmEgcmljZXJjYVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhc2hvd0xpc3RWaWV3ICYmIGZpbHRlclJlc3VsdFZpZXdNb2RlICE9IGZpbHRlclJlc3VsdFZpZXdNb2Rlcy5GSUxURVJTX09OTFlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIkFwcGx5RmlsdGVyKClcIj5cclxuICAgICAgICAgICAgICAgRXNlZ3VpIEZpbHRyb1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJmaWx0ZXJSZXN1bHRWaWV3TW9kZSA9PSBmaWx0ZXJSZXN1bHRWaWV3TW9kZXMuRklMVEVSU19PTkxZXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvdXRwdXRFeHRlcm5hbEZpbHRlcnMoKVwiPlxyXG4gICAgICAgICAgICAgICBTYWx2YSBtb2RpZmljaGUgZmlsdHJvXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAgICAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGxpc3Qtdmlldy1mb3JtLXJlY29yZFxyXG4gICAgKm5nSWY9XCJzaG93TGlzdFZpZXcgJiYgZmlsdGVyUmVzdWx0Vmlld01vZGUgPT0gZmlsdGVyUmVzdWx0Vmlld01vZGVzLklOVEVSTkFMX0xJU1RWSUVXICYmIGZpbHRlclJlc3VsdHMgIT0gbnVsbFwiXHJcbiAgICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgICBbY29uZmlndXJhdGlvbnNdPVwibGlzdFZpZXdDb25maWd1cmF0aW9uc1wiXHJcbiAgICBbY29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ3VyYXRpb25zXCJcclxuICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgIFtvbmx5Vmlld109XCJ0cnVlXCJcclxuICAgIFtyZWNvcmRzXT1cImZpbHRlclJlc3VsdHNcIlxyXG4gICAgW2V4dGVybmFsQnV0dG9uc109XCJleHRlcm5hbEJ1dHRvbnNcIlxyXG4gICAgPlxyXG4gICAgPC9saXN0LXZpZXctZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dMaXN0VmlldyAmJiBmaWx0ZXJSZXN1bHRWaWV3TW9kZSA9PSBmaWx0ZXJSZXN1bHRWaWV3TW9kZXMuSU5URVJOQUxfRVFQVEFCTEUgJiYgZmlsdGVyRXFwVGFibGVSZXN1bHRzICE9IG51bGxcIiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLXRtdy10YWJsZVwiPlxyXG4gICAgICAgIDx0bXctdGFibGVcclxuXHJcbiAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcclxuICAgICAgICAgICAgI3RhYmxlXHJcbiAgICAgICAgICAgIGVtcHR5VGFibGVNZXNzYWdlPVwiXCJcclxuICAgICAgICAgICAgW2RhdGFdPVwiZmlsdGVyRXFwVGFibGVSZXN1bHRzXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtleHBvcnRFcXBUYWJsZV09XCJleHBvcnRFcXBUYWJsZVwiXHJcblxyXG4gICAgICAgICAgICBbY2hvb3NlQ29sdW1uc1RvU2hvd109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3N3aXRjaEZpbHRlclR5cGVdPVwidHJ1ZVwiXHJcblxyXG4gICAgICAgICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlUGFnZVN0b3JhZ2VTYXZlXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbaXNNdWx0aUxhbmd1YWdlXT1cInRydWVcIlxyXG5cclxuICAgICAgICAgICAgW21hdFBhZ2luYXRvckNvdW50XT1cImZpbHRlckVxcFRhYmxlUmVzdWx0cyAhPSBudWxsICYmIGZpbHRlckVxcFRhYmxlUmVzdWx0cy5sZW5ndGggPiAwID8gZmlsdGVyRXFwVGFibGVSZXN1bHRzLmxlbmd0aCA6IDBcIlxyXG4gICAgICAgICAgICBbbWF0UGFnaW5hdG9ySW5kZXhdPVwicGFnZUluZGV4XCJcclxuICAgICAgICAgICAgW21hdFBhZ2luYXRvclNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICBbbWF0UGFnaW5hdG9yTGVuZ3RoXT1cInBhZ2VMZW5ndGhcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L3Rtdy10YWJsZT5cclxuICAgIDwvZGl2PiBcclxuXHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBMQSBWSVNVQUxJWlpBWklPTkUgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZXMgbGV0LWZpZWxkcz0nZmllbGRzJyBsZXQtb3V0ZGF0ZWRmaWVsZHM9J291dGRhdGVkRmllbGRzJz5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFzaG93TGlzdFZpZXdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIiBbaGlkZGVuXT1cIighZmllbGQuSW5MaXN0VmlldyAmJiAhc2hvd0hpZGRlbkZpZWxkcylcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ1dGlsaXR5U2VydmljZS5nZXRGaWVsZEZpbHRlclN0eWxlQ2xhc3MoZmllbGQsIG51bWJlck9mQ29sdW1ucylcIj5cclxuICAgICAgICAgICAgPGR5bmFtaWMtbW9kdWxlLWZpbHRlci1maXggI2ZpZWxkVGVtcGxhdGUgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFtyZWNvcmRdPVwicmVjb3JkXCIgW2ZpbHRlclJlc3VsdFZpZXdNb2RlXT1cImZpbHRlclJlc3VsdFZpZXdNb2RlXCIgW1N0YXRpc3RpY109XCJnZXRTdGF0aXN0aWNGcm9tRmllbGROYW1lKFN0YXRpc3RpYz8uU3RhdGlzdGljcyxmaWVsZC5OYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9keW5hbWljLW1vZHVsZS1maWx0ZXItZml4PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwib3V0ZGF0ZWRUYWJsZUxvYWRlZCAmJiBvdXRkYXRlZEZpZWxkcyAhPSBudWxsICYmIG91dGRhdGVkRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm91dGRhdGVkVGFibGVDb250YWluZXJcIj5cclxuXHJcbiAgICAgICAgICAgIDxoMj5GaWx0cmkgT2Jzb2xldGk8L2gyPlxyXG4gICAgICAgICAgICA8cD5Tb25vIGZpbHRyaSBjaGUgc29ubyBzdGF0aSBjb25maWd1cmF0aSBpbiB1bmEgdmVyc2lvbmUgcHJlY2VkZW50ZSBkaSBxdWVzdG8gbW9kdWxvIGUgcG9pIHNhbHZhdGk8L3A+XHJcblxyXG4gICAgICAgICAgICA8dG13LXRhYmxlXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm91dGRhdGVkVGFibGVcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgI3RhYmxlT3V0ZGF0ZWRcclxuICAgICAgICAgICAgICAgIGVtcHR5VGFibGVNZXNzYWdlPVwiXCJcclxuICAgICAgICAgICAgICAgIFtkYXRhXT1cIm91dGRhdGVkRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNPdXRkYXRlZFwiXHJcblxyXG4gICAgICAgICAgICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG5cclxuICAgICAgICAgICAgICAgIFttYXRQYWdpbmF0b3JDb3VudF09XCJvdXRkYXRlZEZpZWxkcyAhPSBudWxsICYmIG91dGRhdGVkRmllbGRzLmxlbmd0aCA+IDAgPyBvdXRkYXRlZEZpZWxkcy5sZW5ndGggOiAwXCJcclxuICAgICAgICAgICAgICAgIFttYXRQYWdpbmF0b3JJbmRleF09XCIwXCJcclxuICAgICAgICAgICAgICAgIFttYXRQYWdpbmF0b3JTaXplXT1cIjVcIlxyXG4gICAgICAgICAgICAgICAgW21hdFBhZ2luYXRvckxlbmd0aF09XCJbNV1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvdG13LXRhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -108,7 +108,7 @@ export class DateFilterTemplateComponent {
108
108
  }
109
109
  }
110
110
  DateFilterTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateFilterTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
111
- DateFilterTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateFilterTemplateComponent, selector: "date-filter-template", inputs: { field: "field", record: "record", Statistic: "Statistic", filterResultViewMode: "filterResultViewMode" }, outputs: { filterChange: "filterChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12 rowCol\">\r\n <div class=\"visibleCol\">\r\n <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n </button>\r\n </div> \r\n <div class=\"groupByCol\">\r\n <tmw-select\r\n [placeholder]=\"'Operatori di confronto'\"\r\n [isMultiSelect]=\"true\"\r\n [enumData]=\"operatorsGroupByEnum\"\r\n [(ngModelInput)]=\"operatorsGroupBy\"\r\n (ngModelInputChange)=\"onFilterChange()\"\r\n ></tmw-select>\r\n </div> \r\n <div class=\"valueCol\">\r\n <tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onFilterChange()\" [outputFormat]=\"outputFormat\" >\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"operatorCol\">\r\n <tmw-select [enumData]=\"logicOperatorNumeric\" [(ngModelInput)]=\"selectedLogicOperator\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onFilterChange()\"></tmw-select>\r\n </div> \r\n <div class=\"aggregatorCol\">\r\n <tmw-select\r\n [placeholder]=\"'Aggregazioni'\"\r\n [isMultiSelect]=\"true\"\r\n [enumData]=\"aggregationFunctionEnum\"\r\n [(ngModelInput)]=\"aggregations\"\r\n (ngModelInputChange)=\"onFilterChange()\"\r\n ></tmw-select>\r\n </div> \r\n </div>\r\n</div>", styles: [".rowCol{display:flex;height:56px}.rowCol>*{height:100%}.rowCol .valueCol{padding-right:0;width:100%}.rowCol .operatorCol{padding-left:0;padding-right:0;width:110px;min-width:110px}.rowCol .visibleCol{display:flex;justify-content:center;align-items:flex-start;border-top-left-radius:0;border-bottom-left-radius:0;width:50px;min-width:50px}.rowCol .visibleCol button{height:100%}.rowCol .coordinatesCol{display:flex;justify-content:center;align-items:flex-start;flex-direction:column;border-top-left-radius:0;border-bottom-left-radius:0;width:35px;min-width:35px}.rowCol .coordinatesCol button{height:30px;width:30px;margin:1px;padding:0}.rowCol .aggregatorCol{min-width:219px}::ng-deep .operatorCol .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:#a5afc0!important}::ng-deep .operatorCol .mat-mdc-select-value{color:#081c45;font-size:16px;font-weight:700;position:relative;top:-6px}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TmwSelectComponent, selector: "tmw-select", inputs: ["placeholder", "arrayData", "arrayKeyProperty", "arrayValueProperty", "includeFullObject", "enumData", "enumDataToExclude", "isMultiLanguage", "multilanguagePrefixKey", "isMultiSelect", "isRequired", "isDisabled", "showCancelButton", "isSearchable", "searchText", "noResultSearchText", "toolbarButtons", "showAddButton", "ngModelOptions", "ngModelInput", "formGroupInput", "formControlNameInput"], outputs: ["ngModelInputChange"] }, { kind: "component", type: i4.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }, { kind: "component", type: i5.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "pickerMode", "timeType", "label", "placeholder", "hint", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "timeZone", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates", "iconsPosition", "closeIconPosition", "containerStyle", "inputStyle", "calendarButtonStyle", "clockButtonStyle", "closeButtonStyle", "useTooltip", "tooltipStyle"], outputs: ["dateChange"] }] });
111
+ DateFilterTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateFilterTemplateComponent, selector: "date-filter-template", inputs: { field: "field", record: "record", Statistic: "Statistic", filterResultViewMode: "filterResultViewMode" }, outputs: { filterChange: "filterChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12 rowCol\">\r\n <div class=\"visibleCol\">\r\n <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n </button>\r\n </div> \r\n <div class=\"groupByCol\">\r\n <tmw-select\r\n [placeholder]=\"'Operatori di confronto'\"\r\n [isMultiSelect]=\"true\"\r\n [enumData]=\"operatorsGroupByEnum\"\r\n [(ngModelInput)]=\"operatorsGroupBy\"\r\n (ngModelInputChange)=\"onFilterChange()\"\r\n ></tmw-select>\r\n </div> \r\n <div class=\"valueCol\">\r\n <tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onFilterChange()\" [outputFormat]=\"outputFormat\" >\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"operatorCol\">\r\n <tmw-select [enumData]=\"logicOperatorNumeric\" [(ngModelInput)]=\"selectedLogicOperator\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onFilterChange()\"></tmw-select>\r\n </div> \r\n <div class=\"aggregatorCol\">\r\n <tmw-select\r\n [placeholder]=\"'Aggregazioni'\"\r\n [isMultiSelect]=\"true\"\r\n [enumData]=\"aggregationFunctionEnum\"\r\n [(ngModelInput)]=\"aggregations\"\r\n (ngModelInputChange)=\"onFilterChange()\"\r\n ></tmw-select>\r\n </div> \r\n </div>\r\n</div>", styles: [".rowCol{display:flex;height:56px}.rowCol>*{height:100%}.rowCol .valueCol{padding-right:0;width:100%}.rowCol .operatorCol{padding-left:0;padding-right:0;width:110px;min-width:110px}.rowCol .visibleCol{display:flex;justify-content:center;align-items:flex-start;border-top-left-radius:0;border-bottom-left-radius:0;width:50px;min-width:50px}.rowCol .visibleCol button{height:100%}.rowCol .coordinatesCol{display:flex;justify-content:center;align-items:flex-start;flex-direction:column;border-top-left-radius:0;border-bottom-left-radius:0;width:35px;min-width:35px}.rowCol .coordinatesCol button{height:30px;width:30px;margin:1px;padding:0}.rowCol .aggregatorCol{min-width:219px}::ng-deep .operatorCol .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:#a5afc0!important}::ng-deep .operatorCol .mat-mdc-select-value{color:#081c45;font-size:16px;font-weight:700;position:relative;top:-6px}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TmwSelectComponent, selector: "tmw-select", inputs: ["placeholder", "arrayData", "arrayKeyProperty", "arrayValueProperty", "includeFullObject", "enumData", "enumDataToExclude", "isMultiLanguage", "multilanguagePrefixKey", "isMultiSelect", "isRequired", "isDisabled", "showCancelButton", "isSearchable", "searchText", "noResultSearchText", "toolbarButtons", "showAddButton", "ngModelOptions", "ngModelInput", "formGroupInput", "formControlNameInput"], outputs: ["ngModelInputChange"] }, { kind: "component", type: i4.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }, { kind: "component", type: i5.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "pickerMode", "timeType", "label", "placeholder", "hint", "haveFloatingLabel", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "timeZone", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates", "iconsPosition", "closeIconPosition", "containerStyle", "inputStyle", "calendarButtonStyle", "clockButtonStyle", "closeButtonStyle", "useTooltip", "tooltipStyle"], outputs: ["dateChange"] }] });
112
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateFilterTemplateComponent, decorators: [{
113
113
  type: Component,
114
114
  args: [{ selector: 'date-filter-template', template: "<div class=\"row\">\r\n <div class=\"col-12 rowCol\">\r\n <div class=\"visibleCol\">\r\n <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n </button>\r\n </div> \r\n <div class=\"groupByCol\">\r\n <tmw-select\r\n [placeholder]=\"'Operatori di confronto'\"\r\n [isMultiSelect]=\"true\"\r\n [enumData]=\"operatorsGroupByEnum\"\r\n [(ngModelInput)]=\"operatorsGroupBy\"\r\n (ngModelInputChange)=\"onFilterChange()\"\r\n ></tmw-select>\r\n </div> \r\n <div class=\"valueCol\">\r\n <tmw-datetimepicker [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onFilterChange()\" [outputFormat]=\"outputFormat\" >\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"operatorCol\">\r\n <tmw-select [enumData]=\"logicOperatorNumeric\" [(ngModelInput)]=\"selectedLogicOperator\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onFilterChange()\"></tmw-select>\r\n </div> \r\n <div class=\"aggregatorCol\">\r\n <tmw-select\r\n [placeholder]=\"'Aggregazioni'\"\r\n [isMultiSelect]=\"true\"\r\n [enumData]=\"aggregationFunctionEnum\"\r\n [(ngModelInput)]=\"aggregations\"\r\n (ngModelInputChange)=\"onFilterChange()\"\r\n ></tmw-select>\r\n </div> \r\n </div>\r\n</div>", styles: [".rowCol{display:flex;height:56px}.rowCol>*{height:100%}.rowCol .valueCol{padding-right:0;width:100%}.rowCol .operatorCol{padding-left:0;padding-right:0;width:110px;min-width:110px}.rowCol .visibleCol{display:flex;justify-content:center;align-items:flex-start;border-top-left-radius:0;border-bottom-left-radius:0;width:50px;min-width:50px}.rowCol .visibleCol button{height:100%}.rowCol .coordinatesCol{display:flex;justify-content:center;align-items:flex-start;flex-direction:column;border-top-left-radius:0;border-bottom-left-radius:0;width:35px;min-width:35px}.rowCol .coordinatesCol button{height:30px;width:30px;margin:1px;padding:0}.rowCol .aggregatorCol{min-width:219px}::ng-deep .operatorCol .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:#a5afc0!important}::ng-deep .operatorCol .mat-mdc-select-value{color:#081c45;font-size:16px;font-weight:700;position:relative;top:-6px}\n"] }]
@@ -73,7 +73,7 @@ export class ImageSelectorFilterTemplateComponent {
73
73
  this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);
74
74
  }
75
75
  /**
76
- * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.
76
+ * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la select.
77
77
  */
78
78
  setArrayData() {
79
79
  this.prepareValuePairs();
@@ -132,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
132
132
  }], filterChange: [{
133
133
  type: Output
134
134
  }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXN0YXRpc3RpY3MvZmlsdGVyLXRlbXBsYXRlcy9pbWFnZS1zZWxlY3Rvci1maWx0ZXItdGVtcGxhdGUvaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXN0YXRpc3RpY3MvZmlsdGVyLXRlbXBsYXRlcy9pbWFnZS1zZWxlY3Rvci1maWx0ZXItdGVtcGxhdGUvaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGdDQUFnQyxFQUFpQyxTQUFTLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuSSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7O0FBT3ZFLE1BQU0sT0FBTyxvQ0FBb0M7SUFxQmpEO1FBakJZLGlCQUFZLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7UUFDaEYsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsb0NBQStCLEdBQUcsMEJBQTBCLENBQUM7UUFFN0Qsb0JBQWUs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QUFHLENBQUMsRUFBRTtZQUN4RyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztTQUN6RTthQUFNO1lBQ0wsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztTQUMzRDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDOztrSUExSVUsb0NBQW9DO3NIQUFwQyxvQ0FBb0MsK0pDYmpELHM0QkFhUzs0RkRBSSxvQ0FBb0M7a0JBTGhELFNBQVM7K0JBQ0UsZ0NBQWdDOzBFQU1qQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBMb2dpY09wZXJhdG9ySW1hZ2VTZWxlY3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZGVscy9sb2dpY09wZXJhdG9yLm1vZGVsJztcclxuaW1wb3J0IHsgTm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0sIE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtLCBTdGF0aXN0aWMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9tb2RlbHMvc3RhdGlzdGljLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbWFnZS1zZWxlY3Rvci1maWx0ZXItdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1hZ2VTZWxlY3RvckZpbHRlclRlbXBsYXRlQ29tcG9uZW50IHtcclxuICAvL3ZhcmlhYmlsaSBlc3Rlcm5lIHBlciBsJ2lucHV0IGRlaSBjYW1waVxyXG4gIEBJbnB1dCgpIGZpZWxkOiBJbWFnZVNlbGVjdG9yRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPFN0YXRpc3RpYz4gPSBuZXcgRXZlbnRFbWl0dGVyPFN0YXRpc3RpYz4oKTtcclxuICB2YWxpZGF0b3JzQXJyYXk6IGFueVtdID0gW107XHJcbiAgbG9naWNPcGVyYXRvckltYWdlU2VsZWN0b3JWYWx1ZSA9IExvZ2ljT3BlcmF0b3JJbWFnZVNlbGVjdG9yO1xyXG4gIHNlbGVjdGVkTG9naWNPcGVyYXRvcjogTG9naWNPcGVyYXRvckltYWdlU2VsZWN0b3I7XHJcbiAgYWN0aXZlQ29uZGl0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vdmFyaWFiaWxpIHBlciBnZXN0aXJlIGlsIGNzcyBkZWxsYSBsYWJlbCBlIGRlbCBmaWVsZFxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuICBMYWJlbHN0eWxlT2JqOiBhbnk7XHJcblxyXG4gIGFycmF5RGF0YTogeyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSwgU2VsZWN0ZWQ/OiBib29sZWFuLCBJbWdVcmw/OiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gIGFnZ3JlZ2F0aW9uczogQXJyYXk8TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0+IHwgQXJyYXk8Tm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0+O1xyXG4gIGFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtID0gTm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW07ICBcclxuXHJcbiAgb3BlcmF0b3JzR3JvdXBCeTogQXJyYXk8TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0+O1xyXG5cclxuY29uc3RydWN0b3IoKSB7XHJcbn1cclxuXHJcbm5nT25Jbml0KCk6IHZvaWQge1xyXG4gIHRoaXMuY29uZmlndXJlQ29udHJvbGxlcnMoKTtcclxuICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG59XHJcblxyXG4gIC8vRnVuemlvbmUgcGVyIHBhcnNhcmUgaWwgY2FtcG8gc3R5bGVjc3MgZGVsbCdvZ2dldHRvIGZpZWxkIGVkIGFwcGxpY2FybG8gYWxsJ2h0bWxcclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZCkgICBcclxuICAgIHRoaXMuRmllbGRzdHlsZU9iaj0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG59XHJcblxyXG4vKipcclxuKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuKi9cclxub25GaWx0ZXJDaGFuZ2UoKSB7XHJcbiAgaWYgKHRoaXMuc2VsZWN0ZWRMb2dpY09wZXJhdG9yICE9IG51bGwpe1xyXG4gICAgdGhpcy5hY3RpdmVDb25kaXRpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmdlbmVyYXRlQ29uZGl0aW9uKFwiYWN0aXZlXCIpKTtcclxuICB9XHJcbiAgaWYgKHRoaXMuYWN0aXZlQ29uZGl0aW9uICYmICB0aGlzLnNlbGVjdGVkTG9naWNPcGVyYXRvciA9PSBudWxsKXtcclxuICAgIHRoaXMuYWN0aXZlQ29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZ2VuZXJhdGVDb25kaXRpb24oXCJkZWFjdGl2YXRlZFwiKSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogTWV0b2RvIGNoZSBnZW5lcmEgbCdvZ2dldHRvIGRhIGludmlhcmUgYWxsJ2VzdGVybm9cclxuICovXHJcblxyXG5nZW5lcmF0ZUNvbmRpdGlvbihtb2RlKXtcclxuICBsZXQgb3V0cHV0OlN0YXRpc3RpYyA9IG5ldyBTdGF0aXN0aWMoKTtcclxuICBpZiAobW9kZSA9PSBcImFjdGl2ZVwiKXtcclxuICAgIG91dHB1dCA9IHtcclxuICAgICAga2V5OiB0aGlzLmZpZWxkLk5hbWUsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLFxyXG4gICAgICBsb2dpY29wZXJhdG9yOiB0aGlzLnNlbGVjdGVkTG9naWNPcGVyYXRvcixcclxuICAgICAgZmllbGR0eXBlOiB0aGlzLmZpZWxkLkZpZWxkVHlwZSxcclxuICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIGFnZ3JlZ2F0aW9uczogdGhpcy5hZ2dyZWdhdGlvbnMsXHJcbiAgICAgIG9wZXJhdG9yc0dyb3VwQnk6IHRoaXMub3BlcmF0b3JzR3JvdXBCeVxyXG4gICAgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgb3V0cHV0ID0ge1xyXG4gICAgICBrZXk6IHRoaXMuZmllbGQuTmFtZSxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIGxvZ2ljb3BlcmF0b3I6IG51bGwsXHJcbiAgICAgIGZpZWxkdHlwZTogbnVsbCxcclxuICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIGFnZ3JlZ2F0aW9uczogdGhpcy5hZ2dyZWdhdGlvbnMsXHJcbiAgICAgIG9wZXJhdG9yc0dyb3VwQnk6IHRoaXMub3BlcmF0b3JzR3JvdXBCeVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4qIE1ldG9kbyBkaSBhZ2dpdW50YSBkZWkgdmFsaWRhdG9yIGRlbGwnaW5wdXRcclxuKi9cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbnRyb2xsZXJzKCkge1xyXG4gICAgdGhpcy52YWxpZGF0b3JzQXJyYXkgPSBbXTtcclxuICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5nZXQoW3RoaXMuZmllbGQuTmFtZV0pLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0b3JzQXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGVsIHRpcG8geyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSB9IGRhIHVzYXJlIGNvbWUgc29yZ2VudGUgZGF0aSBwZXIgbGEgZXFwLXNlbGVjdC5cclxuICAgKi9cclxuICAgcHJpdmF0ZSBzZXRBcnJheURhdGEoKSB7XHJcbiAgICB0aGlzLnByZXBhcmVWYWx1ZVBhaXJzKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwpe1xyXG4gICAgICBpZiAoVXRpbGl0eUhlbHBlclNlcnZpY2UuaXNOdW1lcmljKHRoaXMuZmllbGQuVmFsdWVQYWlyc1tPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpWzBdXSkpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpLmZvckVhY2hcclxuICAgICAgICAgIChrID0+IHRoaXMuY3JlYXRlTnVtYmVyQXJyYXlEYXRhRWxlbWVudChrLCBOdW1iZXIodGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tdKSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycykuZm9yRWFjaFxyXG4gICAgICAgICAgKGsgPT4gdGhpcy5jcmVhdGVBcnJheURhdGFFbGVtZW50KGssIHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlVmFsdWVQYWlycygpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5maWVsZC5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgIGNvbnN0IHRlbXA6IHN0cmluZyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIG51bGwpO1xyXG4gICAgICAvLyB0ZW1wIGRvdnJlYmJlIGVzc2VyZSB1bmEgc3RyaW5nYSBkZWwgdGlwbyBcImNoaWF2ZTEhIHZhbG9yZSAxIDsgY2hpYXZlMiB8IHZhbG9yZSAyIFwiXHJcbiAgICAgIC8vIGRvYmJpYW1vIG90dGVuZXJlIHVuIGRpemlvbmFyaW8gZGkgcXVlaSB2YWxvcmlcclxuICAgICAgdGhpcy5maWVsZC5WYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnModGVtcCk7XHJcblxyXG4gICAgICAvL3RoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCBudWxsKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwgJiYgdGhpcy5maWVsZC5WYWx1ZVBhaXJzLmxlbmdodCA+IDApIHtcclxuICAgICAgLy8gdmEgYmVuZSBjb3PDrFxyXG5cclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBjcmVhdGVBcnJheURhdGFFbGVtZW50KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBpbWdVcmw6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGxldCBpc09wdGlvblNlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9ICEhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5maW5kKHYgPT4gdiA9PSB2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9PT0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFycmF5RGF0YS5wdXNoKHsgS2V5OiBrZXksIFZhbHVlOiB2YWx1ZSwgU2VsZWN0ZWQ6IGlzT3B0aW9uU2VsZWN0ZWQsIEltZ1VybDogaW1nVXJsIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGtleTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBpbWdVcmw6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGxldCBpc09wdGlvblNlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9ICEhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5maW5kKHYgPT4gdiA9PSB2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9PT0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFycmF5RGF0YS5wdXNoKHsgS2V5OiBrZXksIFZhbHVlOiB2YWx1ZSwgU2VsZWN0ZWQ6IGlzT3B0aW9uU2VsZWN0ZWQsIEltZ1VybDogaW1nVXJsIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPCEtLTxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOSB2YWx1ZUNvbFwiPlxyXG4gICAgICAgIDx0bXctc2VsZWN0IGNsYXNzPVwiaW1hZ2Utc2VsZWN0b3JcIiBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgW2FycmF5RGF0YV09XCJhcnJheURhdGFcIlxyXG4gICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInVmFsdWUnXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwidHJ1ZVwiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ0tleSdcIlxyXG4gICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCJmaWVsZC5OYW1lXCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCIgW2lzUmVxdWlyZWRdPVwiZmFsc2VcIiBbaXNEaXNhYmxlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiBbaXNNdWx0aVNlbGVjdF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoKVwiPlxyXG4gICAgICAgIDwvdG13LXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG9wZXJhdG9yQ29sXCI+XHJcbiAgICAgICAgPHRtdy1zZWxlY3QgW2VudW1EYXRhXT1cImxvZ2ljT3BlcmF0b3JJbWFnZVNlbGVjdG9yVmFsdWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTG9naWNPcGVyYXRvclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKClcIj48L3Rtdy1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+LS0+Il19
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXN0YXRpc3RpY3MvZmlsdGVyLXRlbXBsYXRlcy9pbWFnZS1zZWxlY3Rvci1maWx0ZXItdGVtcGxhdGUvaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXN0YXRpc3RpY3MvZmlsdGVyLXRlbXBsYXRlcy9pbWFnZS1zZWxlY3Rvci1maWx0ZXItdGVtcGxhdGUvaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGdDQUFnQyxFQUFpQyxTQUFTLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuSSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7O0FBT3ZFLE1BQU0sT0FBTyxvQ0FBb0M7SUFxQmpEO1FBakJZLGlCQUFZLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7UUFDaEYsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsb0NBQStCLEdBQUcsMEJBQTBCLENBQUM7UUFFN0Qsb0JBQWUs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QUFHLENBQUMsRUFBRTtZQUN4RyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztTQUN6RTthQUFNO1lBQ0wsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztTQUMzRDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDOztrSUExSVUsb0NBQW9DO3NIQUFwQyxvQ0FBb0MsK0pDYmpELHM0QkFhUzs0RkRBSSxvQ0FBb0M7a0JBTGhELFNBQVM7K0JBQ0UsZ0NBQWdDOzBFQU1qQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBMb2dpY09wZXJhdG9ySW1hZ2VTZWxlY3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZGVscy9sb2dpY09wZXJhdG9yLm1vZGVsJztcclxuaW1wb3J0IHsgTm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0sIE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtLCBTdGF0aXN0aWMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9tb2RlbHMvc3RhdGlzdGljLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2Utc2VsZWN0b3ItZmlsdGVyLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbWFnZS1zZWxlY3Rvci1maWx0ZXItdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1hZ2VTZWxlY3RvckZpbHRlclRlbXBsYXRlQ29tcG9uZW50IHtcclxuICAvL3ZhcmlhYmlsaSBlc3Rlcm5lIHBlciBsJ2lucHV0IGRlaSBjYW1waVxyXG4gIEBJbnB1dCgpIGZpZWxkOiBJbWFnZVNlbGVjdG9yRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPFN0YXRpc3RpYz4gPSBuZXcgRXZlbnRFbWl0dGVyPFN0YXRpc3RpYz4oKTtcclxuICB2YWxpZGF0b3JzQXJyYXk6IGFueVtdID0gW107XHJcbiAgbG9naWNPcGVyYXRvckltYWdlU2VsZWN0b3JWYWx1ZSA9IExvZ2ljT3BlcmF0b3JJbWFnZVNlbGVjdG9yO1xyXG4gIHNlbGVjdGVkTG9naWNPcGVyYXRvcjogTG9naWNPcGVyYXRvckltYWdlU2VsZWN0b3I7XHJcbiAgYWN0aXZlQ29uZGl0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vdmFyaWFiaWxpIHBlciBnZXN0aXJlIGlsIGNzcyBkZWxsYSBsYWJlbCBlIGRlbCBmaWVsZFxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuICBMYWJlbHN0eWxlT2JqOiBhbnk7XHJcblxyXG4gIGFycmF5RGF0YTogeyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSwgU2VsZWN0ZWQ/OiBib29sZWFuLCBJbWdVcmw/OiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gIGFnZ3JlZ2F0aW9uczogQXJyYXk8TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0+IHwgQXJyYXk8Tm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0+O1xyXG4gIGFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtID0gTm90TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW07ICBcclxuXHJcbiAgb3BlcmF0b3JzR3JvdXBCeTogQXJyYXk8TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0+O1xyXG5cclxuY29uc3RydWN0b3IoKSB7XHJcbn1cclxuXHJcbm5nT25Jbml0KCk6IHZvaWQge1xyXG4gIHRoaXMuY29uZmlndXJlQ29udHJvbGxlcnMoKTtcclxuICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG59XHJcblxyXG4gIC8vRnVuemlvbmUgcGVyIHBhcnNhcmUgaWwgY2FtcG8gc3R5bGVjc3MgZGVsbCdvZ2dldHRvIGZpZWxkIGVkIGFwcGxpY2FybG8gYWxsJ2h0bWxcclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZCkgICBcclxuICAgIHRoaXMuRmllbGRzdHlsZU9iaj0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG59XHJcblxyXG4vKipcclxuKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuKi9cclxub25GaWx0ZXJDaGFuZ2UoKSB7XHJcbiAgaWYgKHRoaXMuc2VsZWN0ZWRMb2dpY09wZXJhdG9yICE9IG51bGwpe1xyXG4gICAgdGhpcy5hY3RpdmVDb25kaXRpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmdlbmVyYXRlQ29uZGl0aW9uKFwiYWN0aXZlXCIpKTtcclxuICB9XHJcbiAgaWYgKHRoaXMuYWN0aXZlQ29uZGl0aW9uICYmICB0aGlzLnNlbGVjdGVkTG9naWNPcGVyYXRvciA9PSBudWxsKXtcclxuICAgIHRoaXMuYWN0aXZlQ29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZ2VuZXJhdGVDb25kaXRpb24oXCJkZWFjdGl2YXRlZFwiKSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogTWV0b2RvIGNoZSBnZW5lcmEgbCdvZ2dldHRvIGRhIGludmlhcmUgYWxsJ2VzdGVybm9cclxuICovXHJcblxyXG5nZW5lcmF0ZUNvbmRpdGlvbihtb2RlKXtcclxuICBsZXQgb3V0cHV0OlN0YXRpc3RpYyA9IG5ldyBTdGF0aXN0aWMoKTtcclxuICBpZiAobW9kZSA9PSBcImFjdGl2ZVwiKXtcclxuICAgIG91dHB1dCA9IHtcclxuICAgICAga2V5OiB0aGlzLmZpZWxkLk5hbWUsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLFxyXG4gICAgICBsb2dpY29wZXJhdG9yOiB0aGlzLnNlbGVjdGVkTG9naWNPcGVyYXRvcixcclxuICAgICAgZmllbGR0eXBlOiB0aGlzLmZpZWxkLkZpZWxkVHlwZSxcclxuICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIGFnZ3JlZ2F0aW9uczogdGhpcy5hZ2dyZWdhdGlvbnMsXHJcbiAgICAgIG9wZXJhdG9yc0dyb3VwQnk6IHRoaXMub3BlcmF0b3JzR3JvdXBCeVxyXG4gICAgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgb3V0cHV0ID0ge1xyXG4gICAgICBrZXk6IHRoaXMuZmllbGQuTmFtZSxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIGxvZ2ljb3BlcmF0b3I6IG51bGwsXHJcbiAgICAgIGZpZWxkdHlwZTogbnVsbCxcclxuICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIGFnZ3JlZ2F0aW9uczogdGhpcy5hZ2dyZWdhdGlvbnMsXHJcbiAgICAgIG9wZXJhdG9yc0dyb3VwQnk6IHRoaXMub3BlcmF0b3JzR3JvdXBCeVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4qIE1ldG9kbyBkaSBhZ2dpdW50YSBkZWkgdmFsaWRhdG9yIGRlbGwnaW5wdXRcclxuKi9cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbnRyb2xsZXJzKCkge1xyXG4gICAgdGhpcy52YWxpZGF0b3JzQXJyYXkgPSBbXTtcclxuICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5nZXQoW3RoaXMuZmllbGQuTmFtZV0pLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0b3JzQXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGVsIHRpcG8geyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSB9IGRhIHVzYXJlIGNvbWUgc29yZ2VudGUgZGF0aSBwZXIgbGEgc2VsZWN0LlxyXG4gICAqL1xyXG4gICBwcml2YXRlIHNldEFycmF5RGF0YSgpIHtcclxuICAgIHRoaXMucHJlcGFyZVZhbHVlUGFpcnMoKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCl7XHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGhpcy5maWVsZC5WYWx1ZVBhaXJzW09iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycylbMF1dKSkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycykuZm9yRWFjaFxyXG4gICAgICAgICAgKGsgPT4gdGhpcy5jcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGssIE51bWJlcih0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoXHJcbiAgICAgICAgICAoayA9PiB0aGlzLmNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoaywgdGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tdKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZXBhcmVWYWx1ZVBhaXJzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgY29uc3QgdGVtcDogc3RyaW5nID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5Gb3JtdWxhLCB0aGlzLnJlY29yZCwgbnVsbCk7XHJcbiAgICAgIC8vIHRlbXAgZG92cmViYmUgZXNzZXJlIHVuYSBzdHJpbmdhIGRlbCB0aXBvIFwiY2hpYXZlMSEgdmFsb3JlIDEgOyBjaGlhdmUyIHwgdmFsb3JlIDIgXCJcclxuICAgICAgLy8gZG9iYmlhbW8gb3R0ZW5lcmUgdW4gZGl6aW9uYXJpbyBkaSBxdWVpIHZhbG9yaVxyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycyh0ZW1wKTtcclxuXHJcbiAgICAgIC8vdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIG51bGwpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlUGFpcnMubGVuZ2h0ID4gMCkge1xyXG4gICAgICAvLyB2YSBiZW5lIGNvc8OsXHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBwcml2YXRlIGNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC05IHZhbHVlQ29sXCI+XHJcbiAgICAgICAgPHRtdy1zZWxlY3QgY2xhc3M9XCJpbWFnZS1zZWxlY3RvclwiIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBbYXJyYXlEYXRhXT1cImFycmF5RGF0YVwiXHJcbiAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidWYWx1ZSdcIiBbc2hvd0NhbmNlbEJ1dHRvbl09XCJ0cnVlXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInS2V5J1wiXHJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cImZpZWxkLk5hbWVcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQuRGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIiBbaXNSZXF1aXJlZF09XCJmYWxzZVwiIFtpc0Rpc2FibGVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIFtpc011bHRpU2VsZWN0XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkZpbHRlckNoYW5nZSgpXCI+XHJcbiAgICAgICAgPC90bXctc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgb3BlcmF0b3JDb2xcIj5cclxuICAgICAgICA8dG13LXNlbGVjdCBbZW51bURhdGFdPVwibG9naWNPcGVyYXRvckltYWdlU2VsZWN0b3JWYWx1ZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRMb2dpY09wZXJhdG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoKVwiPjwvdG13LXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4tLT4iXX0=