@valtimo/dossier 12.1.1 → 12.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/dossier-assign-user/dossier-assign-user.component.mjs +4 -4
- package/esm2022/lib/components/dossier-bulk-assign-modal/dossier-bulk-assign-modal.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/dossier-detail.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/audit/audit.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/documents/documents.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/formio/formio.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/not-found/not-found.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/notes/notes.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/progress/progress.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/s3-documents/s3-documents.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/summary/summary.component.mjs +5 -5
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.mjs +5 -5
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.mjs +5 -5
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.mjs +7 -4
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/widgets-container/widgets-container.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/widgets/widgets.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.mjs +5 -5
- package/esm2022/lib/components/dossier-list/dossier-list.component.mjs +12 -8
- package/esm2022/lib/components/dossier-list-actions/dossier-list-actions.component.mjs +20 -9
- package/esm2022/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.mjs +4 -4
- package/esm2022/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +4 -4
- package/esm2022/lib/components/dossier-update/dossier-update.component.mjs +4 -4
- package/esm2022/lib/components/note-modal/note-modal.component.mjs +4 -4
- package/esm2022/lib/dossier-routing.module.mjs +5 -5
- package/esm2022/lib/dossier.module.mjs +5 -5
- package/esm2022/lib/models/tabs.model.mjs +2 -3
- package/esm2022/lib/pipes/tab-translate/tab-translate-pipe.module.mjs +5 -5
- package/esm2022/lib/pipes/tab-translate/tab-translate.pipe.mjs +4 -4
- package/esm2022/lib/services/dossier-bulk-assign.service.mjs +4 -4
- package/esm2022/lib/services/dossier-column.service.mjs +4 -4
- package/esm2022/lib/services/dossier-list-assignee.service.mjs +4 -4
- package/esm2022/lib/services/dossier-list-pagination.service.mjs +4 -4
- package/esm2022/lib/services/dossier-list-search.service.mjs +4 -4
- package/esm2022/lib/services/dossier-list-status.service.mjs +4 -4
- package/esm2022/lib/services/dossier-list.service.mjs +4 -4
- package/esm2022/lib/services/dossier-parameter.service.mjs +4 -4
- package/esm2022/lib/services/dossier-tab-api.service.mjs +5 -10
- package/esm2022/lib/services/dossier-tab.service.mjs +5 -6
- package/esm2022/lib/services/dossier-widgets-api.service.mjs +4 -4
- package/esm2022/lib/services/dossier-widgets-layout.service.mjs +4 -4
- package/esm2022/lib/services/dossier.service.mjs +4 -4
- package/esm2022/lib/services/notes.service.mjs +4 -4
- package/esm2022/lib/services/start-modal.service.mjs +4 -4
- package/fesm2022/valtimo-dossier.mjs +171 -159
- package/fesm2022/valtimo-dossier.mjs.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/widgets.component.d.ts +1 -1
- package/lib/components/dossier-detail/tab/widgets/widgets.component.d.ts.map +1 -1
- package/lib/components/dossier-list/dossier-list.component.d.ts +3 -1
- package/lib/components/dossier-list/dossier-list.component.d.ts.map +1 -1
- package/lib/components/dossier-list-actions/dossier-list-actions.component.d.ts +4 -3
- package/lib/components/dossier-list-actions/dossier-list-actions.component.d.ts.map +1 -1
- package/lib/models/tabs.model.d.ts.map +1 -1
- package/lib/services/dossier-tab-api.service.d.ts.map +1 -1
- package/lib/services/dossier-tab.service.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -18,7 +18,7 @@ import { CarbonListComponent, CASES_WITHOUT_STATUS_KEY, ViewType, } from '@valti
|
|
|
18
18
|
import { AdvancedDocumentSearchRequestImpl, InternalCaseStatusUtils, } from '@valtimo/document';
|
|
19
19
|
import { Tabs } from 'carbon-components-angular';
|
|
20
20
|
import { isEqual } from 'lodash';
|
|
21
|
-
import { BehaviorSubject, combineLatest, defaultIfEmpty, distinctUntilChanged, filter, forkJoin, map, of, switchMap, take, tap, } from 'rxjs';
|
|
21
|
+
import { BehaviorSubject, combineLatest, debounceTime, defaultIfEmpty, distinctUntilChanged, filter, forkJoin, map, of, switchMap, take, tap, } from 'rxjs';
|
|
22
22
|
import { DEFAULT_DOSSIER_LIST_TABS, DOSSIER_LIST_NO_RESULTS_MESSAGE, DOSSIER_LIST_TABLE_TRANSLATIONS, } from '../../constants';
|
|
23
23
|
import { CAN_CREATE_CASE_PERMISSION, CAN_VIEW_CASE_PERMISSION, DOSSIER_DETAIL_PERMISSION_RESOURCE, } from '../../permissions';
|
|
24
24
|
import { DossierColumnService, DossierListAssigneeService, DossierListPaginationService, DossierListSearchService, DossierListService, DossierListStatusService, DossierParameterService, } from '../../services';
|
|
@@ -64,6 +64,7 @@ export class DossierListComponent {
|
|
|
64
64
|
this.defaultTabs = DEFAULT_DOSSIER_LIST_TABS;
|
|
65
65
|
this.tableTranslations = DOSSIER_LIST_TABLE_TRANSLATIONS;
|
|
66
66
|
this.noResultsMessage$ = new BehaviorSubject(DOSSIER_LIST_NO_RESULTS_MESSAGE);
|
|
67
|
+
this.disableStartButton$ = new BehaviorSubject(false);
|
|
67
68
|
this.showAssignModal$ = new BehaviorSubject(false);
|
|
68
69
|
this.showChangePageModal$ = new BehaviorSubject(false);
|
|
69
70
|
this.showChangeTabModal$ = new BehaviorSubject(false);
|
|
@@ -152,7 +153,7 @@ export class DossierListComponent {
|
|
|
152
153
|
this.listService.forceRefresh$,
|
|
153
154
|
this._hasEnvColumnConfig$,
|
|
154
155
|
this._hasApiColumnConfig$,
|
|
155
|
-
])), distinctUntilChanged(([prevSearchRequest, prevAssigneeFilter, prevSearchFieldValues, prevSelectedStatuses, prevForceRefresh,], [currSearchRequest, currAssigneeFilter, currSearchFieldValues, currSelectedStatuses, currForceRefresh,]) => isEqual({
|
|
156
|
+
]).pipe(debounceTime(50))), distinctUntilChanged(([prevSearchRequest, prevAssigneeFilter, prevSearchFieldValues, prevSelectedStatuses, prevForceRefresh,], [currSearchRequest, currAssigneeFilter, currSearchFieldValues, currSelectedStatuses, currForceRefresh,]) => isEqual({
|
|
156
157
|
...prevSearchRequest,
|
|
157
158
|
assignee: prevAssigneeFilter,
|
|
158
159
|
...prevSearchFieldValues,
|
|
@@ -337,6 +338,9 @@ export class DossierListComponent {
|
|
|
337
338
|
onSelectedStatusesChange(statuses) {
|
|
338
339
|
this.statusService.setSelectedStatuses(statuses);
|
|
339
340
|
}
|
|
341
|
+
onStartButtonDisableEvent(disabled) {
|
|
342
|
+
this.disableStartButton$.next(disabled);
|
|
343
|
+
}
|
|
340
344
|
openDocumentDefinitionNameSubscription() {
|
|
341
345
|
this._documentDefinitionNameSubscription = this.route.params
|
|
342
346
|
.pipe(map((params) => params?.documentDefinitionName), filter(docDefName => !!docDefName), distinctUntilChanged())
|
|
@@ -376,8 +380,8 @@ export class DossierListComponent {
|
|
|
376
380
|
title: `dossier.noResults.${this.activeTab ?? 'ALL'}.title`,
|
|
377
381
|
});
|
|
378
382
|
}
|
|
379
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
380
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.
|
|
383
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierListComponent, deps: [{ token: i1.DossierListAssigneeService }, { token: i2.BreadcrumbService }, { token: i1.DossierBulkAssignService }, { token: i1.DossierColumnService }, { token: i3.ConfigService }, { token: i4.DocumentService }, { token: i1.DossierListService }, { token: i2.PageTitleService }, { token: i1.DossierListPaginationService }, { token: i1.DossierParameterService }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i1.DossierListSearchService }, { token: i6.TranslateService }, { token: i7.PermissionService }, { token: i1.DossierListStatusService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
384
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierListComponent, selector: "valtimo-dossier-list", providers: [
|
|
381
385
|
DossierListService,
|
|
382
386
|
DossierColumnService,
|
|
383
387
|
DossierListAssigneeService,
|
|
@@ -385,9 +389,9 @@ export class DossierListComponent {
|
|
|
385
389
|
DossierListPaginationService,
|
|
386
390
|
DossierListSearchService,
|
|
387
391
|
DossierListStatusService,
|
|
388
|
-
], viewQueries: [{ propertyName: "carbonList", first: true, predicate: CarbonListComponent, descendants: true }, { propertyName: "listActionsComponent", first: true, predicate: DossierListActionsComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: Tabs, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n fields: fields$ | async,\n documentItems: documentItems$ | async,\n noResultsMessage: noResultsMessage$ | async,\n searchFields: searchFields$ | async,\n schema: schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedDocumentIds: selectedDocumentIds$ | async,\n statuses: statuses$ | async,\n selectedStatuses: selectedStatuses$ | async,\n showStatusSelector: showStatusSelector$ | async,\n loaded:\n !loadingFields &&\n !loadingPagination &&\n !loadingSearchFields &&\n !loadingAssigneeFilter &&\n !loadingDocumentItems\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-dossier-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n ></valtimo-dossier-list-actions>\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changeTabModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n [defaultValues]=\"searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatuses]=\"obs.selectedStatuses\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n </valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"dossierList\"\n lockedTooltipTranslationKey=\"dossier.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'dossier.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"dossierListActions\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : dossierListActions\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs\n *ngIf=\"!visibleDossierTabs; else configuredTabs\"\n type=\"contained\"\n class=\"dossier-list-tabs\"\n >\n <cds-tab\n *ngFor=\"let tab of defaultTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs type=\"contained\" class=\"dossier-list-tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleDossierTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #loading\n ><valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div> </valtimo-carbon-list\n></ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-dossier-bulk-assign-modal\n [documentIds]=\"obs.selectedDocumentIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event, obs.selectedDocumentIds)\"\n ></valtimo-dossier-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changePageModal.confirm\"\n contentTranslationKey=\"dossier.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"dossier.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #changeTabModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changeTabModal.confirm\"\n contentTranslationKey=\"dossier.changeTabModal.content\"\n [outputOnConfirm]=\"tabChange$ | async\"\n [showModalSubject$]=\"showChangeTabModal$\"\n titleTranslationKey=\"dossier.changeTabModal.title\"\n (cancelEvent)=\"onChangeTabCancel()\"\n (confirmEvent)=\"onChangeTabConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #dossierListActions>\n <button\n *ngIf=\"canCreateDocument$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"listActionsComponent?.disableStartDossierButton$ | async\"\n (click)=\"startDossier()\"\n >\n {{ 'Start Dossier' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [".dossier-list-tabs cds-tab{display:none}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName", "setValuesSubject$", "clearValuesSubject$", "defaultValues", "inputDisabled", "externalSearchField"], outputs: ["doSearch"] }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i9.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i9.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive"], outputs: ["selected"] }, { kind: "component", type: i2.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.StatusSelectorComponent, selector: "valtimo-status-selector", inputs: ["statuses", "selectedStatuses", "carbonTheme", "disabled"], outputs: ["selectedStatusesChangeEvent"] }, { kind: "component", type: i10.DossierBulkAssignModalComponent, selector: "valtimo-dossier-bulk-assign-modal", inputs: ["documentIds", "open"], outputs: ["closeEvent"] }, { kind: "component", type: i11.DossierListActionsComponent, selector: "valtimo-dossier-list-actions", inputs: ["loading"], outputs: ["formFlowComplete"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
|
|
392
|
+
], viewQueries: [{ propertyName: "carbonList", first: true, predicate: CarbonListComponent, descendants: true }, { propertyName: "listActionsComponent", first: true, predicate: DossierListActionsComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: Tabs, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n fields: fields$ | async,\n documentItems: documentItems$ | async,\n noResultsMessage: noResultsMessage$ | async,\n searchFields: searchFields$ | async,\n schema: schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedDocumentIds: selectedDocumentIds$ | async,\n statuses: statuses$ | async,\n selectedStatuses: selectedStatuses$ | async,\n showStatusSelector: showStatusSelector$ | async,\n loaded:\n !loadingFields &&\n !loadingPagination &&\n !loadingSearchFields &&\n !loadingAssigneeFilter &&\n !loadingDocumentItems\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-dossier-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-dossier-list-actions>\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changeTabModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n [defaultValues]=\"searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatuses]=\"obs.selectedStatuses\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n </valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"dossierList\"\n lockedTooltipTranslationKey=\"dossier.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'dossier.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"dossierListActions\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : dossierListActions\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs\n *ngIf=\"!visibleDossierTabs; else configuredTabs\"\n type=\"contained\"\n class=\"dossier-list-tabs\"\n >\n <cds-tab\n *ngFor=\"let tab of defaultTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs type=\"contained\" class=\"dossier-list-tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleDossierTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #loading\n ><valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div> </valtimo-carbon-list\n></ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-dossier-bulk-assign-modal\n [documentIds]=\"obs.selectedDocumentIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event, obs.selectedDocumentIds)\"\n ></valtimo-dossier-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changePageModal.confirm\"\n contentTranslationKey=\"dossier.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"dossier.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #changeTabModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changeTabModal.confirm\"\n contentTranslationKey=\"dossier.changeTabModal.content\"\n [outputOnConfirm]=\"tabChange$ | async\"\n [showModalSubject$]=\"showChangeTabModal$\"\n titleTranslationKey=\"dossier.changeTabModal.title\"\n (cancelEvent)=\"onChangeTabCancel()\"\n (confirmEvent)=\"onChangeTabConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #dossierListActions>\n <button\n *ngIf=\"canCreateDocument$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startDossier()\"\n >\n {{ 'Start Dossier' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [".dossier-list-tabs cds-tab{display:none}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName", "setValuesSubject$", "clearValuesSubject$", "defaultValues", "inputDisabled", "externalSearchField"], outputs: ["doSearch"] }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i9.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i9.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "component", type: i2.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.StatusSelectorComponent, selector: "valtimo-status-selector", inputs: ["statuses", "selectedStatuses", "carbonTheme", "disabled"], outputs: ["selectedStatusesChangeEvent"] }, { kind: "component", type: i10.DossierBulkAssignModalComponent, selector: "valtimo-dossier-bulk-assign-modal", inputs: ["documentIds", "open"], outputs: ["closeEvent"] }, { kind: "component", type: i11.DossierListActionsComponent, selector: "valtimo-dossier-list-actions", inputs: ["loading"], outputs: ["formFlowComplete", "startButtonDisableEvent"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
|
|
389
393
|
}
|
|
390
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
394
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierListComponent, decorators: [{
|
|
391
395
|
type: Component,
|
|
392
396
|
args: [{ selector: 'valtimo-dossier-list', providers: [
|
|
393
397
|
DossierListService,
|
|
@@ -397,7 +401,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
397
401
|
DossierListPaginationService,
|
|
398
402
|
DossierListSearchService,
|
|
399
403
|
DossierListStatusService,
|
|
400
|
-
], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n fields: fields$ | async,\n documentItems: documentItems$ | async,\n noResultsMessage: noResultsMessage$ | async,\n searchFields: searchFields$ | async,\n schema: schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedDocumentIds: selectedDocumentIds$ | async,\n statuses: statuses$ | async,\n selectedStatuses: selectedStatuses$ | async,\n showStatusSelector: showStatusSelector$ | async,\n loaded:\n !loadingFields &&\n !loadingPagination &&\n !loadingSearchFields &&\n !loadingAssigneeFilter &&\n !loadingDocumentItems\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-dossier-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n ></valtimo-dossier-list-actions>\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changeTabModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n [defaultValues]=\"searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatuses]=\"obs.selectedStatuses\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n </valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"dossierList\"\n lockedTooltipTranslationKey=\"dossier.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'dossier.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"dossierListActions\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : dossierListActions\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs\n *ngIf=\"!visibleDossierTabs; else configuredTabs\"\n type=\"contained\"\n class=\"dossier-list-tabs\"\n >\n <cds-tab\n *ngFor=\"let tab of defaultTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs type=\"contained\" class=\"dossier-list-tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleDossierTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #loading\n ><valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div> </valtimo-carbon-list\n></ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-dossier-bulk-assign-modal\n [documentIds]=\"obs.selectedDocumentIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event, obs.selectedDocumentIds)\"\n ></valtimo-dossier-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changePageModal.confirm\"\n contentTranslationKey=\"dossier.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"dossier.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #changeTabModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changeTabModal.confirm\"\n contentTranslationKey=\"dossier.changeTabModal.content\"\n [outputOnConfirm]=\"tabChange$ | async\"\n [showModalSubject$]=\"showChangeTabModal$\"\n titleTranslationKey=\"dossier.changeTabModal.title\"\n (cancelEvent)=\"onChangeTabCancel()\"\n (confirmEvent)=\"onChangeTabConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #dossierListActions>\n <button\n *ngIf=\"canCreateDocument$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"
|
|
404
|
+
], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n fields: fields$ | async,\n documentItems: documentItems$ | async,\n noResultsMessage: noResultsMessage$ | async,\n searchFields: searchFields$ | async,\n schema: schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedDocumentIds: selectedDocumentIds$ | async,\n statuses: statuses$ | async,\n selectedStatuses: selectedStatuses$ | async,\n showStatusSelector: showStatusSelector$ | async,\n loaded:\n !loadingFields &&\n !loadingPagination &&\n !loadingSearchFields &&\n !loadingAssigneeFilter &&\n !loadingDocumentItems\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-dossier-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-dossier-list-actions>\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changeTabModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n [defaultValues]=\"searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatuses]=\"obs.selectedStatuses\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n </valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"dossierList\"\n lockedTooltipTranslationKey=\"dossier.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'dossier.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"dossierListActions\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : dossierListActions\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs\n *ngIf=\"!visibleDossierTabs; else configuredTabs\"\n type=\"contained\"\n class=\"dossier-list-tabs\"\n >\n <cds-tab\n *ngFor=\"let tab of defaultTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs type=\"contained\" class=\"dossier-list-tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleDossierTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #loading\n ><valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div> </valtimo-carbon-list\n></ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-dossier-bulk-assign-modal\n [documentIds]=\"obs.selectedDocumentIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event, obs.selectedDocumentIds)\"\n ></valtimo-dossier-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changePageModal.confirm\"\n contentTranslationKey=\"dossier.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"dossier.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #changeTabModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changeTabModal.confirm\"\n contentTranslationKey=\"dossier.changeTabModal.content\"\n [outputOnConfirm]=\"tabChange$ | async\"\n [showModalSubject$]=\"showChangeTabModal$\"\n titleTranslationKey=\"dossier.changeTabModal.title\"\n (cancelEvent)=\"onChangeTabCancel()\"\n (confirmEvent)=\"onChangeTabConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #dossierListActions>\n <button\n *ngIf=\"canCreateDocument$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startDossier()\"\n >\n {{ 'Start Dossier' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [".dossier-list-tabs cds-tab{display:none}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
401
405
|
}], ctorParameters: () => [{ type: i1.DossierListAssigneeService }, { type: i2.BreadcrumbService }, { type: i1.DossierBulkAssignService }, { type: i1.DossierColumnService }, { type: i3.ConfigService }, { type: i4.DocumentService }, { type: i1.DossierListService }, { type: i2.PageTitleService }, { type: i1.DossierListPaginationService }, { type: i1.DossierParameterService }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i1.DossierListSearchService }, { type: i6.TranslateService }, { type: i7.PermissionService }, { type: i1.DossierListStatusService }], propDecorators: { carbonList: [{
|
|
402
406
|
type: ViewChild,
|
|
403
407
|
args: [CarbonListComponent]
|
|
@@ -408,4 +412,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
408
412
|
type: ViewChild,
|
|
409
413
|
args: [Tabs]
|
|
410
414
|
}] } });
|
|
411
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJdEUsT0FBTyxFQUVMLG1CQUFtQixFQUduQix3QkFBd0IsRUFJeEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFXN0IsT0FBTyxFQUVMLGlDQUFpQyxFQUtqQyx1QkFBdUIsR0FFeEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQU0sSUFBSSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUVILEVBQUUsRUFFRixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLCtCQUErQixHQUNoQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLGtDQUFrQyxHQUNuQyxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFF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U0FBUyxJQUFJLEtBQUssY0FBYztnQkFDdkUsY0FBYztnQkFDZCxLQUFLLEVBQUUscUJBQXFCLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxRQUFRO2FBQzVELENBQ04sQ0FBQztJQUNKLENBQUM7OEdBMWlCVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrQ0FWcEI7WUFDVCxrQkFBa0I7WUFDbEIsb0JBQW9CO1lBQ3BCLDBCQUEwQjtZQUMxQix1QkFBdUI7WUFDdkIsNEJBQTRCO1lBQzVCLHdCQUF3QjtZQUN4Qix3QkFBd0I7U0FDekIsc0VBR1UsbUJBQW1CLHVGQUNuQiwyQkFBMkIsZ0ZBQzNCLElBQUksZ0RDM0dqQixvZ09Bd01BOzsyRkRoR2Esb0JBQW9CO2tCQWRoQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3dCQUN4Qix3QkFBd0I7cUJBQ3pCO21sQkFHK0IsVUFBVTtzQkFBekMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ1Usb0JBQW9CO3NCQUEzRCxTQUFTO3VCQUFDLDJCQUEyQjtnQkFDckIsYUFBYTtzQkFBN0IsU0FBUzt1QkFBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UGVybWlzc2lvblNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2FjY2Vzcy1jb250cm9sJztcbmltcG9ydCB7XG4gIEJyZWFkY3J1bWJTZXJ2aWNlLFxuICBDYXJib25MaXN0Q29tcG9uZW50LFxuICBDYXJib25MaXN0Tm9SZXN1bHRzTWVzc2FnZSxcbiAgQ2FyYm9uUGFnaW5hdGlvblNlbGVjdGlvbixcbiAgQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZLFxuICBMaXN0RmllbGQsXG4gIFBhZ2VUaXRsZVNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFZpZXdUeXBlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEFzc2lnbmVlRmlsdGVyLFxuICBDb25maWdTZXJ2aWNlLFxuICBEZWZpbml0aW9uQ29sdW1uLFxuICBEaXJlY3Rpb24sXG4gIERvc3NpZXJMaXN0VGFiLFxuICBTZWFyY2hGaWVsZCxcbiAgU2VhcmNoRmllbGRWYWx1ZXMsXG4gIFNvcnRTdGF0ZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7XG4gIEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwsXG4gIERvY3VtZW50LFxuICBEb2N1bWVudHMsXG4gIERvY3VtZW50U2VydmljZSxcbiAgSW50ZXJuYWxDYXNlU3RhdHVzLFxuICBJbnRlcm5hbENhc2VTdGF0dXNVdGlscyxcbiAgU3BlY2lmaWVkRG9jdW1lbnRzLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1RhYiwgVGFic30gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge2lzRXF1YWx9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlZmF1bHRJZkVtcHR5LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmb3JrSm9pbixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfRE9TU0lFUl9MSVNUX1RBQlMsXG4gIERPU1NJRVJfTElTVF9OT19SRVNVTFRTX01FU1NBR0UsXG4gIERPU1NJRVJfTElTVF9UQUJMRV9UUkFOU0xBVElPTlMsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBDQU5fQ1JFQVRFX0NBU0VfUEVSTUlTU0lPTixcbiAgQ0FOX1ZJRVdfQ0FTRV9QRVJNSVNTSU9OLFxuICBET1NTSUVSX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLFxufSBmcm9tICcuLi8uLi9wZXJtaXNzaW9ucyc7XG5pbXBvcnQge1xuICBEb3NzaWVyQnVsa0Fzc2lnblNlcnZpY2UsXG4gIERvc3NpZXJDb2x1bW5TZXJ2aWNlLFxuICBEb3NzaWVyTGlzdEFzc2lnbmVlU2VydmljZSxcbiAgRG9zc2llckxpc3RQYWdpbmF0aW9uU2VydmljZSxcbiAgRG9zc2llckxpc3RTZWFyY2hTZXJ2aWNlLFxuICBEb3NzaWVyTGlzdFNlcnZpY2UsXG4gIERvc3NpZXJMaXN0U3RhdHVzU2VydmljZSxcbiAgRG9zc2llclBhcmFtZXRlclNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7RG9zc2llckxpc3RBY3Rpb25zQ29tcG9uZW50fSBmcm9tICcuLi9kb3NzaWVyLWxpc3QtYWN0aW9ucy9kb3NzaWVyLWxpc3QtYWN0aW9ucy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRG9zc2llckxpc3RTZXJ2aWNlLFxuICAgIERvc3NpZXJDb2x1bW5TZXJ2aWNlLFxuICAgIERvc3NpZXJMaXN0QXNzaWduZWVTZXJ2aWNlLFxuICAgIERvc3NpZXJQYXJhbWV0ZXJTZXJ2aWNlLFxuICAgIERvc3NpZXJMaXN0UGFnaW5hdGlvblNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RTZWFyY2hTZXJ2aWNlLFxuICAgIERvc3NpZXJMaXN0U3RhdHVzU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoQ2FyYm9uTGlzdENvbXBvbmVudCkgY2FyYm9uTGlzdDogQ2FyYm9uTGlzdENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChEb3NzaWVyTGlzdEFjdGlvbnNDb21wb25lbnQpIGxpc3RBY3Rpb25zQ29tcG9uZW50OiBEb3NzaWVyTGlzdEFjdGlvbnNDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoVGFicykgdGFic0NvbXBvbmVudDogVGFicztcblxuICBwdWJsaWMgYWN0aXZlVGFiOiBEb3NzaWVyTGlzdFRhYiA9IG51bGw7XG4gIHB1YmxpYyBsb2FkaW5nRmllbGRzID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdQYWdpbmF0aW9uID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdTZWFyY2hGaWVsZHMgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ0Fzc2lnbmVlRmlsdGVyID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdEb2N1bWVudEl0ZW1zID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdTdGF0dXNlcyA9IHRydWU7XG4gIHB1YmxpYyBwYWdpbmF0aW9uITogUGFnaW5hdGlvbjtcbiAgcHVibGljIGNhbkhhdmVBc3NpZ25lZSE6IGJvb2xlYW47XG4gIHB1YmxpYyB2aXNpYmxlRG9zc2llclRhYnM6IEFycmF5PERvc3NpZXJMaXN0VGFiPiB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0VGFicyA9IERFRkFVTFRfRE9TU0lFUl9MSVNUX1RBQlM7XG4gIHB1YmxpYyByZWFkb25seSB0YWJsZVRyYW5zbGF0aW9ucyA9IERPU1NJRVJfTElTVF9UQUJMRV9UUkFOU0xBVElPTlM7XG5cbiAgcHVibGljIHJlYWRvbmx5IG5vUmVzdWx0c01lc3NhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25MaXN0Tm9SZXN1bHRzTWVzc2FnZT4oXG4gICAgRE9TU0lFUl9MSVNUX05PX1JFU1VMVFNfTUVTU0FHRVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0Fzc2lnbk1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0NoYW5nZVBhZ2VNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dDaGFuZ2VUYWJNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4gfCBudWxsPiA9XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmRvY3VtZW50U2VhcmNoRmllbGRzJC5waXBlKHRhcCgoKSA9PiAodGhpcy5sb2FkaW5nU2VhcmNoRmllbGRzID0gZmFsc2UpKSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c2VzJCA9IHRoaXMuc3RhdHVzU2VydmljZS5jYXNlU3RhdHVzZXMkLnBpcGUoXG4gICAgdGFwKCgpID0+ICh0aGlzLmxvYWRpbmdTdGF0dXNlcyA9IGZhbHNlKSlcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkU3RhdHVzZXMkID0gdGhpcy5zdGF0dXNTZXJ2aWNlLnNlbGVjdGVkQ2FzZVN0YXR1c2VzJDtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZERvY3VtZW50SWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2NoZW1hJCA9IHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnREZWZpbml0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICBtYXAoZG9jdW1lbnREZWZpbml0aW9uID0+IGRvY3VtZW50RGVmaW5pdGlvbj8uc2NoZW1hKSxcbiAgICB0YXAoc2NoZW1hID0+IHtcbiAgICAgIGlmIChzY2hlbWE/LnRpdGxlKSB7XG4gICAgICAgIHRoaXMucGFnZVRpdGxlU2VydmljZS5zZXRDdXN0b21QYWdlVGl0bGUoc2NoZW1hPy50aXRsZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhbkNyZWF0ZURvY3VtZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5yZXF1ZXN0UGVybWlzc2lvbihDQU5fQ1JFQVRFX0NBU0VfUEVSTUlTU0lPTiwge1xuICAgICAgICByZXNvdXJjZTogRE9TU0lFUl9ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRS5qc29uU2NoZW1hRG9jdW1lbnREZWZpbml0aW9uLFxuICAgICAgICBpZGVudGlmaWVyOiBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZpZWxkVmFsdWVzJCA9IHRoaXMucGFyYW1ldGVyU2VydmljZS5zZWFyY2hGaWVsZFZhbHVlcyQ7XG4gIHB1YmxpYyByZWFkb25seSBhc3NpZ25lZUZpbHRlciQ6IE9ic2VydmFibGU8QXNzaWduZWVGaWx0ZXI+ID1cbiAgICB0aGlzLmFzc2lnbmVlU2VydmljZS5hc3NpZ25lZUZpbHRlciQucGlwZShcbiAgICAgIHRhcChhc3NpZ25lZUZpbHRlciA9PiAodGhpcy5hY3RpdmVUYWIgPSBhc3NpZ25lZUZpbHRlciBhcyBEb3NzaWVyTGlzdFRhYikpXG4gICAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2luYXRpb25DaGFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25QYWdpbmF0aW9uU2VsZWN0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSB0YWJDaGFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb3NzaWVyTGlzdFRhYiB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdpbmF0aW9uJCA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnaW5hdGlvbiQucGlwZShcbiAgICB0YXAocGFnaW5hdGlvbiA9PiB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSBwYWdpbmF0aW9uO1xuICAgICAgdGhpcy5sb2FkaW5nUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIH0pXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc0VudkNvbHVtbkNvbmZpZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxpc3RTZXJ2aWNlLmhhc0VudkNvbHVtbkNvbmZpZyQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc0FwaUNvbHVtbkNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FuSGF2ZUFzc2lnbmVlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYXNzaWduZWVTZXJ2aWNlLmNhbkhhdmVBc3NpZ25lZSQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnMkOiBPYnNlcnZhYmxlPEFycmF5PERlZmluaXRpb25Db2x1bW4+PiA9XG4gICAgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5jb2x1bW5TZXJ2aWNlLmdldERlZmluaXRpb25Db2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICApLFxuICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuX2hhc0FwaUNvbHVtbkNvbmZpZyQubmV4dChyZXMuaGFzQXBpQ29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb2x1bW5zO1xuICAgICAgfSksXG4gICAgICB0YXAoY29sdW1ucyA9PiB7XG4gICAgICAgIHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdpbmF0aW9uKGNvbHVtbnMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1N0YXR1c1NlbGVjdG9yJCA9IHRoaXMuc3RhdHVzU2VydmljZS5zaG93U3RhdHVzU2VsZWN0b3IkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXR1c0ZpZWxkOiBMaXN0RmllbGQgPSB7XG4gICAgbGFiZWw6ICdkb2N1bWVudC5zdGF0dXMnLFxuICAgIGtleTogJ2ludGVybmFsU3RhdHVzJyxcbiAgICB2aWV3VHlwZTogVmlld1R5cGUuVEFHUyxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfTtcbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEZpZWxkPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9jYW5IYXZlQXNzaWduZWUkLFxuICAgIHRoaXMuX2NvbHVtbnMkLFxuICAgIHRoaXMuX2hhc0VudkNvbHVtbkNvbmZpZyQsXG4gICAgdGhpcy5faGFzQXBpQ29sdW1uQ29uZmlnJCxcbiAgICB0aGlzLnN0YXR1c2VzJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICB0YXAoKFtjYW5IYXZlQXNzaWduZWVdKSA9PiB7XG4gICAgICB0aGlzLmNhbkhhdmVBc3NpZ25lZSA9IGNhbkhhdmVBc3NpZ25lZTtcbiAgICB9KSxcbiAgICBtYXAoKFtjYW5IYXZlQXNzaWduZWUsIGNvbHVtbnMsIGhhc0VudkNvbmZpZywgaGFzQXBpQ29uZmlnLCBzdGF0dXNlc10pID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQXNzaWduZWVDb2x1bW5zID0gdGhpcy5hc3NpZ25lZVNlcnZpY2UuZmlsdGVyQXNzaWduZWVDb2x1bW5zKFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjYW5IYXZlQXNzaWduZWVcbiAgICAgICk7XG4gICAgICBjb25zdCBsaXN0RmllbGRzID0gdGhpcy5jb2x1bW5TZXJ2aWNlLm1hcERlZmluaXRpb25Db2x1bW5zVG9MaXN0RmllbGRzKFxuICAgICAgICBmaWx0ZXJlZEFzc2lnbmVlQ29sdW1ucyxcbiAgICAgICAgaGFzRW52Q29uZmlnLFxuICAgICAgICBoYXNBcGlDb25maWdcbiAgICAgICk7XG4gICAgICBjb25zdCBmaWVsZHNUb1JldHVybiA9IHRoaXMuYXNzaWduZWVTZXJ2aWNlLmFkZEFzc2lnbmVlTGlzdEZpZWxkKFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBsaXN0RmllbGRzLFxuICAgICAgICBjYW5IYXZlQXNzaWduZWVcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBzdGF0dXNlcy5zb21lKFxuICAgICAgICAoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+IHN0YXR1cy5rZXkgIT09IENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWVxuICAgICAgKSAmJiAhaGFzQXBpQ29uZmlnXG4gICAgICAgID8gWy4uLmZpZWxkc1RvUmV0dXJuLCB0aGlzLl9zdGF0dXNGaWVsZF1cbiAgICAgICAgOiBmaWVsZHNUb1JldHVybjtcbiAgICB9KSxcbiAgICB0YXAobGlzdEZpZWxkcyA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0TGlzdEZpZWxkID0gbGlzdEZpZWxkcy5maW5kKGZpZWxkID0+IGZpZWxkLmRlZmF1bHQpO1xuICAgICAgLy8gc2V0IGRlZmF1bHQgc29ydCBzdGF0ZSBpZiBubyBwYWdpbmF0aW9uIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHNvcnRpbmcgYXJlIGF2YWlsYWJsZVxuICAgICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLnF1ZXJ5UGFnaW5hdGlvblBhcmFtcyRcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShxdWVyeVBhZ2luYXRpb25QYXJhbXMgPT4ge1xuICAgICAgICAgIGlmIChkZWZhdWx0TGlzdEZpZWxkICYmICFxdWVyeVBhZ2luYXRpb25QYXJhbXM/LnNvcnQ/LmlzU29ydGluZykge1xuICAgICAgICAgICAgY29uc3Qgc29ydERpcmVjdGlvbiA9XG4gICAgICAgICAgICAgIHR5cGVvZiBkZWZhdWx0TGlzdEZpZWxkLmRlZmF1bHQgPT09ICdzdHJpbmcnID8gZGVmYXVsdExpc3RGaWVsZC5kZWZhdWx0IDogJ0RFU0MnO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zb3J0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgIGlzU29ydGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdGU6IHtuYW1lOiBkZWZhdWx0TGlzdEZpZWxkLmtleSwgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIGFzIERpcmVjdGlvbn0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmdGaWVsZHMgPSBmYWxzZTtcbiAgICB9KVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50U2VhcmNoUmVxdWVzdCQ6IE9ic2VydmFibGU8QWR2YW5jZWREb2N1bWVudFNlYXJjaFJlcXVlc3Q+ID1cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9wYWdpbmF0aW9uJCwgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtwYWdpbmF0aW9uXSkgPT4gISFwYWdpbmF0aW9uKSxcbiAgICAgIG1hcCgoW3BhZ2luYXRpb24sIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBwYWdpbmF0aW9uLnBhZ2UgLSAxO1xuXG4gICAgICAgIHJldHVybiBuZXcgQWR2YW5jZWREb2N1bWVudFNlYXJjaFJlcXVlc3RJbXBsKFxuICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgcGFnZSA+PSAwID8gcGFnZSA6IDAsXG4gICAgICAgICAgcGFnaW5hdGlvbi5zaXplLFxuICAgICAgICAgIHBhZ2luYXRpb24uc29ydFxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudEl0ZW1zJDogT2JzZXJ2YWJsZTxhbnlbXT4gPSB0aGlzLmxpc3RTZXJ2aWNlLmNoZWNrUmVmcmVzaCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLl9kb2N1bWVudFNlYXJjaFJlcXVlc3QkLFxuICAgICAgICB0aGlzLmFzc2lnbmVlRmlsdGVyJCxcbiAgICAgICAgdGhpcy5zZWFyY2hGaWVsZFZhbHVlcyQsXG4gICAgICAgIHRoaXMuc3RhdHVzU2VydmljZS5zZWxlY3RlZENhc2VTdGF0dXNlcyQsXG4gICAgICAgIHRoaXMubGlzdFNlcnZpY2UuZm9yY2VSZWZyZXNoJCxcbiAgICAgICAgdGhpcy5faGFzRW52Q29sdW1uQ29uZmlnJCxcbiAgICAgICAgdGhpcy5faGFzQXBpQ29sdW1uQ29uZmlnJCxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcbiAgICAgIChcbiAgICAgICAgW1xuICAgICAgICAgIHByZXZTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgIHByZXZBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICBwcmV2U2VhcmNoRmllbGRWYWx1ZXMsXG4gICAgICAgICAgcHJldlNlbGVjdGVkU3RhdHVzZXMsXG4gICAgICAgICAgcHJldkZvcmNlUmVmcmVzaCxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgIGN1cnJTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgIGN1cnJBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICBjdXJyU2VhcmNoRmllbGRWYWx1ZXMsXG4gICAgICAgICAgY3VyclNlbGVjdGVkU3RhdHVzZXMsXG4gICAgICAgICAgY3VyckZvcmNlUmVmcmVzaCxcbiAgICAgICAgXVxuICAgICAgKSA9PlxuICAgICAgICBpc0VxdWFsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnByZXZTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgYXNzaWduZWU6IHByZXZBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgIC4uLnByZXZTZWFyY2hGaWVsZFZhbHVlcyxcbiAgICAgICAgICAgIC4uLnByZXZTZWxlY3RlZFN0YXR1c2VzLm1hcCgoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+IHN0YXR1cy5rZXkpLFxuICAgICAgICAgICAgZm9yY2VSZWZyZXNoOiBwcmV2Rm9yY2VSZWZyZXNoLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uY3VyclNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICBhc3NpZ25lZTogY3VyckFzc2lnbmVlRmlsdGVyLFxuICAgICAgICAgICAgLi4uY3VyclNlYXJjaEZpZWxkVmFsdWVzLFxuICAgICAgICAgICAgLi4uY3VyclNlbGVjdGVkU3RhdHVzZXMubWFwKChzdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cykgPT4gc3RhdHVzLmtleSksXG4gICAgICAgICAgICBmb3JjZVJlZnJlc2g6IGN1cnJGb3JjZVJlZnJlc2gsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgKSxcbiAgICBzd2l0Y2hNYXAoXG4gICAgICAoW1xuICAgICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgICAgIGFzc2lnbmVlRmlsdGVyLFxuICAgICAgICBzZWFyY2hWYWx1ZXMsXG4gICAgICAgIHNlbGVjdGVkU3RhdHVzZXMsXG4gICAgICAgIF8sXG4gICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZyxcbiAgICAgICAgaGFzQXBpQ29sdW1uQ29uZmlnLFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCBvYnNFbnY6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBvZihoYXNFbnZDb2x1bW5Db25maWcpO1xuICAgICAgICBjb25zdCBvYnNBcGk6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBvZihoYXNBcGlDb2x1bW5Db25maWcpO1xuICAgICAgICBjb25zdCBzdGF0dXNLZXlzOiAoc3RyaW5nIHwgbnVsbClbXSA9IHNlbGVjdGVkU3RhdHVzZXMubWFwKChzdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cykgPT5cbiAgICAgICAgICBzdGF0dXMua2V5ID09PSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVkgPyBudWxsIDogc3RhdHVzLmtleVxuICAgICAgICApO1xuICAgICAgICBpZiAoKE9iamVjdC5rZXlzKHNlYXJjaFZhbHVlcykgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gZm9ya0pvaW4oe1xuICAgICAgICAgICAgZG9jdW1lbnRzOlxuICAgICAgICAgICAgICBoYXNFbnZDb2x1bW5Db25maWcgfHwgIWhhc0FwaUNvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgICAgID8gdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLm1hcFNlYXJjaFZhbHVlc1RvRmlsdGVycyhzZWFyY2hWYWx1ZXMpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNLZXlzXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRvY3VtZW50U2VydmljZS5nZXRTcGVjaWZpZWREb2N1bWVudHNTZWFyY2goXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbmVlRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UubWFwU2VhcmNoVmFsdWVzVG9GaWx0ZXJzKHNlYXJjaFZhbHVlcyksXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0tleXNcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBoYXNFbnZDb2x1bW5Db25maWc6IG9ic0VudixcbiAgICAgICAgICAgIGhhc0FwaUNvbHVtbkNvbmZpZzogb2JzQXBpLFxuICAgICAgICAgICAgaXNTZWFyY2hSZXN1bHQ6IG9mKHRydWUpLFxuICAgICAgICAgICAgc2VsZWN0ZWRTdGF0dXNlczogb2Yoc2VsZWN0ZWRTdGF0dXNlcyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oe1xuICAgICAgICAgIGRvY3VtZW50czpcbiAgICAgICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZyB8fCAhaGFzQXBpQ29sdW1uQ29uZmlnXG4gICAgICAgICAgICAgID8gdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgJ0FORCcsXG4gICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHN0YXR1c0tleXNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0U3BlY2lmaWVkRG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgJ0FORCcsXG4gICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHN0YXR1c0tleXNcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZzogb2JzRW52LFxuICAgICAgICAgIGhhc0FwaUNvbHVtbkNvbmZpZzogb2JzQXBpLFxuICAgICAgICAgIGlzU2VhcmNoUmVzdWx0OiBvZihmYWxzZSksXG4gICAgICAgICAgc2VsZWN0ZWRTdGF0dXNlczogb2Yoc2VsZWN0ZWRTdGF0dXNlcyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICksXG4gICAgc3dpdGNoTWFwKHJlcyA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9mKHJlcyksXG4gICAgICAgIGZvcmtKb2luKFxuICAgICAgICAgIHJlcy5kb2N1bWVudHMuY29udGVudC5tYXAoZG9jdW1lbnQgPT5cbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2VcbiAgICAgICAgICAgICAgLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9WSUVXX0NBU0VfUEVSTUlTU0lPTiwge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiBET1NTSUVSX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLmpzb25TY2hlbWFEb2N1bWVudCxcbiAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiBkb2N1bWVudC5pZCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICApXG4gICAgICAgICkucGlwZShkZWZhdWx0SWZFbXB0eShbXSBhcyBib29sZWFuW10pKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFtyZXMsIGRvY3VtZW50c0F1dGhvcml6YXRpb25dKSA9PiAoe1xuICAgICAgLi4ucmVzLFxuICAgICAgZG9jdW1lbnRzOiB7XG4gICAgICAgIC4uLnJlcy5kb2N1bWVudHMsXG4gICAgICAgIGNvbnRlbnQ6IHJlcy5kb2N1bWVudHMuY29udGVudC5tYXAoKGRvY3VtZW50LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAuLi5kb2N1bWVudCxcbiAgICAgICAgICBsb2NrZWQ6ICFkb2N1bWVudHNBdXRob3JpemF0aW9uW2luZGV4XSxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9KSksXG4gICAgbWFwKFxuICAgICAgKHJlczoge1xuICAgICAgICBkb2N1bWVudHM6IERvY3VtZW50cyB8IFNwZWNpZmllZERvY3VtZW50cztcbiAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnOiBib29sZWFuO1xuICAgICAgICBoYXNBcGlDb2x1bW5Db25maWc6IGJvb2xlYW47XG4gICAgICAgIGlzU2VhcmNoUmVzdWx0OiBib29sZWFuO1xuICAgICAgICBzZWxlY3RlZFN0YXR1c2VzOiBJbnRlcm5hbENhc2VTdGF0dXNbXTtcbiAgICAgIH0pID0+IHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRDb2xsZWN0aW9uU2l6ZShyZXMuZG9jdW1lbnRzKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jaGVja1BhZ2UocmVzLmRvY3VtZW50cyk7XG4gICAgICAgIHRoaXMudXBkYXRlTm9SZXN1bHRzTWVzc2FnZShyZXMuaXNTZWFyY2hSZXN1bHQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogdGhpcy5saXN0U2VydmljZS5tYXBEb2N1bWVudHMoXG4gICAgICAgICAgICByZXMuZG9jdW1lbnRzLFxuICAgICAgICAgICAgcmVzLmhhc0VudkNvbHVtbkNvbmZpZyxcbiAgICAgICAgICAgIHJlcy5oYXNBcGlDb2x1bW5Db25maWdcbiAgICAgICAgICApLFxuICAgICAgICAgIHN0YXR1c2VzOiByZXMuc2VsZWN0ZWRTdGF0dXNlcyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApLFxuICAgIG1hcChyZXMgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlcy5kYXRhKSkgcmV0dXJuIHJlcy5kYXRhO1xuXG4gICAgICByZXR1cm4gcmVzLmRhdGEubWFwKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXMuc3RhdHVzZXMuZmluZChcbiAgICAgICAgICAoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+XG4gICAgICAgICAgICBzdGF0dXMua2V5ID09PSBpdGVtLmludGVybmFsU3RhdHVzIHx8IHN0YXR1cy5rZXkgPT09IGl0ZW0uc3RhdHVzXG4gICAgICAgICk7XG4gICAgICAgIGlmICghc3RhdHVzKSByZXR1cm4gaXRlbTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgdGFnczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50OiBzdGF0dXMudGl0bGUsXG4gICAgICAgICAgICAgIHR5cGU6IEludGVybmFsQ2FzZVN0YXR1c1V0aWxzLmdldFRhZ1R5cGVGcm9tSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3Ioc3RhdHVzLmNvbG9yKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmdBc3NpZ25lZUZpbHRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkaW5nRG9jdW1lbnRJdGVtcyA9IGZhbHNlO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNEb2N1bWVudERlZmluaXRpb25OYW1lITogc3RyaW5nO1xuICBwcml2YXRlIF9kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXNzaWduZWVTZXJ2aWNlOiBEb3NzaWVyTGlzdEFzc2lnbmVlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFkY3J1bWJTZXJ2aWNlOiBCcmVhZGNydW1iU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1bGtBc3NpZ25TZXJ2aWNlOiBEb3NzaWVyQnVsa0Fzc2lnblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2x1bW5TZXJ2aWNlOiBEb3NzaWVyQ29sdW1uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RTZXJ2aWNlOiBEb3NzaWVyTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdlVGl0bGVTZXJ2aWNlOiBQYWdlVGl0bGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5hdGlvblNlcnZpY2U6IERvc3NpZXJMaXN0UGFnaW5hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJTZXJ2aWNlOiBEb3NzaWVyUGFyYW1ldGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoU2VydmljZTogRG9zc2llckxpc3RTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXR1c1NlcnZpY2U6IERvc3NpZXJMaXN0U3RhdHVzU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmlzaWJsZVRhYnMoKTtcbiAgICB0aGlzLm9wZW5Eb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnBhZ2VUaXRsZVNlcnZpY2UuZW5hYmxlUmVzZXQoKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHVibGljIHNlYXJjaChzZWFyY2hGaWVsZFZhbHVlczogU2VhcmNoRmllbGRWYWx1ZXMpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoKHNlYXJjaEZpZWxkVmFsdWVzKTtcbiAgfVxuXG4gIHB1YmxpYyByb3dDbGljayhpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgdGhpcy5icmVhZGNydW1iU2VydmljZS5jYWNoZVF1ZXJ5UGFyYW1zKFxuICAgICAgICBgL2Rvc3NpZXJzLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX1gLFxuICAgICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zXG4gICAgICApO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvZG9zc2llcnMvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9kb2N1bWVudC8ke2l0ZW0uaWR9YF0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRhYkNoYW5nZSh0YWI6IERvc3NpZXJMaXN0VGFiKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVRhYikge1xuICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gICAgICB0aGlzLnVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZVRhYi50b0xvd2VyQ2FzZSgpID09PSB0YWIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhcmJvbkxpc3QubW9kZWwuc2VsZWN0ZWRSb3dzQ291bnQoKSkge1xuICAgICAgdGhpcy5zaG93Q2hhbmdlVGFiTW9kYWwkLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLnRhYkNoYW5nZSQubmV4dCh0YWIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25DaGFuZ2VUYWJDb25maXJtKHRhYik7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VUYWJDYW5jZWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYnNDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2VGFiOiBUYWIgfCB1bmRlZmluZWQgPSB0aGlzLnRhYnNDb21wb25lbnQudGFicy5maW5kKFxuICAgICAgKHRhYjogVGFiKSA9PiB0YWIuaWQgPT09IHRoaXMuYWN0aXZlVGFiXG4gICAgKTtcblxuICAgIGlmICghcHJldlRhYikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGFic0NvbXBvbmVudC50YWJzLmZpbmQoKHRhYjogVGFiKSA9PiB0YWIuYWN0aXZlKS5hY3RpdmUgPSBmYWxzZTtcbiAgICBwcmV2VGFiLmFjdGl2ZSA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgcGFnZUNoYW5nZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYXJib25MaXN0Py5tb2RlbC5zZWxlY3RlZFJvd3NDb3VudCgpKSB7XG4gICAgICB0aGlzLnNob3dDaGFuZ2VQYWdlTW9kYWwkLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLnBhZ2luYXRpb25DaGFuZ2UkLm5leHQoe3BhZ2UsIHNpemU6IHRoaXMucGFnaW5hdGlvbi5zaXplfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnZUNoYW5nZShwYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdlU2l6ZUNoYW5nZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYXJib25MaXN0Py5tb2RlbC5zZWxlY3RlZFJvd3NDb3VudCgpKSB7XG4gICAgICB0aGlzLnNob3dDaGFuZ2VQYWdlTW9kYWwkLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLnBhZ2luYXRpb25DaGFuZ2UkLm5leHQoe3BhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLCBzaXplfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnZVNpemVDaGFuZ2Uoc2l6ZSk7XG4gIH1cblxuICBwdWJsaWMgc29ydENoYW5nZWQobmV3U29ydFN0YXRlOiBTb3J0U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNvcnRDaGFuZ2VkKG5ld1NvcnRTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uQ2hhbmdlVGFiQ29uZmlybSh0YWI6IERvc3NpZXJMaXN0VGFiKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgIHRoaXMudXBkYXRlTm9SZXN1bHRzTWVzc2FnZShmYWxzZSk7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdlKDEpO1xuICAgIHRoaXMuYXNzaWduZWVTZXJ2aWNlLnNldEFzc2lnbmVlRmlsdGVyKHRhYik7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Fzc2lnbk1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWREb2N1bWVudElkcyQubmV4dChcbiAgICAgIHRoaXMuY2FyYm9uTGlzdC5zZWxlY3RlZEl0ZW1zLm1hcCgoZG9jdW1lbnQ6IERvY3VtZW50KSA9PiBkb2N1bWVudC5pZClcbiAgICApO1xuICAgIHRoaXMuc2hvd0Fzc2lnbk1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VFdmVudChhc3NpZ25lZUlkOiBudWxsIHwgc3RyaW5nLCBkb2N1bWVudElkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dBc3NpZ25Nb2RhbCQubmV4dChmYWxzZSk7XG4gICAgaWYgKCFhc3NpZ25lZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5idWxrQXNzaWduU2VydmljZS5idWxrQXNzaWduKGFzc2lnbmVlSWQsIGRvY3VtZW50SWRzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5mb3JjZVJlZnJlc2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZVBhZ2VDb25maXJtKHBhZ2luYXRpb246IENhcmJvblBhZ2luYXRpb25TZWxlY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAocGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb24uc2l6ZSkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdlU2l6ZUNoYW5nZShwYWdpbmF0aW9uLnNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnZUNoYW5nZShwYWdpbmF0aW9uLnBhZ2UpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0RG9zc2llcigpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RBY3Rpb25zQ29tcG9uZW50LnN0YXJ0RG9zc2llcigpO1xuICB9XG5cbiAgcHVibGljIGZvcmNlUmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RTZXJ2aWNlLmZvcmNlUmVmcmVzaCgpO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0ZWRTdGF0dXNlc0NoYW5nZShzdGF0dXNlczogSW50ZXJuYWxDYXNlU3RhdHVzW10pOiB2b2lkIHtcbiAgICB0aGlzLnN0YXR1c1NlcnZpY2Uuc2V0U2VsZWN0ZWRTdGF0dXNlcyhzdGF0dXNlcyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Eb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocGFyYW1zOiBQYXJhbXMpID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIGZpbHRlcihkb2NEZWZOYW1lID0+ICEhZG9jRGVmTmFtZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0b25OYW1lID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSkge1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5jbGVhclBhcmFtZXRlcnMoKTtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuY2xlYXJTZWFyY2hGaWVsZFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IGRvY3VtZW50RGVmaW5pdG9uTmFtZTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jbGVhclBhZ2luYXRpb24oKTtcbiAgICAgICAgdGhpcy5hc3NpZ25lZVNlcnZpY2UucmVzZXRBc3NpZ25lZUZpbHRlcigpO1xuICAgICAgICB0aGlzLmxpc3RTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0b25OYW1lKTtcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmdGaWVsZHMgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1BhZ2luYXRpb24gPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1NlYXJjaEZpZWxkcyA9IHRydWU7XG4gICAgdGhpcy5sb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ0RvY3VtZW50SXRlbXMgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1N0YXR1c2VzID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlzaWJsZVRhYnMoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlRG9zc2llclRhYnMgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnPy52aXNpYmxlRG9zc2llckxpc3RUYWJzIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UoaXNTZWFyY2hSZXN1bHQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm5vUmVzdWx0c01lc3NhZ2UkLm5leHQoXG4gICAgICBpc1NlYXJjaFJlc3VsdFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZG9zc2llci5ub1Jlc3VsdHMuc2VhcmNoLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0LFxuICAgICAgICAgICAgdGl0bGU6ICdkb3NzaWVyLm5vUmVzdWx0cy5zZWFyY2gudGl0bGUnLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYGRvc3NpZXIubm9SZXN1bHRzLiR7dGhpcy5hY3RpdmVUYWIgPz8gJ0FMTCd9LmRlc2NyaXB0aW9uYCxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0LFxuICAgICAgICAgICAgdGl0bGU6IGBkb3NzaWVyLm5vUmVzdWx0cy4ke3RoaXMuYWN0aXZlVGFiID8/ICdBTEwnfS50aXRsZWAsXG4gICAgICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBmaWVsZHM6IGZpZWxkcyQgfCBhc3luYyxcbiAgICBkb2N1bWVudEl0ZW1zOiBkb2N1bWVudEl0ZW1zJCB8IGFzeW5jLFxuICAgIG5vUmVzdWx0c01lc3NhZ2U6IG5vUmVzdWx0c01lc3NhZ2UkIHwgYXN5bmMsXG4gICAgc2VhcmNoRmllbGRzOiBzZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgc2NoZW1hOiBzY2hlbWEkIHwgYXN5bmMsXG4gICAgc2hvd0Fzc2lnbk1vZGFsOiBzaG93QXNzaWduTW9kYWwkIHwgYXN5bmMsXG4gICAgc2VsZWN0ZWREb2N1bWVudElkczogc2VsZWN0ZWREb2N1bWVudElkcyQgfCBhc3luYyxcbiAgICBzdGF0dXNlczogc3RhdHVzZXMkIHwgYXN5bmMsXG4gICAgc2VsZWN0ZWRTdGF0dXNlczogc2VsZWN0ZWRTdGF0dXNlcyQgfCBhc3luYyxcbiAgICBzaG93U3RhdHVzU2VsZWN0b3I6IHNob3dTdGF0dXNTZWxlY3RvciQgfCBhc3luYyxcbiAgICBsb2FkZWQ6XG4gICAgICAhbG9hZGluZ0ZpZWxkcyAmJlxuICAgICAgIWxvYWRpbmdQYWdpbmF0aW9uICYmXG4gICAgICAhbG9hZGluZ1NlYXJjaEZpZWxkcyAmJlxuICAgICAgIWxvYWRpbmdBc3NpZ25lZUZpbHRlciAmJlxuICAgICAgIWxvYWRpbmdEb2N1bWVudEl0ZW1zXG4gIH0gYXMgb2JzXCJcbj5cbiAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudCBwdC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG1iLTVcIj5cbiAgICAgICAgPHZhbHRpbW8tZG9zc2llci1saXN0LWFjdGlvbnNcbiAgICAgICAgICBbbG9hZGluZ109XCIhb2JzLmxvYWRlZFwiXG4gICAgICAgICAgKGZvcm1GbG93Q29tcGxldGUpPVwiZm9yY2VSZWZyZXNoKClcIlxuICAgICAgICA+PC92YWx0aW1vLWRvc3NpZXItbGlzdC1hY3Rpb25zPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRzOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9icy5sb2FkZWQ7IGVsc2UgbG9hZGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0OyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidWxrQXNzaWduTW9kYWw7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hhbmdlUGFnZU1vZGFsXCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoYW5nZVRhYk1vZGFsXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2hGaWVsZHMgbGV0LW9icz1cIm9ic1wiPlxuICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgIDx2YWx0aW1vLXNlYXJjaC1maWVsZHNcbiAgICAgIFtzZWFyY2hGaWVsZHNdPVwib2JzLnNlYXJjaEZpZWxkc1wiXG4gICAgICAoZG9TZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdPVwiZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgfCBhc3luY1wiXG4gICAgICBbZGVmYXVsdFZhbHVlc109XCJzZWFyY2hGaWVsZFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICBbaW5wdXREaXNhYmxlZF09XCIhb2JzLmxvYWRlZFwiXG4gICAgICBbZXh0ZXJuYWxTZWFyY2hGaWVsZF09XCJvYnMuc2hvd1N0YXR1c1NlbGVjdG9yXCJcbiAgICA+XG4gICAgICA8dmFsdGltby1zdGF0dXMtc2VsZWN0b3JcbiAgICAgICAgKm5nSWY9XCJvYnMuc2hvd1N0YXR1c1NlbGVjdG9yXCJcbiAgICAgICAgW3N0YXR1c2VzXT1cIm9icy5zdGF0dXNlc1wiXG4gICAgICAgIFtzZWxlY3RlZFN0YXR1c2VzXT1cIm9icy5zZWxlY3RlZFN0YXR1c2VzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFvYnMubG9hZGVkXCJcbiAgICAgICAgKHNlbGVjdGVkU3RhdHVzZXNDaGFuZ2VFdmVudCk9XCJvblNlbGVjdGVkU3RhdHVzZXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC92YWx0aW1vLXN0YXR1cy1zZWxlY3Rvcj5cbiAgICA8L3ZhbHRpbW8tc2VhcmNoLWZpZWxkcz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3QgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgIFtmaWVsZHNdPVwib2JzLmZpZWxkc1wiXG4gICAgW2hlYWRlcl09XCJmYWxzZVwiXG4gICAgW2luaXRpYWxTb3J0U3RhdGVdPVwicGFnaW5hdGlvbi5zb3J0XCJcbiAgICBbaXRlbXNdPVwib2JzLmRvY3VtZW50SXRlbXNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIHBhZ2luYXRpb25JZGVudGlmaWVyPVwiZG9zc2llckxpc3RcIlxuICAgIGxvY2tlZFRvb2x0aXBUcmFuc2xhdGlvbktleT1cImRvc3NpZXIucm93TG9ja2VkXCJcbiAgICBbc2hvd1NlbGVjdGlvbkNvbHVtbl09XCJjYW5IYXZlQXNzaWduZWVcIlxuICAgIFt0YWJsZVRyYW5zbGF0aW9uc109XCJ0YWJsZVRyYW5zbGF0aW9uc1wiXG4gICAgKHBhZ2luYXRpb25DbGlja2VkKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHBhZ2luYXRpb25TZXQpPVwicGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHJvd0NsaWNrZWQpPVwicm93Q2xpY2soJGV2ZW50KVwiXG4gICAgKHNvcnRDaGFuZ2VkKT1cInNvcnRDaGFuZ2VkKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciBjYXJib25Ub29sYmFyQWN0aW9ucz5cbiAgICAgIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIChjbGljayk9XCJzaG93QXNzaWduTW9kYWwoKVwiPlxuICAgICAgICB7eyAnZG9zc2llci5idWxrQXNzaWduLmFzc2lnbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjYXJib25Ub29sYmFyQ29udGVudD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkb3NzaWVyTGlzdEFjdGlvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwib2JzLm5vUmVzdWx0c01lc3NhZ2UuaXNTZWFyY2hSZXN1bHQgPyBudWxsIDogZG9zc2llckxpc3RBY3Rpb25zXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCJvYnMubm9SZXN1bHRzTWVzc2FnZS5kZXNjcmlwdGlvbiB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdGl0bGVdPVwib2JzLm5vUmVzdWx0c01lc3NhZ2UudGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cblxuICAgIDxkaXYgdGFicyAqbmdJZj1cImNhbkhhdmVBc3NpZ25lZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC92YWx0aW1vLWNhcmJvbi1saXN0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWJzPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzaWduZWVGaWx0ZXIkIHwgYXN5bmMgYXMgYXNzaWduZWVGaWx0ZXJcIj5cbiAgICA8Y2RzLXRhYnNcbiAgICAgICpuZ0lmPVwiIXZpc2libGVEb3NzaWVyVGFiczsgZWxzZSBjb25maWd1cmVkVGFic1wiXG4gICAgICB0eXBlPVwiY29udGFpbmVkXCJcbiAgICAgIGNsYXNzPVwiZG9zc2llci1saXN0LXRhYnNcIlxuICAgID5cbiAgICAgIDxjZHMtdGFiXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgZGVmYXVsdFRhYnM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiXG4gICAgICAgIFthY3RpdmVdPVwiYXNzaWduZWVGaWx0ZXIgPT09IHRhYlwiXG4gICAgICAgIGhlYWRpbmc9XCJ7eyAnZG9zc2llci50YWJzLicgKyB0YWIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbaWRdPVwidGFiXCJcbiAgICAgICAgKHNlbGVjdGVkKT1cInRhYkNoYW5nZSh0YWIpXCJcbiAgICAgID48L2Nkcy10YWI+XG4gICAgPC9jZHMtdGFicz5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbmZpZ3VyZWRUYWJzPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzaWduZWVGaWx0ZXIkIHwgYXN5bmMgYXMgYXNzaWduZWVGaWx0ZXJcIj5cbiAgICA8Y2RzLXRhYnMgdHlwZT1cImNvbnRhaW5lZFwiIGNsYXNzPVwiZG9zc2llci1saXN0LXRhYnNcIj5cbiAgICAgIDxjZHMtdGFiXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdmlzaWJsZURvc3NpZXJUYWJzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIlxuICAgICAgICBbYWN0aXZlXT1cImFzc2lnbmVlRmlsdGVyID09PSB0YWJcIlxuICAgICAgICBoZWFkaW5nPVwie3sgJ2Rvc3NpZXIudGFicy4nICsgdGFiIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2lkXT1cInRhYlwiXG4gICAgICAgIChzZWxlY3RlZCk9XCJ0YWJDaGFuZ2UodGFiKVwiXG4gICAgICA+PC9jZHMtdGFiPlxuICAgIDwvY2RzLXRhYnM+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nXG4gID48dmFsdGltby1jYXJib24tbGlzdCBbbG9hZGluZ109XCJ0cnVlXCI+XG4gICAgPGRpdiB0YWJzICpuZ0lmPVwiY2FuSGF2ZUFzc2lnbmVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFic1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PiA8L3ZhbHRpbW8tY2FyYm9uLWxpc3Rcbj48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1bGtBc3NpZ25Nb2RhbCBsZXQtb2JzPVwib2JzXCI+XG4gIDx2YWx0aW1vLWRvc3NpZXItYnVsay1hc3NpZ24tbW9kYWxcbiAgICBbZG9jdW1lbnRJZHNdPVwib2JzLnNlbGVjdGVkRG9jdW1lbnRJZHNcIlxuICAgIFtvcGVuXT1cIm9icy5zaG93QXNzaWduTW9kYWxcIlxuICAgIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VFdmVudCgkZXZlbnQsIG9icy5zZWxlY3RlZERvY3VtZW50SWRzKVwiXG4gID48L3ZhbHRpbW8tZG9zc2llci1idWxrLWFzc2lnbi1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hhbmdlUGFnZU1vZGFsPlxuICA8dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VQYWdlTW9kYWwuY29uZmlybVwiXG4gICAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VQYWdlTW9kYWwuY29udGVudFwiXG4gICAgW291dHB1dE9uQ29uZmlybV09XCJwYWdpbmF0aW9uQ2hhbmdlJCB8IGFzeW5jXCJcbiAgICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0NoYW5nZVBhZ2VNb2RhbCRcIlxuICAgIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVBhZ2VNb2RhbC50aXRsZVwiXG4gICAgKGNvbmZpcm1FdmVudCk9XCJvbkNoYW5nZVBhZ2VDb25maXJtKCRldmVudClcIlxuICA+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hhbmdlVGFiTW9kYWw+XG4gIDx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICAgIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVRhYk1vZGFsLmNvbmZpcm1cIlxuICAgIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlVGFiTW9kYWwuY29udGVudFwiXG4gICAgW291dHB1dE9uQ29uZmlybV09XCJ0YWJDaGFuZ2UkIHwgYXN5bmNcIlxuICAgIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93Q2hhbmdlVGFiTW9kYWwkXCJcbiAgICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VUYWJNb2RhbC50aXRsZVwiXG4gICAgKGNhbmNlbEV2ZW50KT1cIm9uQ2hhbmdlVGFiQ2FuY2VsKClcIlxuICAgIChjb25maXJtRXZlbnQpPVwib25DaGFuZ2VUYWJDb25maXJtKCRldmVudClcIlxuICA+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZG9zc2llckxpc3RBY3Rpb25zPlxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJjYW5DcmVhdGVEb2N1bWVudCQgfCBhc3luY1wiXG4gICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgW2Rpc2FibGVkXT1cImxpc3RBY3Rpb25zQ29tcG9uZW50Py5kaXNhYmxlU3RhcnREb3NzaWVyQnV0dG9uJCB8IGFzeW5jXCJcbiAgICAoY2xpY2spPVwic3RhcnREb3NzaWVyKClcIlxuICA+XG4gICAge3sgJ1N0YXJ0IERvc3NpZXInIHwgdHJhbnNsYXRlIH19XG5cbiAgICA8c3ZnIGNkc0ljb249XCJhZGRcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
415
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJdEUsT0FBTyxFQUVMLG1CQUFtQixFQUduQix3QkFBd0IsRUFJeEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFXN0IsT0FBTyxFQUVMLGlDQUFpQyxFQUtqQyx1QkFBdUIsR0FFeEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQU0sSUFBSSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxFQUNkLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBRUYsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLCtCQUErQixFQUMvQiwrQkFBK0IsR0FDaEMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4QixrQ0FBa0MsR0FDbkMsTUFBTSxtQkFBbUIsQ0FBQztBQUMz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QXNCLENBQUMsY0FBdUI7UUFDcEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDekIsY0FBYztZQUNaLENBQUMsQ0FBQztnQkFDRSxXQUFXLEVBQUUsc0NBQXNDO2dCQUNuRCxjQUFjO2dCQUNkLEtBQUssRUFBRSxnQ0FBZ0M7YUFDeEM7WUFDSCxDQUFDLENBQUM7Z0JBQ0UsV0FBVyxFQUFFLHFCQUFxQixJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssY0FBYztnQkFDdkUsY0FBYztnQkFDZCxLQUFLLEVBQUUscUJBQXFCLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxRQUFRO2FBQzVELENBQ04sQ0FBQztJQUNKLENBQUM7K0dBL2lCVSxvQkFBb0I7bUdBQXBCLG9CQUFvQiwrQ0FWcEI7WUFDVCxrQkFBa0I7WUFDbEIsb0JBQW9CO1lBQ3BCLDBCQUEwQjtZQUMxQix1QkFBdUI7WUFDdkIsNEJBQTRCO1lBQzVCLHdCQUF3QjtZQUN4Qix3QkFBd0I7U0FDekIsc0VBR1UsbUJBQW1CLHVGQUNuQiwyQkFBMkIsZ0ZBQzNCLElBQUksZ0RDNUdqQixrak9BeU1BOzs0RkRoR2Esb0JBQW9CO2tCQWRoQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3dCQUN4Qix3QkFBd0I7cUJBQ3pCO21sQkFHK0IsVUFBVTtzQkFBekMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ1Usb0JBQW9CO3NCQUEzRCxTQUFTO3VCQUFDLDJCQUEyQjtnQkFDckIsYUFBYTtzQkFBN0IsU0FBUzt1QkFBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UGVybWlzc2lvblNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2FjY2Vzcy1jb250cm9sJztcbmltcG9ydCB7XG4gIEJyZWFkY3J1bWJTZXJ2aWNlLFxuICBDYXJib25MaXN0Q29tcG9uZW50LFxuICBDYXJib25MaXN0Tm9SZXN1bHRzTWVzc2FnZSxcbiAgQ2FyYm9uUGFnaW5hdGlvblNlbGVjdGlvbixcbiAgQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZLFxuICBMaXN0RmllbGQsXG4gIFBhZ2VUaXRsZVNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFZpZXdUeXBlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEFzc2lnbmVlRmlsdGVyLFxuICBDb25maWdTZXJ2aWNlLFxuICBEZWZpbml0aW9uQ29sdW1uLFxuICBEaXJlY3Rpb24sXG4gIERvc3NpZXJMaXN0VGFiLFxuICBTZWFyY2hGaWVsZCxcbiAgU2VhcmNoRmllbGRWYWx1ZXMsXG4gIFNvcnRTdGF0ZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7XG4gIEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwsXG4gIERvY3VtZW50LFxuICBEb2N1bWVudHMsXG4gIERvY3VtZW50U2VydmljZSxcbiAgSW50ZXJuYWxDYXNlU3RhdHVzLFxuICBJbnRlcm5hbENhc2VTdGF0dXNVdGlscyxcbiAgU3BlY2lmaWVkRG9jdW1lbnRzLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1RhYiwgVGFic30gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge2lzRXF1YWx9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGVmYXVsdElmRW1wdHksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZvcmtKb2luLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9ET1NTSUVSX0xJU1RfVEFCUyxcbiAgRE9TU0lFUl9MSVNUX05PX1JFU1VMVFNfTUVTU0FHRSxcbiAgRE9TU0lFUl9MSVNUX1RBQkxFX1RSQU5TTEFUSU9OUyxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIENBTl9DUkVBVEVfQ0FTRV9QRVJNSVNTSU9OLFxuICBDQU5fVklFV19DQVNFX1BFUk1JU1NJT04sXG4gIERPU1NJRVJfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UsXG59IGZyb20gJy4uLy4uL3Blcm1pc3Npb25zJztcbmltcG9ydCB7XG4gIERvc3NpZXJCdWxrQXNzaWduU2VydmljZSxcbiAgRG9zc2llckNvbHVtblNlcnZpY2UsXG4gIERvc3NpZXJMaXN0QXNzaWduZWVTZXJ2aWNlLFxuICBEb3NzaWVyTGlzdFBhZ2luYXRpb25TZXJ2aWNlLFxuICBEb3NzaWVyTGlzdFNlYXJjaFNlcnZpY2UsXG4gIERvc3NpZXJMaXN0U2VydmljZSxcbiAgRG9zc2llckxpc3RTdGF0dXNTZXJ2aWNlLFxuICBEb3NzaWVyUGFyYW1ldGVyU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtEb3NzaWVyTGlzdEFjdGlvbnNDb21wb25lbnR9IGZyb20gJy4uL2Rvc3NpZXItbGlzdC1hY3Rpb25zL2Rvc3NpZXItbGlzdC1hY3Rpb25zLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBEb3NzaWVyTGlzdFNlcnZpY2UsXG4gICAgRG9zc2llckNvbHVtblNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RBc3NpZ25lZVNlcnZpY2UsXG4gICAgRG9zc2llclBhcmFtZXRlclNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RQYWdpbmF0aW9uU2VydmljZSxcbiAgICBEb3NzaWVyTGlzdFNlYXJjaFNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RTdGF0dXNTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChDYXJib25MaXN0Q29tcG9uZW50KSBjYXJib25MaXN0OiBDYXJib25MaXN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKERvc3NpZXJMaXN0QWN0aW9uc0NvbXBvbmVudCkgbGlzdEFjdGlvbnNDb21wb25lbnQ6IERvc3NpZXJMaXN0QWN0aW9uc0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChUYWJzKSB0YWJzQ29tcG9uZW50OiBUYWJzO1xuXG4gIHB1YmxpYyBhY3RpdmVUYWI6IERvc3NpZXJMaXN0VGFiID0gbnVsbDtcbiAgcHVibGljIGxvYWRpbmdGaWVsZHMgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ1BhZ2luYXRpb24gPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ1NlYXJjaEZpZWxkcyA9IHRydWU7XG4gIHB1YmxpYyBsb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ0RvY3VtZW50SXRlbXMgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ1N0YXR1c2VzID0gdHJ1ZTtcbiAgcHVibGljIHBhZ2luYXRpb24hOiBQYWdpbmF0aW9uO1xuICBwdWJsaWMgY2FuSGF2ZUFzc2lnbmVlITogYm9vbGVhbjtcbiAgcHVibGljIHZpc2libGVEb3NzaWVyVGFiczogQXJyYXk8RG9zc2llckxpc3RUYWI+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUYWJzID0gREVGQVVMVF9ET1NTSUVSX0xJU1RfVEFCUztcbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlVHJhbnNsYXRpb25zID0gRE9TU0lFUl9MSVNUX1RBQkxFX1RSQU5TTEFUSU9OUztcblxuICBwdWJsaWMgcmVhZG9ubHkgbm9SZXN1bHRzTWVzc2FnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3ROb1Jlc3VsdHNNZXNzYWdlPihcbiAgICBET1NTSUVSX0xJU1RfTk9fUkVTVUxUU19NRVNTQUdFXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBkaXNhYmxlU3RhcnRCdXR0b24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93QXNzaWduTW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93Q2hhbmdlUGFnZU1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0NoYW5nZVRhYk1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWFyY2hGaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PFNlYXJjaEZpZWxkPiB8IG51bGw+ID1cbiAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZG9jdW1lbnRTZWFyY2hGaWVsZHMkLnBpcGUodGFwKCgpID0+ICh0aGlzLmxvYWRpbmdTZWFyY2hGaWVsZHMgPSBmYWxzZSkpKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzZXMkID0gdGhpcy5zdGF0dXNTZXJ2aWNlLmNhc2VTdGF0dXNlcyQucGlwZShcbiAgICB0YXAoKCkgPT4gKHRoaXMubG9hZGluZ1N0YXR1c2VzID0gZmFsc2UpKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRTdGF0dXNlcyQgPSB0aGlzLnN0YXR1c1NlcnZpY2Uuc2VsZWN0ZWRDYXNlU3RhdHVzZXMkO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJCA9IHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkRG9jdW1lbnRJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBzY2hlbWEkID0gdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudERlZmluaXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIG1hcChkb2N1bWVudERlZmluaXRpb24gPT4gZG9jdW1lbnREZWZpbml0aW9uPy5zY2hlbWEpLFxuICAgIHRhcChzY2hlbWEgPT4ge1xuICAgICAgaWYgKHNjaGVtYT8udGl0bGUpIHtcbiAgICAgICAgdGhpcy5wYWdlVGl0bGVTZXJ2aWNlLnNldEN1c3RvbVBhZ2VUaXRsZShzY2hlbWE/LnRpdGxlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuQ3JlYXRlRG9jdW1lbnQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9DUkVBVEVfQ0FTRV9QRVJNSVNTSU9OLCB7XG4gICAgICAgIHJlc291cmNlOiBET1NTSUVSX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLmpzb25TY2hlbWFEb2N1bWVudERlZmluaXRpb24sXG4gICAgICAgIGlkZW50aWZpZXI6IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoRmllbGRWYWx1ZXMkID0gdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLnNlYXJjaEZpZWxkVmFsdWVzJDtcbiAgcHVibGljIHJlYWRvbmx5IGFzc2lnbmVlRmlsdGVyJDogT2JzZXJ2YWJsZTxBc3NpZ25lZUZpbHRlcj4gPVxuICAgIHRoaXMuYXNzaWduZWVTZXJ2aWNlLmFzc2lnbmVlRmlsdGVyJC5waXBlKFxuICAgICAgdGFwKGFzc2lnbmVlRmlsdGVyID0+ICh0aGlzLmFjdGl2ZVRhYiA9IGFzc2lnbmVlRmlsdGVyIGFzIERvc3NpZXJMaXN0VGFiKSlcbiAgICApO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdGlvbkNoYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvblBhZ2luYXRpb25TZWxlY3Rpb24gfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHRhYkNoYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERvc3NpZXJMaXN0VGFiIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2luYXRpb24kID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdpbmF0aW9uJC5waXBlKFxuICAgIHRhcChwYWdpbmF0aW9uID0+IHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHBhZ2luYXRpb247XG4gICAgICB0aGlzLmxvYWRpbmdQYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgfSlcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFzRW52Q29sdW1uQ29uZmlnJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubGlzdFNlcnZpY2UuaGFzRW52Q29sdW1uQ29uZmlnJDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFzQXBpQ29sdW1uQ29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYW5IYXZlQXNzaWduZWUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5hc3NpZ25lZVNlcnZpY2UuY2FuSGF2ZUFzc2lnbmVlJDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1ucyQ6IE9ic2VydmFibGU8QXJyYXk8RGVmaW5pdGlvbkNvbHVtbj4+ID1cbiAgICB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICB0aGlzLmNvbHVtblNlcnZpY2UuZ2V0RGVmaW5pdGlvbkNvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICksXG4gICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgdGhpcy5faGFzQXBpQ29sdW1uQ29uZmlnJC5uZXh0KHJlcy5oYXNBcGlDb25maWcpO1xuICAgICAgICByZXR1cm4gcmVzLmNvbHVtbnM7XG4gICAgICB9KSxcbiAgICAgIHRhcChjb2x1bW5zID0+IHtcbiAgICAgICAgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldFBhZ2luYXRpb24oY29sdW1ucyk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93U3RhdHVzU2VsZWN0b3IkID0gdGhpcy5zdGF0dXNTZXJ2aWNlLnNob3dTdGF0dXNTZWxlY3RvciQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzRmllbGQ6IExpc3RGaWVsZCA9IHtcbiAgICBsYWJlbDogJ2RvY3VtZW50LnN0YXR1cycsXG4gICAga2V5OiAnaW50ZXJuYWxTdGF0dXMnLFxuICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5UQUdTLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9O1xuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0RmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2NhbkhhdmVBc3NpZ25lZSQsXG4gICAgdGhpcy5fY29sdW1ucyQsXG4gICAgdGhpcy5faGFzRW52Q29sdW1uQ29uZmlnJCxcbiAgICB0aGlzLl9oYXNBcGlDb2x1bW5Db25maWckLFxuICAgIHRoaXMuc3RhdHVzZXMkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIHRhcCgoW2NhbkhhdmVBc3NpZ25lZV0pID0+IHtcbiAgICAgIHRoaXMuY2FuSGF2ZUFzc2lnbmVlID0gY2FuSGF2ZUFzc2lnbmVlO1xuICAgIH0pLFxuICAgIG1hcCgoW2NhbkhhdmVBc3NpZ25lZSwgY29sdW1ucywgaGFzRW52Q29uZmlnLCBoYXNBcGlDb25maWcsIHN0YXR1c2VzXSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRBc3NpZ25lZUNvbHVtbnMgPSB0aGlzLmFzc2lnbmVlU2VydmljZS5maWx0ZXJBc3NpZ25lZUNvbHVtbnMoXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNhbkhhdmVBc3NpZ25lZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZHMgPSB0aGlzLmNvbHVtblNlcnZpY2UubWFwRGVmaW5pdGlvbkNvbHVtbnNUb0xpc3RGaWVsZHMoXG4gICAgICAgIGZpbHRlcmVkQXNzaWduZWVDb2x1bW5zLFxuICAgICAgICBoYXNFbnZDb25maWcsXG4gICAgICAgIGhhc0FwaUNvbmZpZ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGZpZWxkc1RvUmV0dXJuID0gdGhpcy5hc3NpZ25lZVNlcnZpY2UuYWRkQXNzaWduZWVMaXN0RmllbGQoXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGxpc3RGaWVsZHMsXG4gICAgICAgIGNhbkhhdmVBc3NpZ25lZVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHN0YXR1c2VzLnNvbWUoXG4gICAgICAgIChzdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cykgPT4gc3RhdHVzLmtleSAhPT0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZXG4gICAgICApICYmICFoYXNBcGlDb25maWdcbiAgICAgICAgPyBbLi4uZmllbGRzVG9SZXR1cm4sIHRoaXMuX3N0YXR1c0ZpZWxkXVxuICAgICAgICA6IGZpZWxkc1RvUmV0dXJuO1xuICAgIH0pLFxuICAgIHRhcChsaXN0RmllbGRzID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRMaXN0RmllbGQgPSBsaXN0RmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQuZGVmYXVsdCk7XG4gICAgICAvLyBzZXQgZGVmYXVsdCBzb3J0IHN0YXRlIGlmIG5vIHBhZ2luYXRpb24gcXVlcnkgcGFyYW1ldGVycyBmb3Igc29ydGluZyBhcmUgYXZhaWxhYmxlXG4gICAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UucXVlcnlQYWdpbmF0aW9uUGFyYW1zJFxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKHF1ZXJ5UGFnaW5hdGlvblBhcmFtcyA9PiB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRMaXN0RmllbGQgJiYgIXF1ZXJ5UGFnaW5hdGlvblBhcmFtcz8uc29ydD8uaXNTb3J0aW5nKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0RGlyZWN0aW9uID1cbiAgICAgICAgICAgICAgdHlwZW9mIGRlZmF1bHRMaXN0RmllbGQuZGVmYXVsdCA9PT0gJ3N0cmluZycgPyBkZWZhdWx0TGlzdEZpZWxkLmRlZmF1bHQgOiAnREVTQyc7XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNvcnRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgaXNTb3J0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0ZToge25hbWU6IGRlZmF1bHRMaXN0RmllbGQua2V5LCBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gYXMgRGlyZWN0aW9ufSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSksXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZ0ZpZWxkcyA9IGZhbHNlO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnRTZWFyY2hSZXF1ZXN0JDogT2JzZXJ2YWJsZTxBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdD4gPVxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3BhZ2luYXRpb24kLCB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW3BhZ2luYXRpb25dKSA9PiAhIXBhZ2luYXRpb24pLFxuICAgICAgbWFwKChbcGFnaW5hdGlvbiwgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IHBhZ2luYXRpb24ucGFnZSAtIDE7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwoXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICBwYWdlID49IDAgPyBwYWdlIDogMCxcbiAgICAgICAgICBwYWdpbmF0aW9uLnNpemUsXG4gICAgICAgICAgcGFnaW5hdGlvbi5zb3J0XG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50SXRlbXMkOiBPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMubGlzdFNlcnZpY2UuY2hlY2tSZWZyZXNoJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuX2RvY3VtZW50U2VhcmNoUmVxdWVzdCQsXG4gICAgICAgIHRoaXMuYXNzaWduZWVGaWx0ZXIkLFxuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkVmFsdWVzJCxcbiAgICAgICAgdGhpcy5zdGF0dXNTZXJ2aWNlLnNlbGVjdGVkQ2FzZVN0YXR1c2VzJCxcbiAgICAgICAgdGhpcy5saXN0U2VydmljZS5mb3JjZVJlZnJlc2gkLFxuICAgICAgICB0aGlzLl9oYXNFbnZDb2x1bW5Db25maWckLFxuICAgICAgICB0aGlzLl9oYXNBcGlDb2x1bW5Db25maWckLFxuICAgICAgXSkucGlwZShkZWJvdW5jZVRpbWUoNTApKVxuICAgICksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAoXG4gICAgICAgIFtcbiAgICAgICAgICBwcmV2U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICBwcmV2QXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgcHJldlNlYXJjaEZpZWxkVmFsdWVzLFxuICAgICAgICAgIHByZXZTZWxlY3RlZFN0YXR1c2VzLFxuICAgICAgICAgIHByZXZGb3JjZVJlZnJlc2gsXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICBjdXJyU2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICBjdXJyQXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgY3VyclNlYXJjaEZpZWxkVmFsdWVzLFxuICAgICAgICAgIGN1cnJTZWxlY3RlZFN0YXR1c2VzLFxuICAgICAgICAgIGN1cnJGb3JjZVJlZnJlc2gsXG4gICAgICAgIF1cbiAgICAgICkgPT5cbiAgICAgICAgaXNFcXVhbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5wcmV2U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgIGFzc2lnbmVlOiBwcmV2QXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAuLi5wcmV2U2VhcmNoRmllbGRWYWx1ZXMsXG4gICAgICAgICAgICAuLi5wcmV2U2VsZWN0ZWRTdGF0dXNlcy5tYXAoKHN0YXR1czogSW50ZXJuYWxDYXNlU3RhdHVzKSA9PiBzdGF0dXMua2V5KSxcbiAgICAgICAgICAgIGZvcmNlUmVmcmVzaDogcHJldkZvcmNlUmVmcmVzaCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmN1cnJTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgYXNzaWduZWU6IGN1cnJBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgIC4uLmN1cnJTZWFyY2hGaWVsZFZhbHVlcyxcbiAgICAgICAgICAgIC4uLmN1cnJTZWxlY3RlZFN0YXR1c2VzLm1hcCgoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+IHN0YXR1cy5rZXkpLFxuICAgICAgICAgICAgZm9yY2VSZWZyZXNoOiBjdXJyRm9yY2VSZWZyZXNoLFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICksXG4gICAgc3dpdGNoTWFwKFxuICAgICAgKFtcbiAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgc2VhcmNoVmFsdWVzLFxuICAgICAgICBzZWxlY3RlZFN0YXR1c2VzLFxuICAgICAgICBfLFxuICAgICAgICBoYXNFbnZDb2x1bW5Db25maWcsXG4gICAgICAgIGhhc0FwaUNvbHVtbkNvbmZpZyxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3Qgb2JzRW52OiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoaGFzRW52Q29sdW1uQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgb2JzQXBpOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoaGFzQXBpQ29sdW1uQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgc3RhdHVzS2V5czogKHN0cmluZyB8IG51bGwpW10gPSBzZWxlY3RlZFN0YXR1c2VzLm1hcCgoc3RhdHVzOiBJbnRlcm5hbENhc2VTdGF0dXMpID0+XG4gICAgICAgICAgc3RhdHVzLmtleSA9PT0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZID8gbnVsbCA6IHN0YXR1cy5rZXlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKChPYmplY3Qua2V5cyhzZWFyY2hWYWx1ZXMpIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgICAgIGRvY3VtZW50czpcbiAgICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnIHx8ICFoYXNBcGlDb2x1bW5Db25maWdcbiAgICAgICAgICAgICAgICA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5tYXBTZWFyY2hWYWx1ZXNUb0ZpbHRlcnMoc2VhcmNoVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzS2V5c1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0U3BlY2lmaWVkRG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLm1hcFNlYXJjaFZhbHVlc1RvRmlsdGVycyhzZWFyY2hWYWx1ZXMpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNLZXlzXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnOiBvYnNFbnYsXG4gICAgICAgICAgICBoYXNBcGlDb2x1bW5Db25maWc6IG9ic0FwaSxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0OiBvZih0cnVlKSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3RhdHVzZXM6IG9mKHNlbGVjdGVkU3RhdHVzZXMpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgICBkb2N1bWVudHM6XG4gICAgICAgICAgICBoYXNFbnZDb2x1bW5Db25maWcgfHwgIWhhc0FwaUNvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgICA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBzdGF0dXNLZXlzXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldFNwZWNpZmllZERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBzdGF0dXNLZXlzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICBoYXNFbnZDb2x1bW5Db25maWc6IG9ic0VudixcbiAgICAgICAgICBoYXNBcGlDb2x1bW5Db25maWc6IG9ic0FwaSxcbiAgICAgICAgICBpc1NlYXJjaFJlc3VsdDogb2YoZmFsc2UpLFxuICAgICAgICAgIHNlbGVjdGVkU3RhdHVzZXM6IG9mKHNlbGVjdGVkU3RhdHVzZXMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApLFxuICAgIHN3aXRjaE1hcChyZXMgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZihyZXMpLFxuICAgICAgICBmb3JrSm9pbihcbiAgICAgICAgICByZXMuZG9jdW1lbnRzLmNvbnRlbnQubWFwKGRvY3VtZW50ID0+XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlXG4gICAgICAgICAgICAgIC5yZXF1ZXN0UGVybWlzc2lvbihDQU5fVklFV19DQVNFX1BFUk1JU1NJT04sIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogRE9TU0lFUl9ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRS5qc29uU2NoZW1hRG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgaWRlbnRpZmllcjogZG9jdW1lbnQuaWQsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgKVxuICAgICAgICApLnBpcGUoZGVmYXVsdElmRW1wdHkoW10gYXMgYm9vbGVhbltdKSksXG4gICAgICBdKVxuICAgICksXG4gICAgbWFwKChbcmVzLCBkb2N1bWVudHNBdXRob3JpemF0aW9uXSkgPT4gKHtcbiAgICAgIC4uLnJlcyxcbiAgICAgIGRvY3VtZW50czoge1xuICAgICAgICAuLi5yZXMuZG9jdW1lbnRzLFxuICAgICAgICBjb250ZW50OiByZXMuZG9jdW1lbnRzLmNvbnRlbnQubWFwKChkb2N1bWVudCwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgLi4uZG9jdW1lbnQsXG4gICAgICAgICAgbG9ja2VkOiAhZG9jdW1lbnRzQXV0aG9yaXphdGlvbltpbmRleF0sXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfSkpLFxuICAgIG1hcChcbiAgICAgIChyZXM6IHtcbiAgICAgICAgZG9jdW1lbnRzOiBEb2N1bWVudHMgfCBTcGVjaWZpZWREb2N1bWVudHM7XG4gICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZzogYm9vbGVhbjtcbiAgICAgICAgaGFzQXBpQ29sdW1uQ29uZmlnOiBib29sZWFuO1xuICAgICAgICBpc1NlYXJjaFJlc3VsdDogYm9vbGVhbjtcbiAgICAgICAgc2VsZWN0ZWRTdGF0dXNlczogSW50ZXJuYWxDYXNlU3RhdHVzW107XG4gICAgICB9KSA9PiB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0Q29sbGVjdGlvblNpemUocmVzLmRvY3VtZW50cyk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2hlY2tQYWdlKHJlcy5kb2N1bWVudHMpO1xuICAgICAgICB0aGlzLnVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UocmVzLmlzU2VhcmNoUmVzdWx0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHRoaXMubGlzdFNlcnZpY2UubWFwRG9jdW1lbnRzKFxuICAgICAgICAgICAgcmVzLmRvY3VtZW50cyxcbiAgICAgICAgICAgIHJlcy5oYXNFbnZDb2x1bW5Db25maWcsXG4gICAgICAgICAgICByZXMuaGFzQXBpQ29sdW1uQ29uZmlnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdGF0dXNlczogcmVzLnNlbGVjdGVkU3RhdHVzZXMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKSxcbiAgICBtYXAocmVzID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXMuZGF0YSkpIHJldHVybiByZXMuZGF0YTtcblxuICAgICAgcmV0dXJuIHJlcy5kYXRhLm1hcChpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzLnN0YXR1c2VzLmZpbmQoXG4gICAgICAgICAgKHN0YXR1czogSW50ZXJuYWxDYXNlU3RhdHVzKSA9PlxuICAgICAgICAgICAgc3RhdHVzLmtleSA9PT0gaXRlbS5pbnRlcm5hbFN0YXR1cyB8fCBzdGF0dXMua2V5ID09PSBpdGVtLnN0YXR1c1xuICAgICAgICApO1xuICAgICAgICBpZiAoIXN0YXR1cykgcmV0dXJuIGl0ZW07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudDogc3RhdHVzLnRpdGxlLFxuICAgICAgICAgICAgICB0eXBlOiBJbnRlcm5hbENhc2VTdGF0dXNVdGlscy5nZXRUYWdUeXBlRnJvbUludGVybmFsQ2FzZVN0YXR1c0NvbG9yKHN0YXR1cy5jb2xvciksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMubG9hZGluZ0RvY3VtZW50SXRlbXMgPSBmYWxzZTtcbiAgICB9KVxuICApO1xuXG4gIHByaXZhdGUgX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSE6IHN0cmluZztcbiAgcHJpdmF0ZSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2lnbmVlU2VydmljZTogRG9zc2llckxpc3RBc3NpZ25lZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1iU2VydmljZTogQnJlYWRjcnVtYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBidWxrQXNzaWduU2VydmljZTogRG9zc2llckJ1bGtBc3NpZ25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29sdW1uU2VydmljZTogRG9zc2llckNvbHVtblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0U2VydmljZTogRG9zc2llckxpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVRpdGxlU2VydmljZTogUGFnZVRpdGxlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRpb25TZXJ2aWNlOiBEb3NzaWVyTGlzdFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyU2VydmljZTogRG9zc2llclBhcmFtZXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFNlcnZpY2U6IERvc3NpZXJMaXN0U2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0dXNTZXJ2aWNlOiBEb3NzaWVyTGlzdFN0YXR1c1NlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZpc2libGVUYWJzKCk7XG4gICAgdGhpcy5vcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wYWdlVGl0bGVTZXJ2aWNlLmVuYWJsZVJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goc2VhcmNoRmllbGRWYWx1ZXM6IFNlYXJjaEZpZWxkVmFsdWVzKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaChzZWFyY2hGaWVsZFZhbHVlcyk7XG4gIH1cblxuICBwdWJsaWMgcm93Q2xpY2soaXRlbTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIHRoaXMuYnJlYWRjcnVtYlNlcnZpY2UuY2FjaGVRdWVyeVBhcmFtcyhcbiAgICAgICAgYC9kb3NzaWVycy8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YCxcbiAgICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1xuICAgICAgKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2Rvc3NpZXJzLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vZG9jdW1lbnQvJHtpdGVtLmlkfWBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB0YWJDaGFuZ2UodGFiOiBEb3NzaWVyTGlzdFRhYik6IHZvaWQge1xuICAgIGlmICghdGhpcy5hY3RpdmVUYWIpIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgICAgdGhpcy51cGRhdGVOb1Jlc3VsdHNNZXNzYWdlKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVUYWIudG9Mb3dlckNhc2UoKSA9PT0gdGFiLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYXJib25MaXN0Lm1vZGVsLnNlbGVjdGVkUm93c0NvdW50KCkpIHtcbiAgICAgIHRoaXMuc2hvd0NoYW5nZVRhYk1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy50YWJDaGFuZ2UkLm5leHQodGFiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlVGFiQ29uZmlybSh0YWIpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlVGFiQ2FuY2VsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJzQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldlRhYjogVGFiIHwgdW5kZWZpbmVkID0gdGhpcy50YWJzQ29tcG9uZW50LnRhYnMuZmluZChcbiAgICAgICh0YWI6IFRhYikgPT4gdGFiLmlkID09PSB0aGlzLmFjdGl2ZVRhYlxuICAgICk7XG5cbiAgICBpZiAoIXByZXZUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRhYnNDb21wb25lbnQudGFicy5maW5kKCh0YWI6IFRhYikgPT4gdGFiLmFjdGl2ZSkuYWN0aXZlID0gZmFsc2U7XG4gICAgcHJldlRhYi5hY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FyYm9uTGlzdD8ubW9kZWwuc2VsZWN0ZWRSb3dzQ291bnQoKSkge1xuICAgICAgdGhpcy5zaG93Q2hhbmdlUGFnZU1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlJC5uZXh0KHtwYWdlLCBzaXplOiB0aGlzLnBhZ2luYXRpb24uc2l6ZX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VDaGFuZ2UocGFnZSk7XG4gIH1cblxuICBwdWJsaWMgcGFnZVNpemVDaGFuZ2Uoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FyYm9uTGlzdD8ubW9kZWwuc2VsZWN0ZWRSb3dzQ291bnQoKSkge1xuICAgICAgdGhpcy5zaG93Q2hhbmdlUGFnZU1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlJC5uZXh0KHtwYWdlOiB0aGlzLnBhZ2luYXRpb24ucGFnZSwgc2l6ZX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VTaXplQ2hhbmdlKHNpemUpO1xuICB9XG5cbiAgcHVibGljIHNvcnRDaGFuZ2VkKG5ld1NvcnRTdGF0ZTogU29ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zb3J0Q2hhbmdlZChuZXdTb3J0U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZVRhYkNvbmZpcm0odGFiOiBEb3NzaWVyTGlzdFRhYik6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZ0Fzc2lnbmVlRmlsdGVyID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICB0aGlzLnVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UoZmFsc2UpO1xuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZSgxKTtcbiAgICB0aGlzLmFzc2lnbmVlU2VydmljZS5zZXRBc3NpZ25lZUZpbHRlcih0YWIpO1xuICB9XG5cbiAgcHVibGljIHNob3dBc3NpZ25Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRG9jdW1lbnRJZHMkLm5leHQoXG4gICAgICB0aGlzLmNhcmJvbkxpc3Quc2VsZWN0ZWRJdGVtcy5tYXAoKGRvY3VtZW50OiBEb2N1bWVudCkgPT4gZG9jdW1lbnQuaWQpXG4gICAgKTtcbiAgICB0aGlzLnNob3dBc3NpZ25Nb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlRXZlbnQoYXNzaWduZWVJZDogbnVsbCB8IHN0cmluZywgZG9jdW1lbnRJZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QXNzaWduTW9kYWwkLm5leHQoZmFsc2UpO1xuICAgIGlmICghYXNzaWduZWVJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnVsa0Fzc2lnblNlcnZpY2UuYnVsa0Fzc2lnbihhc3NpZ25lZUlkLCBkb2N1bWVudElkcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZm9yY2VSZWZyZXNoKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VQYWdlQ29uZmlybShwYWdpbmF0aW9uOiBDYXJib25QYWdpbmF0aW9uU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKHBhZ2luYXRpb24uc2l6ZSAhPT0gdGhpcy5wYWdpbmF0aW9uLnNpemUpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnZVNpemVDaGFuZ2UocGFnaW5hdGlvbi5zaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VDaGFuZ2UocGFnaW5hdGlvbi5wYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERvc3NpZXIoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0QWN0aW9uc0NvbXBvbmVudC5zdGFydERvc3NpZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JjZVJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5saXN0U2VydmljZS5mb3JjZVJlZnJlc2goKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGVkU3RhdHVzZXNDaGFuZ2Uoc3RhdHVzZXM6IEludGVybmFsQ2FzZVN0YXR1c1tdKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNTZXJ2aWNlLnNldFNlbGVjdGVkU3RhdHVzZXMoc3RhdHVzZXMpO1xuICB9XG5cbiAgcHVibGljIG9uU3RhcnRCdXR0b25EaXNhYmxlRXZlbnQoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVTdGFydEJ1dHRvbiQubmV4dChkaXNhYmxlZCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Eb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocGFyYW1zOiBQYXJhbXMpID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIGZpbHRlcihkb2NEZWZOYW1lID0+ICEhZG9jRGVmTmFtZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0b25OYW1lID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSkge1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5jbGVhclBhcmFtZXRlcnMoKTtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuY2xlYXJTZWFyY2hGaWVsZFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IGRvY3VtZW50RGVmaW5pdG9uTmFtZTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jbGVhclBhZ2luYXRpb24oKTtcbiAgICAgICAgdGhpcy5hc3NpZ25lZVNlcnZpY2UucmVzZXRBc3NpZ25lZUZpbHRlcigpO1xuICAgICAgICB0aGlzLmxpc3RTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0b25OYW1lKTtcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmdGaWVsZHMgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1BhZ2luYXRpb24gPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1NlYXJjaEZpZWxkcyA9IHRydWU7XG4gICAgdGhpcy5sb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ0RvY3VtZW50SXRlbXMgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1N0YXR1c2VzID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlzaWJsZVRhYnMoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlRG9zc2llclRhYnMgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnPy52aXNpYmxlRG9zc2llckxpc3RUYWJzIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UoaXNTZWFyY2hSZXN1bHQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm5vUmVzdWx0c01lc3NhZ2UkLm5leHQoXG4gICAgICBpc1NlYXJjaFJlc3VsdFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZG9zc2llci5ub1Jlc3VsdHMuc2VhcmNoLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0LFxuICAgICAgICAgICAgdGl0bGU6ICdkb3NzaWVyLm5vUmVzdWx0cy5zZWFyY2gudGl0bGUnLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYGRvc3NpZXIubm9SZXN1bHRzLiR7dGhpcy5hY3RpdmVUYWIgPz8gJ0FMTCd9LmRlc2NyaXB0aW9uYCxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0LFxuICAgICAgICAgICAgdGl0bGU6IGBkb3NzaWVyLm5vUmVzdWx0cy4ke3RoaXMuYWN0aXZlVGFiID8/ICdBTEwnfS50aXRsZWAsXG4gICAgICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBmaWVsZHM6IGZpZWxkcyQgfCBhc3luYyxcbiAgICBkb2N1bWVudEl0ZW1zOiBkb2N1bWVudEl0ZW1zJCB8IGFzeW5jLFxuICAgIG5vUmVzdWx0c01lc3NhZ2U6IG5vUmVzdWx0c01lc3NhZ2UkIHwgYXN5bmMsXG4gICAgc2VhcmNoRmllbGRzOiBzZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgc2NoZW1hOiBzY2hlbWEkIHwgYXN5bmMsXG4gICAgc2hvd0Fzc2lnbk1vZGFsOiBzaG93QXNzaWduTW9kYWwkIHwgYXN5bmMsXG4gICAgc2VsZWN0ZWREb2N1bWVudElkczogc2VsZWN0ZWREb2N1bWVudElkcyQgfCBhc3luYyxcbiAgICBzdGF0dXNlczogc3RhdHVzZXMkIHwgYXN5bmMsXG4gICAgc2VsZWN0ZWRTdGF0dXNlczogc2VsZWN0ZWRTdGF0dXNlcyQgfCBhc3luYyxcbiAgICBzaG93U3RhdHVzU2VsZWN0b3I6IHNob3dTdGF0dXNTZWxlY3RvciQgfCBhc3luYyxcbiAgICBsb2FkZWQ6XG4gICAgICAhbG9hZGluZ0ZpZWxkcyAmJlxuICAgICAgIWxvYWRpbmdQYWdpbmF0aW9uICYmXG4gICAgICAhbG9hZGluZ1NlYXJjaEZpZWxkcyAmJlxuICAgICAgIWxvYWRpbmdBc3NpZ25lZUZpbHRlciAmJlxuICAgICAgIWxvYWRpbmdEb2N1bWVudEl0ZW1zXG4gIH0gYXMgb2JzXCJcbj5cbiAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudCBwdC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG1iLTVcIj5cbiAgICAgICAgPHZhbHRpbW8tZG9zc2llci1saXN0LWFjdGlvbnNcbiAgICAgICAgICBbbG9hZGluZ109XCIhb2JzLmxvYWRlZFwiXG4gICAgICAgICAgKGZvcm1GbG93Q29tcGxldGUpPVwiZm9yY2VSZWZyZXNoKClcIlxuICAgICAgICAgIChzdGFydEJ1dHRvbkRpc2FibGVFdmVudCk9XCJvblN0YXJ0QnV0dG9uRGlzYWJsZUV2ZW50KCRldmVudClcIlxuICAgICAgICA+PC92YWx0aW1vLWRvc3NpZXItbGlzdC1hY3Rpb25zPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRzOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9icy5sb2FkZWQ7IGVsc2UgbG9hZGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0OyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidWxrQXNzaWduTW9kYWw7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hhbmdlUGFnZU1vZGFsXCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoYW5nZVRhYk1vZGFsXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2hGaWVsZHMgbGV0LW9icz1cIm9ic1wiPlxuICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgIDx2YWx0aW1vLXNlYXJjaC1maWVsZHNcbiAgICAgIFtzZWFyY2hGaWVsZHNdPVwib2JzLnNlYXJjaEZpZWxkc1wiXG4gICAgICAoZG9TZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdPVwiZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgfCBhc3luY1wiXG4gICAgICBbZGVmYXVsdFZhbHVlc109XCJzZWFyY2hGaWVsZFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICBbaW5wdXREaXNhYmxlZF09XCIhb2JzLmxvYWRlZFwiXG4gICAgICBbZXh0ZXJuYWxTZWFyY2hGaWVsZF09XCJvYnMuc2hvd1N0YXR1c1NlbGVjdG9yXCJcbiAgICA+XG4gICAgICA8dmFsdGltby1zdGF0dXMtc2VsZWN0b3JcbiAgICAgICAgKm5nSWY9XCJvYnMuc2hvd1N0YXR1c1NlbGVjdG9yXCJcbiAgICAgICAgW3N0YXR1c2VzXT1cIm9icy5zdGF0dXNlc1wiXG4gICAgICAgIFtzZWxlY3RlZFN0YXR1c2VzXT1cIm9icy5zZWxlY3RlZFN0YXR1c2VzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFvYnMubG9hZGVkXCJcbiAgICAgICAgKHNlbGVjdGVkU3RhdHVzZXNDaGFuZ2VFdmVudCk9XCJvblNlbGVjdGVkU3RhdHVzZXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC92YWx0aW1vLXN0YXR1cy1zZWxlY3Rvcj5cbiAgICA8L3ZhbHRpbW8tc2VhcmNoLWZpZWxkcz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3QgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgIFtmaWVsZHNdPVwib2JzLmZpZWxkc1wiXG4gICAgW2hlYWRlcl09XCJmYWxzZVwiXG4gICAgW2luaXRpYWxTb3J0U3RhdGVdPVwicGFnaW5hdGlvbi5zb3J0XCJcbiAgICBbaXRlbXNdPVwib2JzLmRvY3VtZW50SXRlbXNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIHBhZ2luYXRpb25JZGVudGlmaWVyPVwiZG9zc2llckxpc3RcIlxuICAgIGxvY2tlZFRvb2x0aXBUcmFuc2xhdGlvbktleT1cImRvc3NpZXIucm93TG9ja2VkXCJcbiAgICBbc2hvd1NlbGVjdGlvbkNvbHVtbl09XCJjYW5IYXZlQXNzaWduZWVcIlxuICAgIFt0YWJsZVRyYW5zbGF0aW9uc109XCJ0YWJsZVRyYW5zbGF0aW9uc1wiXG4gICAgKHBhZ2luYXRpb25DbGlja2VkKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHBhZ2luYXRpb25TZXQpPVwicGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHJvd0NsaWNrZWQpPVwicm93Q2xpY2soJGV2ZW50KVwiXG4gICAgKHNvcnRDaGFuZ2VkKT1cInNvcnRDaGFuZ2VkKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciBjYXJib25Ub29sYmFyQWN0aW9ucz5cbiAgICAgIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIChjbGljayk9XCJzaG93QXNzaWduTW9kYWwoKVwiPlxuICAgICAgICB7eyAnZG9zc2llci5idWxrQXNzaWduLmFzc2lnbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjYXJib25Ub29sYmFyQ29udGVudD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkb3NzaWVyTGlzdEFjdGlvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwib2JzLm5vUmVzdWx0c01lc3NhZ2UuaXNTZWFyY2hSZXN1bHQgPyBudWxsIDogZG9zc2llckxpc3RBY3Rpb25zXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCJvYnMubm9SZXN1bHRzTWVzc2FnZS5kZXNjcmlwdGlvbiB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdGl0bGVdPVwib2JzLm5vUmVzdWx0c01lc3NhZ2UudGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cblxuICAgIDxkaXYgdGFicyAqbmdJZj1cImNhbkhhdmVBc3NpZ25lZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC92YWx0aW1vLWNhcmJvbi1saXN0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWJzPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzaWduZWVGaWx0ZXIkIHwgYXN5bmMgYXMgYXNzaWduZWVGaWx0ZXJcIj5cbiAgICA8Y2RzLXRhYnNcbiAgICAgICpuZ0lmPVwiIXZpc2libGVEb3NzaWVyVGFiczsgZWxzZSBjb25maWd1cmVkVGFic1wiXG4gICAgICB0eXBlPVwiY29udGFpbmVkXCJcbiAgICAgIGNsYXNzPVwiZG9zc2llci1saXN0LXRhYnNcIlxuICAgID5cbiAgICAgIDxjZHMtdGFiXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgZGVmYXVsdFRhYnM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiXG4gICAgICAgIFthY3RpdmVdPVwiYXNzaWduZWVGaWx0ZXIgPT09IHRhYlwiXG4gICAgICAgIGhlYWRpbmc9XCJ7eyAnZG9zc2llci50YWJzLicgKyB0YWIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbaWRdPVwidGFiXCJcbiAgICAgICAgKHNlbGVjdGVkKT1cInRhYkNoYW5nZSh0YWIpXCJcbiAgICAgID48L2Nkcy10YWI+XG4gICAgPC9jZHMtdGFicz5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbmZpZ3VyZWRUYWJzPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzaWduZWVGaWx0ZXIkIHwgYXN5bmMgYXMgYXNzaWduZWVGaWx0ZXJcIj5cbiAgICA8Y2RzLXRhYnMgdHlwZT1cImNvbnRhaW5lZFwiIGNsYXNzPVwiZG9zc2llci1saXN0LXRhYnNcIj5cbiAgICAgIDxjZHMtdGFiXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdmlzaWJsZURvc3NpZXJUYWJzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIlxuICAgICAgICBbYWN0aXZlXT1cImFzc2lnbmVlRmlsdGVyID09PSB0YWJcIlxuICAgICAgICBoZWFkaW5nPVwie3sgJ2Rvc3NpZXIudGFicy4nICsgdGFiIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2lkXT1cInRhYlwiXG4gICAgICAgIChzZWxlY3RlZCk9XCJ0YWJDaGFuZ2UodGFiKVwiXG4gICAgICA+PC9jZHMtdGFiPlxuICAgIDwvY2RzLXRhYnM+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nXG4gID48dmFsdGltby1jYXJib24tbGlzdCBbbG9hZGluZ109XCJ0cnVlXCI+XG4gICAgPGRpdiB0YWJzICpuZ0lmPVwiY2FuSGF2ZUFzc2lnbmVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFic1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PiA8L3ZhbHRpbW8tY2FyYm9uLWxpc3Rcbj48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1bGtBc3NpZ25Nb2RhbCBsZXQtb2JzPVwib2JzXCI+XG4gIDx2YWx0aW1vLWRvc3NpZXItYnVsay1hc3NpZ24tbW9kYWxcbiAgICBbZG9jdW1lbnRJZHNdPVwib2JzLnNlbGVjdGVkRG9jdW1lbnRJZHNcIlxuICAgIFtvcGVuXT1cIm9icy5zaG93QXNzaWduTW9kYWxcIlxuICAgIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VFdmVudCgkZXZlbnQsIG9icy5zZWxlY3RlZERvY3VtZW50SWRzKVwiXG4gID48L3ZhbHRpbW8tZG9zc2llci1idWxrLWFzc2lnbi1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hhbmdlUGFnZU1vZGFsPlxuICA8dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VQYWdlTW9kYWwuY29uZmlybVwiXG4gICAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VQYWdlTW9kYWwuY29udGVudFwiXG4gICAgW291dHB1dE9uQ29uZmlybV09XCJwYWdpbmF0aW9uQ2hhbmdlJCB8IGFzeW5jXCJcbiAgICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0NoYW5nZVBhZ2VNb2RhbCRcIlxuICAgIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVBhZ2VNb2RhbC50aXRsZVwiXG4gICAgKGNvbmZpcm1FdmVudCk9XCJvbkNoYW5nZVBhZ2VDb25maXJtKCRldmVudClcIlxuICA+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hhbmdlVGFiTW9kYWw+XG4gIDx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICAgIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVRhYk1vZGFsLmNvbmZpcm1cIlxuICAgIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlVGFiTW9kYWwuY29udGVudFwiXG4gICAgW291dHB1dE9uQ29uZmlybV09XCJ0YWJDaGFuZ2UkIHwgYXN5bmNcIlxuICAgIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93Q2hhbmdlVGFiTW9kYWwkXCJcbiAgICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VUYWJNb2RhbC50aXRsZVwiXG4gICAgKGNhbmNlbEV2ZW50KT1cIm9uQ2hhbmdlVGFiQ2FuY2VsKClcIlxuICAgIChjb25maXJtRXZlbnQpPVwib25DaGFuZ2VUYWJDb25maXJtKCRldmVudClcIlxuICA+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZG9zc2llckxpc3RBY3Rpb25zPlxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJjYW5DcmVhdGVEb2N1bWVudCQgfCBhc3luY1wiXG4gICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVTdGFydEJ1dHRvbiQgfCBhc3luY1wiXG4gICAgKGNsaWNrKT1cInN0YXJ0RG9zc2llcigpXCJcbiAgPlxuICAgIHt7ICdTdGFydCBEb3NzaWVyJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|