@valtimo/dossier 5.13.0 → 5.15.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/esm2020/lib/dossier-assign-user/dossier-assign-user.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/dossier-detail.component.mjs +8 -5
- package/esm2020/lib/dossier-detail/tab/audit/audit.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/tab/contact-moments/contact-moments.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/tab/documenten-api-documents/documenten-api-documents.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/tab/documents/documents.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/tab/object-type/object-type.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/tab/progress/progress.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/tab/s3-documents/s3-documents.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/tab/summary/summary.component.mjs +3 -3
- package/esm2020/lib/dossier-detail/tab/zaakobjecten/zaakobjecten.component.mjs +3 -3
- package/esm2020/lib/dossier-list/dossier-list.component.mjs +92 -37
- package/esm2020/lib/dossier-process-start-modal/dossier-process-start-modal.component.mjs +3 -3
- package/esm2020/lib/dossier-routing.module.mjs +4 -4
- package/esm2020/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +3 -3
- package/esm2020/lib/dossier-update/dossier-update.component.mjs +3 -3
- package/esm2020/lib/dossier.module.mjs +10 -7
- package/esm2020/lib/dossier.service.mjs +3 -3
- package/esm2020/lib/models/tabs.model.mjs +8 -2
- package/esm2020/lib/services/zaakobjecten.service.mjs +3 -3
- package/esm2020/lib/tab.service.mjs +3 -3
- package/fesm2015/valtimo-dossier.mjs +166 -98
- package/fesm2015/valtimo-dossier.mjs.map +1 -1
- package/fesm2020/valtimo-dossier.mjs +171 -103
- package/fesm2020/valtimo-dossier.mjs.map +1 -1
- package/lib/dossier-detail/dossier-detail.component.d.ts +4 -1
- package/lib/dossier-detail/dossier-detail.component.d.ts.map +1 -1
- package/lib/dossier-list/dossier-list.component.d.ts +14 -10
- package/lib/dossier-list/dossier-list.component.d.ts.map +1 -1
- package/lib/dossier.module.d.ts +1 -1
- package/lib/dossier.module.d.ts.map +1 -1
- package/lib/models/tabs.model.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -112,9 +112,9 @@ export class DossierDetailTabSummaryComponent {
|
|
|
112
112
|
this.taskDetail.openTaskDetails(task);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
|
-
DossierDetailTabSummaryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
116
|
-
DossierDetailTabSummaryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
115
|
+
DossierDetailTabSummaryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DossierDetailTabSummaryComponent, deps: [{ token: i1.Router }, { token: i2.DocumentService }, { token: i3.TaskService }, { token: i4.ProcessService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ActivatedRoute }, { token: i5.FormService }, { token: i6.UserProviderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
+
DossierDetailTabSummaryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DossierDetailTabSummaryComponent, selector: "valtimo-dossier-detail-tab-summary", viewQueries: [{ propertyName: "taskDetail", first: true, predicate: ["taskDetail"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 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<div class=\"container-fluid\">\n <div class=\"row py-4\">\n <div class=\"col-sm-12 col-md-8 col-xl-9\">\n <div *ngIf=\"document\">\n <div *ngIf=\"formDefinition\" class=\"summaryForm\">\n <div class=\"mb-4\">\n <valtimo-form-io [form]=\"formDefinition\" [options]=\"options\"></valtimo-form-io>\n </div>\n </div>\n </div>\n </div>\n\n <!--Current user tasks right side-->\n <div class=\"col-sm-12 col-md-4 col-xl-3\">\n <h4 class=\"user-tasks-title\">{{ 'summary.userTasks' | translate }}</h4>\n <ng-container *ngIf=\"!tasks.length\">\n <valtimo-widget>\n <div class=\"p-3\">\n <img class=\"float-left\" src=\"assets/audit-2.png\" height=\"25\" />\n <span class=\"float-right\">{{ 'summary.userTasksDoneState' | translate }}</span>\n <div class=\"clearfix\"></div>\n </div>\n </valtimo-widget>\n </ng-container>\n <ng-container *ngFor=\"let task of tasks\">\n <valtimo-widget>\n <div\n class=\"p-3 clickable hoverable\"\n (click)=\"rowTaskClick(task)\"\n *ngIf=\"!task.isLocked()\"\n >\n <span class=\"float-right badge badge-pill badge-primary\">{{\n 'summary.taskOpen' | translate\n }}</span>\n <strong>{{ task.name }}</strong>\n <div>{{ 'summary.taskCreated' | translate }} {{ task.created }}</div>\n </div>\n <div class=\"p-3 hoverable\" *ngIf=\"task.isLocked()\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ 'summary.taskLocked' | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n <strong>{{ task.name }}</strong>\n <div>{{ 'summary.taskCreated' | translate }} {{ task.created }}</div>\n </div>\n </valtimo-widget>\n </ng-container>\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"init()\"\n (assignmentOfTaskChanged)=\"init()\"\n ></valtimo-task-detail-modal>\n </div>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2015-2020 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 */.hoverable:hover{background-color:#eee}.summaryForm .formio-component{margin-bottom:0!important}.summaryForm .formio-component div[ref=element] .form-control{height:24px!important;background-color:#fff;border:0px;margin:0;padding:0!important;font-size:13px}.summaryForm .formio-field div[ref=element] .form-control{font-weight:400}.summaryForm .formio-value div[ref=element] .form-control{font-weight:700}.user-tasks-title{margin-top:0;margin-bottom:12px;font-weight:400;color:#000;height:20px}\n"], components: [{ type: i7.FormioComponent, selector: "valtimo-form-io", inputs: ["form", "options", "submission", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }, { type: i7.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { type: i3.TaskDetailModalComponent, selector: "valtimo-task-detail-modal", outputs: ["formSubmit", "assignmentOfTaskChanged"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], pipes: { "translate": i10.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DossierDetailTabSummaryComponent, decorators: [{
|
|
118
118
|
type: Component,
|
|
119
119
|
args: [{ selector: 'valtimo-dossier-detail-tab-summary', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2020 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<div class=\"container-fluid\">\n <div class=\"row py-4\">\n <div class=\"col-sm-12 col-md-8 col-xl-9\">\n <div *ngIf=\"document\">\n <div *ngIf=\"formDefinition\" class=\"summaryForm\">\n <div class=\"mb-4\">\n <valtimo-form-io [form]=\"formDefinition\" [options]=\"options\"></valtimo-form-io>\n </div>\n </div>\n </div>\n </div>\n\n <!--Current user tasks right side-->\n <div class=\"col-sm-12 col-md-4 col-xl-3\">\n <h4 class=\"user-tasks-title\">{{ 'summary.userTasks' | translate }}</h4>\n <ng-container *ngIf=\"!tasks.length\">\n <valtimo-widget>\n <div class=\"p-3\">\n <img class=\"float-left\" src=\"assets/audit-2.png\" height=\"25\" />\n <span class=\"float-right\">{{ 'summary.userTasksDoneState' | translate }}</span>\n <div class=\"clearfix\"></div>\n </div>\n </valtimo-widget>\n </ng-container>\n <ng-container *ngFor=\"let task of tasks\">\n <valtimo-widget>\n <div\n class=\"p-3 clickable hoverable\"\n (click)=\"rowTaskClick(task)\"\n *ngIf=\"!task.isLocked()\"\n >\n <span class=\"float-right badge badge-pill badge-primary\">{{\n 'summary.taskOpen' | translate\n }}</span>\n <strong>{{ task.name }}</strong>\n <div>{{ 'summary.taskCreated' | translate }} {{ task.created }}</div>\n </div>\n <div class=\"p-3 hoverable\" *ngIf=\"task.isLocked()\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ 'summary.taskLocked' | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n <strong>{{ task.name }}</strong>\n <div>{{ 'summary.taskCreated' | translate }} {{ task.created }}</div>\n </div>\n </valtimo-widget>\n </ng-container>\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"init()\"\n (assignmentOfTaskChanged)=\"init()\"\n ></valtimo-task-detail-modal>\n </div>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2015-2020 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 */.hoverable:hover{background-color:#eee}.summaryForm .formio-component{margin-bottom:0!important}.summaryForm .formio-component div[ref=element] .form-control{height:24px!important;background-color:#fff;border:0px;margin:0;padding:0!important;font-size:13px}.summaryForm .formio-field div[ref=element] .form-control{font-weight:400}.summaryForm .formio-value div[ref=element] .form-control{font-weight:700}.user-tasks-title{margin-top:0;margin-bottom:12px;font-weight:400;color:#000;height:20px}\n"] }]
|
|
120
120
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DocumentService }, { type: i3.TaskService }, { type: i4.ProcessService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ActivatedRoute }, { type: i5.FormService }, { type: i6.UserProviderService }]; }, propDecorators: { taskDetail: [{
|
|
@@ -101,9 +101,9 @@ export class DossierDetailTabZaakobjectenComponent {
|
|
|
101
101
|
this.show();
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
DossierDetailTabZaakobjectenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
105
|
-
DossierDetailTabZaakobjectenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
104
|
+
DossierDetailTabZaakobjectenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DossierDetailTabZaakobjectenComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.ZaakobjectenService }, { token: i3.ModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
105
|
+
DossierDetailTabZaakobjectenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DossierDetailTabZaakobjectenComponent, selector: "valtimo-dossier-detail-tab-zaakobjecten", viewQueries: [{ propertyName: "viewZaakobjectModal", first: true, predicate: ["viewZaakobjectModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 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 objecttypeSelectItems: objecttypeSelectItems$ | async,\n objects: objects$ | async,\n columns: columns$ | async,\n selectedObjectTypeUrl: selectedObjecttypeUrl$ | async\n } as obs\"\n>\n <v-select\n [items]=\"obs.objecttypeSelectItems\"\n [margin]=\"true\"\n [widthInPx]=\"350\"\n name=\"objecttypes\"\n [title]=\"'dossier.zaakobjecten.objecttype' | translate\"\n [placeholder]=\"'dossier.zaakobjecten.objecttypePlaceholder' | translate\"\n [loading]=\"!obs.objecttypeSelectItems\"\n (selectedChange)=\"selectObjectType($event)\"\n ></v-select>\n <v-input-label\n titleTranslationKey=\"dossier.zaakobjecten.objecten\"\n [largeMargin]=\"!!obs.selectedObjectTypeUrl\"\n ></v-input-label>\n <v-paragraph *ngIf=\"!obs.selectedObjectTypeUrl\">{{\n 'dossier.zaakobjecten.objectenPlaceholder' | translate\n }}</v-paragraph>\n <v-table\n *ngIf=\"obs.selectedObjectTypeUrl\"\n [loading]=\"!obs.objects\"\n [items]=\"obs.objects\"\n [columns]=\"obs.columns\"\n [showEditButtons]=\"true\"\n [amountOfLoadingRows]=\"2\"\n [itemsTranslationKey]=\"'pluginManagement.tableItemsText'\"\n [showPagination]=\"false\"\n editButtonTranslationKey=\"dossier.zaakobjecten.objectType.viewObject\"\n (editButtonClicked)=\"rowClicked($event, obs.objecttypeSelectItems)\"\n ></v-table>\n</ng-container>\n\n<v-modal #viewZaakobjectModal (closeEvent)=\"hide()\" [hideFooter]=\"true\" [maxWidthPx]=\"750\">\n <div role=\"header\">\n <v-title [margin]=\"false\" type=\"h2\" [fullWidth]=\"true\" [center]=\"true\">{{\n objectName$ | async\n }}</v-title>\n </div>\n\n <div role=\"content\">\n <valtimo-form-io\n *ngIf=\"(noFormDefinitionComponent$ | async) === false\"\n [form]=\"objectForm$ | async\"\n ></valtimo-form-io>\n <v-paragraph *ngIf=\"noFormDefinitionComponent$ | async\" [center]=\"true\">{{\n 'dossier.zaakobjecten.noFormDefinitionComponent' | translate\n }}</v-paragraph>\n </div>\n</v-modal>\n", styles: ["/*!\n * Copyright 2015-2020 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"], components: [{ type: i3.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { type: i3.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { type: i3.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { type: i3.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "maxPaginationItemSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { type: i3.ModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter"], outputs: ["closeEvent"] }, { type: i3.TitleComponent, selector: "v-title", inputs: ["type", "margin", "fullWidth", "center"] }, { type: i4.FormioComponent, selector: "valtimo-form-io", inputs: ["form", "options", "submission", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe } });
|
|
106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DossierDetailTabZaakobjectenComponent, decorators: [{
|
|
107
107
|
type: Component,
|
|
108
108
|
args: [{ selector: 'valtimo-dossier-detail-tab-zaakobjecten', template: "<!--\n ~ Copyright 2015-2020 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 objecttypeSelectItems: objecttypeSelectItems$ | async,\n objects: objects$ | async,\n columns: columns$ | async,\n selectedObjectTypeUrl: selectedObjecttypeUrl$ | async\n } as obs\"\n>\n <v-select\n [items]=\"obs.objecttypeSelectItems\"\n [margin]=\"true\"\n [widthInPx]=\"350\"\n name=\"objecttypes\"\n [title]=\"'dossier.zaakobjecten.objecttype' | translate\"\n [placeholder]=\"'dossier.zaakobjecten.objecttypePlaceholder' | translate\"\n [loading]=\"!obs.objecttypeSelectItems\"\n (selectedChange)=\"selectObjectType($event)\"\n ></v-select>\n <v-input-label\n titleTranslationKey=\"dossier.zaakobjecten.objecten\"\n [largeMargin]=\"!!obs.selectedObjectTypeUrl\"\n ></v-input-label>\n <v-paragraph *ngIf=\"!obs.selectedObjectTypeUrl\">{{\n 'dossier.zaakobjecten.objectenPlaceholder' | translate\n }}</v-paragraph>\n <v-table\n *ngIf=\"obs.selectedObjectTypeUrl\"\n [loading]=\"!obs.objects\"\n [items]=\"obs.objects\"\n [columns]=\"obs.columns\"\n [showEditButtons]=\"true\"\n [amountOfLoadingRows]=\"2\"\n [itemsTranslationKey]=\"'pluginManagement.tableItemsText'\"\n [showPagination]=\"false\"\n editButtonTranslationKey=\"dossier.zaakobjecten.objectType.viewObject\"\n (editButtonClicked)=\"rowClicked($event, obs.objecttypeSelectItems)\"\n ></v-table>\n</ng-container>\n\n<v-modal #viewZaakobjectModal (closeEvent)=\"hide()\" [hideFooter]=\"true\" [maxWidthPx]=\"750\">\n <div role=\"header\">\n <v-title [margin]=\"false\" type=\"h2\" [fullWidth]=\"true\" [center]=\"true\">{{\n objectName$ | async\n }}</v-title>\n </div>\n\n <div role=\"content\">\n <valtimo-form-io\n *ngIf=\"(noFormDefinitionComponent$ | async) === false\"\n [form]=\"objectForm$ | async\"\n ></valtimo-form-io>\n <v-paragraph *ngIf=\"noFormDefinitionComponent$ | async\" [center]=\"true\">{{\n 'dossier.zaakobjecten.noFormDefinitionComponent' | translate\n }}</v-paragraph>\n </div>\n</v-modal>\n", styles: ["/*!\n * Copyright 2015-2020 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"] }]
|
|
109
109
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.ZaakobjectenService }, { type: i3.ModalService }]; }, propDecorators: { viewZaakobjectModal: [{
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Component, ViewChild } from '@angular/core';
|
|
17
|
-
import {
|
|
17
|
+
import { AdvancedDocumentSearchRequestImpl, } from '@valtimo/document';
|
|
18
18
|
import moment from 'moment';
|
|
19
19
|
import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, of, switchMap, take, tap, } from 'rxjs';
|
|
20
20
|
import { DefaultTabs } from '../dossier-detail-tab-enum';
|
|
@@ -29,7 +29,6 @@ import * as i7 from "@valtimo/components";
|
|
|
29
29
|
import * as i8 from "../dossier-process-start-modal/dossier-process-start-modal.component";
|
|
30
30
|
import * as i9 from "@angular/common";
|
|
31
31
|
import * as i10 from "@ng-bootstrap/ng-bootstrap";
|
|
32
|
-
import * as i11 from "@angular/forms";
|
|
33
32
|
moment.locale(localStorage.getItem('langKey') || '');
|
|
34
33
|
export class DossierListComponent {
|
|
35
34
|
constructor(route, router, documentService, translateService, dossierService, logger, configService) {
|
|
@@ -40,14 +39,16 @@ export class DossierListComponent {
|
|
|
40
39
|
this.dossierService = dossierService;
|
|
41
40
|
this.logger = logger;
|
|
42
41
|
this.configService = configService;
|
|
42
|
+
this.dossierVisibleTabs = null;
|
|
43
43
|
this.selectedProcessDocumentDefinition = null;
|
|
44
44
|
this.modalListenerAdded = false;
|
|
45
|
-
this.loading$ = new BehaviorSubject(true);
|
|
46
45
|
this.settingPaginationForDocName$ = new BehaviorSubject(undefined);
|
|
46
|
+
this.loading$ = new BehaviorSubject(true);
|
|
47
47
|
this.loadingDocumentSearchFields$ = new BehaviorSubject(true);
|
|
48
48
|
this.documentDefinitionName$ = this.route.params.pipe(map(params => params.documentDefinitionName || ''), tap(documentDefinitionName => {
|
|
49
49
|
this.resetPagination(documentDefinitionName);
|
|
50
50
|
}));
|
|
51
|
+
this.canHaveAssignee$ = this.documentDefinitionName$.pipe(switchMap(documentDefinitionName => this.documentService.getCaseSettings(documentDefinitionName)), map(caseSettings => caseSettings?.canHaveAssignee));
|
|
51
52
|
this.documentSearchFields$ = this.documentDefinitionName$.pipe(distinctUntilChanged(), tap(() => this.loadingDocumentSearchFields$.next(true)), switchMap(documentDefinitionName => this.documentService.getDocumentSearchFields(documentDefinitionName)), tap(() => this.loadingDocumentSearchFields$.next(false)));
|
|
52
53
|
this.associatedProcessDocumentDefinitions$ = this.documentDefinitionName$.pipe(switchMap(documentDefinitionName => documentDefinitionName
|
|
53
54
|
? this.documentService.findProcessDocumentDefinitions(documentDefinitionName)
|
|
@@ -56,15 +57,39 @@ export class DossierListComponent {
|
|
|
56
57
|
this.storedSearchRequestKey$ = this.documentDefinitionName$.pipe(map(documentDefinitionName => `list-search-${documentDefinitionName}`));
|
|
57
58
|
this.hasStoredSearchRequest$ = this.storedSearchRequestKey$.pipe(map(storedSearchRequestKey => localStorage.getItem(storedSearchRequestKey) !== null));
|
|
58
59
|
this.columns$ = this.documentDefinitionName$.pipe(map(documentDefinitionName => this.dossierService.getDefinitionColumns(documentDefinitionName)));
|
|
60
|
+
this.ASSIGNEE_KEY = 'assigneeFullName';
|
|
59
61
|
this.fields$ = combineLatest([
|
|
60
62
|
this.columns$,
|
|
63
|
+
this.canHaveAssignee$,
|
|
61
64
|
this.translateService.stream('key'),
|
|
62
|
-
]).pipe(map(([columns
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
]).pipe(map(([columns, canHaveAssignee]) => [
|
|
66
|
+
...columns
|
|
67
|
+
.map(column => ({
|
|
68
|
+
key: column.propertyName,
|
|
69
|
+
label: this.translateService.instant(`fieldLabels.${column.translationKey}`),
|
|
70
|
+
sortable: column.sortable,
|
|
71
|
+
...(column.viewType && { viewType: column.viewType }),
|
|
72
|
+
...(column.enum && { enum: column.enum }),
|
|
73
|
+
}))
|
|
74
|
+
// Filter out assignee column if the case type can not have an assignee
|
|
75
|
+
.filter(column => {
|
|
76
|
+
if (column?.key === this.ASSIGNEE_KEY && !canHaveAssignee) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
}),
|
|
81
|
+
// If the case type can have an assignee, and the assignee column is not present in the case column definition, add an assignee column at the end
|
|
82
|
+
...(canHaveAssignee && !columns.find(column => column.propertyName === this.ASSIGNEE_KEY)
|
|
83
|
+
? [
|
|
84
|
+
{
|
|
85
|
+
key: this.ASSIGNEE_KEY,
|
|
86
|
+
label: this.translateService.instant(`fieldLabels.${this.ASSIGNEE_KEY}`),
|
|
87
|
+
sortable: true,
|
|
88
|
+
viewType: 'string',
|
|
89
|
+
},
|
|
90
|
+
]
|
|
91
|
+
: []),
|
|
92
|
+
]));
|
|
68
93
|
this.DEFAULT_PAGINATION = {
|
|
69
94
|
collectionSize: 0,
|
|
70
95
|
page: 1,
|
|
@@ -74,41 +99,39 @@ export class DossierListComponent {
|
|
|
74
99
|
};
|
|
75
100
|
this.pagination$ = new BehaviorSubject(undefined);
|
|
76
101
|
this.paginationCopy$ = this.pagination$.pipe(map(pagination => pagination && JSON.parse(JSON.stringify(pagination))));
|
|
77
|
-
this.
|
|
78
|
-
this.
|
|
79
|
-
this.
|
|
80
|
-
this.
|
|
81
|
-
this.
|
|
82
|
-
this.
|
|
83
|
-
this.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
]).pipe(filter(([pagination]) => !!pagination), map(([pagination, documentDefinitionName, sequence, createdBy, globalSearchFilter]) => new DocumentSearchRequestImpl(documentDefinitionName, pagination.page - 1, pagination.size, sequence, createdBy, globalSearchFilter, pagination.sort)));
|
|
87
|
-
this.documentsRequest$ = this.documentSearchRequest$.pipe(distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)), tap(() => this.loading$.next(true)), tap(request => {
|
|
102
|
+
this.documentSearchRequest$ = combineLatest([this.pagination$, this.documentDefinitionName$]).pipe(filter(([pagination]) => !!pagination), map(([pagination, documentDefinitionName]) => new AdvancedDocumentSearchRequestImpl(documentDefinitionName, pagination.page - 1, pagination.size, pagination.sort)));
|
|
103
|
+
this.searchFieldValues$ = new BehaviorSubject({});
|
|
104
|
+
this.assigneeFilter$ = new BehaviorSubject('ALL');
|
|
105
|
+
this.documentsRequest$ = combineLatest([
|
|
106
|
+
this.documentSearchRequest$,
|
|
107
|
+
this.searchFieldValues$,
|
|
108
|
+
this.assigneeFilter$,
|
|
109
|
+
]).pipe(distinctUntilChanged(([prevSearchRequest, prevSearchValues, prevAssigneeFilter], [currSearchRequest, currSearchValues, currAssigneeFilter]) => JSON.stringify({ ...prevSearchRequest, ...prevSearchValues }) + prevAssigneeFilter ===
|
|
110
|
+
JSON.stringify({ ...currSearchRequest, ...currSearchValues }) + currAssigneeFilter), tap(([documentSearchRequest]) => {
|
|
88
111
|
this.storedSearchRequestKey$.pipe(take(1)).subscribe(storedSearchRequestKey => {
|
|
89
|
-
this.logger.debug(`store request in local storage: ${JSON.stringify(
|
|
90
|
-
localStorage.setItem(storedSearchRequestKey, JSON.stringify(
|
|
112
|
+
this.logger.debug(`store request in local storage: ${JSON.stringify(documentSearchRequest)}`);
|
|
113
|
+
localStorage.setItem(storedSearchRequestKey, JSON.stringify(documentSearchRequest));
|
|
91
114
|
});
|
|
92
|
-
}), switchMap(documentSearchRequest
|
|
115
|
+
}), switchMap(([documentSearchRequest, searchValues, assigneeFilter]) => {
|
|
116
|
+
if ((Object.keys(searchValues) || []).length > 0) {
|
|
117
|
+
return this.documentService.getDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter, this.mapSearchValuesToFilters(searchValues));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return this.documentService.getDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter);
|
|
121
|
+
}
|
|
122
|
+
}), tap(documents => {
|
|
93
123
|
this.setCollectionSize(documents);
|
|
124
|
+
this.checkPage(documents);
|
|
94
125
|
}));
|
|
95
126
|
this.documentItems$ = this.documentsRequest$.pipe(map(documents => documents.content.map(document => {
|
|
96
127
|
const { content, ...others } = document;
|
|
97
128
|
return { ...content, ...others };
|
|
98
129
|
})), tap(() => this.loading$.next(false)));
|
|
99
|
-
this.
|
|
130
|
+
this.dossierVisibleTabs = this.configService.config?.visibleDossierListTabs || null;
|
|
100
131
|
}
|
|
101
132
|
ngOnInit() {
|
|
102
133
|
this.modalListenerAdded = false;
|
|
103
134
|
}
|
|
104
|
-
globalSearchFilterChange(searchFilter) {
|
|
105
|
-
this.globalSearchFilter$.next(searchFilter);
|
|
106
|
-
this.pageChange(1);
|
|
107
|
-
}
|
|
108
|
-
sequenceChange(sequence) {
|
|
109
|
-
this.sequence$.next(Number(sequence));
|
|
110
|
-
this.pageChange(1);
|
|
111
|
-
}
|
|
112
135
|
pageChange(newPage) {
|
|
113
136
|
this.pagination$.pipe(take(1)).subscribe(pagination => {
|
|
114
137
|
if (pagination && pagination.page !== newPage) {
|
|
@@ -164,6 +187,22 @@ export class DossierListComponent {
|
|
|
164
187
|
this.selectedProcessDocumentDefinition = processDocumentDefinition;
|
|
165
188
|
modal.modal('hide');
|
|
166
189
|
}
|
|
190
|
+
search(searchFieldValues) {
|
|
191
|
+
this.searchFieldValues$.next(searchFieldValues || {});
|
|
192
|
+
}
|
|
193
|
+
mapSearchValuesToFilters(values) {
|
|
194
|
+
const filters = [];
|
|
195
|
+
Object.keys(values).forEach(valueKey => {
|
|
196
|
+
const searchValue = values[valueKey];
|
|
197
|
+
if (searchValue.start) {
|
|
198
|
+
filters.push({ key: valueKey, rangeFrom: searchValue.start, rangeTo: searchValue.end });
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
filters.push({ key: valueKey, values: [searchValue] });
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
return filters;
|
|
205
|
+
}
|
|
167
206
|
resetPagination(documentDefinitionName) {
|
|
168
207
|
this.settingPaginationForDocName$.pipe(take(1)).subscribe(settingPaginationForDocName => {
|
|
169
208
|
if (documentDefinitionName !== settingPaginationForDocName) {
|
|
@@ -213,14 +252,30 @@ export class DossierListComponent {
|
|
|
213
252
|
this.selectedProcessDocumentDefinition = null;
|
|
214
253
|
}
|
|
215
254
|
}
|
|
255
|
+
checkPage(documents) {
|
|
256
|
+
this.pagination$.pipe(take(1)).subscribe(pagination => {
|
|
257
|
+
const amountOfItems = documents.totalElements;
|
|
258
|
+
const amountOfPages = Math.ceil(amountOfItems / pagination.size);
|
|
259
|
+
const currentPage = pagination.page;
|
|
260
|
+
if (currentPage > amountOfPages) {
|
|
261
|
+
this.pagination$.next({ ...pagination, page: amountOfPages });
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
tabChange(tab) {
|
|
266
|
+
this.pagination$.pipe(take(1)).subscribe(pagination => {
|
|
267
|
+
this.pagination$.next({ ...pagination, page: 1 });
|
|
268
|
+
});
|
|
269
|
+
this.assigneeFilter$.next(tab.nextId.toUpperCase());
|
|
270
|
+
}
|
|
216
271
|
}
|
|
217
|
-
DossierListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
218
|
-
DossierListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
219
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
272
|
+
DossierListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DossierListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.DocumentService }, { token: i3.TranslateService }, { token: i4.DossierService }, { token: i5.NGXLogger }, { token: i6.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
273
|
+
DossierListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DossierListComponent, selector: "valtimo-dossier-list", viewQueries: [{ propertyName: "processStart", first: true, predicate: ["processStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 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<div class=\"main-content pt-0\" *ngIf=\"{loading: loading$ | async} as obs\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div\n *ngIf=\"\n associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\n \"\n >\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"associatedProcessDocumentDefinitions.length === 0 ? 'No action' : null\"\n placement=\"bottom\"\n [disabled]=\"associatedProcessDocumentDefinitions.length === 0 || obs.loading\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'Start Dossier' | translate }}\n </button>\n </div>\n\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <valtimo-spinner *ngIf=\"obs.loading\"></valtimo-spinner>\n <ng-container *ngTemplateOutlet=\"searchFields\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <valtimo-dossier-process-start-modal #processStartModal></valtimo-dossier-process-start-modal>\n</div>\n\n<ng-template #searchFields>\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"loadingDocumentSearchFields$ | async\"\n [searchFields]=\"documentSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"paginationCopy$ | async as pagination\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"documentItems$ | async as documentItems\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"documentItems\"\n [fields]=\"fields\"\n (rowClicked)=\"rowClick($event)\"\n [pagination]=\"pagination\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"dossierList\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n [initialSortState]=\"pagination.sort\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ (schema$ | async)?.title }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n pagination?.collectionSize || 0\n }}</sup>\n </h3>\n </div>\n <div tabs *ngIf=\"canHaveAssignee$ | async\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ul ngbNav [destroyOnHide]=\"false\" (navChange)=\"tabChange($event)\" class=\"nav-tabs\">\n <li\n *ngFor=\"let tab of dossierVisibleTabs\"\n [ngbNavItem]=\"tab\"\n [title]=\"'dossier.tabs.' + tab | translate\"\n >\n <a ngbNavLink>{{ 'dossier.tabs.' + tab | translate }}</a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabs>\n <ul\n *ngIf=\"dossierVisibleTabs === null; else configuredTabs\"\n ngbNav\n [destroyOnHide]=\"false\"\n (navChange)=\"tabChange($event)\"\n class=\"nav-tabs\"\n >\n <li ngbNavItem=\"all\" [title]=\"'dossier.tabs.ALL' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.ALL' | translate }}</a>\n </li>\n <li ngbNavItem=\"mine\" [title]=\"'dossier.tabs.MINE' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.MINE' | translate }}</a>\n </li>\n <li ngbNavItem=\"open\" [title]=\"'dossier.tabs.OPEN' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.OPEN' | translate }}</a>\n </li>\n </ul>\n</ng-template>\n", styles: [""], components: [{ type: i7.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { type: i8.DossierProcessStartModalComponent, selector: "valtimo-dossier-process-start-modal" }, { type: i7.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName"], outputs: ["doSearch"] }, { type: i7.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { type: i7.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { type: i10.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { type: i10.NgbNavLink, selector: "a[ngbNavLink]" }], pipes: { "async": i9.AsyncPipe, "translate": i3.TranslatePipe } });
|
|
274
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DossierListComponent, decorators: [{
|
|
220
275
|
type: Component,
|
|
221
|
-
args: [{ selector: 'valtimo-dossier-list', template: "<!--\n ~ Copyright 2015-2020 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<
|
|
276
|
+
args: [{ selector: 'valtimo-dossier-list', template: "<!--\n ~ Copyright 2015-2020 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<div class=\"main-content pt-0\" *ngIf=\"{loading: loading$ | async} as obs\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div\n *ngIf=\"\n associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\n \"\n >\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"associatedProcessDocumentDefinitions.length === 0 ? 'No action' : null\"\n placement=\"bottom\"\n [disabled]=\"associatedProcessDocumentDefinitions.length === 0 || obs.loading\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'Start Dossier' | translate }}\n </button>\n </div>\n\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <valtimo-spinner *ngIf=\"obs.loading\"></valtimo-spinner>\n <ng-container *ngTemplateOutlet=\"searchFields\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <valtimo-dossier-process-start-modal #processStartModal></valtimo-dossier-process-start-modal>\n</div>\n\n<ng-template #searchFields>\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"loadingDocumentSearchFields$ | async\"\n [searchFields]=\"documentSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"paginationCopy$ | async as pagination\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"documentItems$ | async as documentItems\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"documentItems\"\n [fields]=\"fields\"\n (rowClicked)=\"rowClick($event)\"\n [pagination]=\"pagination\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"dossierList\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n [initialSortState]=\"pagination.sort\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ (schema$ | async)?.title }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n pagination?.collectionSize || 0\n }}</sup>\n </h3>\n </div>\n <div tabs *ngIf=\"canHaveAssignee$ | async\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ul ngbNav [destroyOnHide]=\"false\" (navChange)=\"tabChange($event)\" class=\"nav-tabs\">\n <li\n *ngFor=\"let tab of dossierVisibleTabs\"\n [ngbNavItem]=\"tab\"\n [title]=\"'dossier.tabs.' + tab | translate\"\n >\n <a ngbNavLink>{{ 'dossier.tabs.' + tab | translate }}</a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabs>\n <ul\n *ngIf=\"dossierVisibleTabs === null; else configuredTabs\"\n ngbNav\n [destroyOnHide]=\"false\"\n (navChange)=\"tabChange($event)\"\n class=\"nav-tabs\"\n >\n <li ngbNavItem=\"all\" [title]=\"'dossier.tabs.ALL' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.ALL' | translate }}</a>\n </li>\n <li ngbNavItem=\"mine\" [title]=\"'dossier.tabs.MINE' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.MINE' | translate }}</a>\n </li>\n <li ngbNavItem=\"open\" [title]=\"'dossier.tabs.OPEN' | translate\">\n <a ngbNavLink>{{ 'dossier.tabs.OPEN' | translate }}</a>\n </li>\n </ul>\n</ng-template>\n", styles: [""] }]
|
|
222
277
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.DocumentService }, { type: i3.TranslateService }, { type: i4.DossierService }, { type: i5.NGXLogger }, { type: i6.ConfigService }]; }, propDecorators: { processStart: [{
|
|
223
278
|
type: ViewChild,
|
|
224
279
|
args: ['processStartModal']
|
|
225
280
|
}] } });
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSTNELE9BQU8sRUFHTCx5QkFBeUIsR0FJMUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBU3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQU9yRCxNQUFNLE9BQU8sb0JBQW9CO0lBbUovQixZQUNtQixLQUFxQixFQUNyQixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsZ0JBQWtDLEVBQ2xDLGNBQThCLEVBQzlCLE1BQWlCLEVBQ2pCLGFBQTRCO1FBTjVCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhC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Q29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlnU2VydmljZSwgRGVmaW5pdGlvbkNvbHVtbiwgU2VhcmNoRmllbGR9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBEb2N1bWVudHMsXG4gIERvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgRG9jdW1lbnRTZWFyY2hSZXF1ZXN0SW1wbCxcbiAgRG9jdW1lbnRTZXJ2aWNlLFxuICBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLFxuICBTb3J0U3RhdGUsXG59IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEZWZhdWx0VGFic30gZnJvbSAnLi4vZG9zc2llci1kZXRhaWwtdGFiLWVudW0nO1xuaW1wb3J0IHtEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnR9IGZyb20gJy4uL2Rvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbC9kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7RG9zc2llclNlcnZpY2V9IGZyb20gJy4uL2Rvc3NpZXIuc2VydmljZSc7XG5pbXBvcnQge0xpc3RGaWVsZCwgUGFnaW5hdGlvbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12YXJcbmRlY2xhcmUgdmFyICQ7XG5cbm1vbWVudC5sb2NhbGUobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmdLZXknKSB8fCAnJyk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgncHJvY2Vzc1N0YXJ0TW9kYWwnKSBwcm9jZXNzU3RhcnQ6IERvc3NpZXJQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudDtcblxuICBwcml2YXRlIHNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICByZWFkb25seSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nUGFnaW5hdGlvbkZvckRvY05hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIHJlYWRvbmx5IGxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgbWFwKHBhcmFtcyA9PiBwYXJhbXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fCAnJyksXG4gICAgdGFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBkb2N1bWVudFNlYXJjaEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGQ+IHwgbnVsbD4gPVxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nRG9jdW1lbnRTZWFyY2hGaWVsZHMkLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nRG9jdW1lbnRTZWFyY2hGaWVsZHMkLm5leHQoZmFsc2UpKVxuICAgICk7XG5cbiAgcmVhZG9ubHkgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zJDogT2JzZXJ2YWJsZTxBcnJheTxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPj4gPVxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVcbiAgICAgICAgICA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmZpbmRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICAgIDogb2YoW10pXG4gICAgICApLFxuICAgICAgbWFwKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zID0+XG4gICAgICAgIHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zLmZpbHRlcihkZWZpbml0aW9uID0+IGRlZmluaXRpb24uY2FuSW5pdGlhbGl6ZURvY3VtZW50KVxuICAgICAgKVxuICAgICk7XG5cbiAgcmVhZG9ubHkgc2NoZW1hJCA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnREZWZpbml0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICBtYXAoZG9jdW1lbnREZWZpbml0aW9uID0+IGRvY3VtZW50RGVmaW5pdGlvbj8uc2NoZW1hKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBtYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiBgbGlzdC1zZWFyY2gtJHtkb2N1bWVudERlZmluaXRpb25OYW1lfWApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQucGlwZShcbiAgICBtYXAoc3RvcmVkU2VhcmNoUmVxdWVzdEtleSA9PiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5KSAhPT0gbnVsbClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtbnMkOiBPYnNlcnZhYmxlPEFycmF5PERlZmluaXRpb25Db2x1bW4+PiA9XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgbWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5kb3NzaWVyU2VydmljZS5nZXREZWZpbml0aW9uQ29sdW1ucyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgKVxuICAgICk7XG5cbiAgcmVhZG9ubHkgZmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0RmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuY29sdW1ucyQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbY29sdW1uc10pID0+XG4gICAgICBjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKHtcbiAgICAgICAga2V5OiBjb2x1bW4ucHJvcGVydHlOYW1lLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGZpZWxkTGFiZWxzLiR7Y29sdW1uLnRyYW5zbGF0aW9uS2V5fWApLFxuICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnRhYmxlLFxuICAgICAgICAuLi4oY29sdW1uLnZpZXdUeXBlICYmIHt2aWV3VHlwZTogY29sdW1uLnZpZXdUeXBlfSksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BBR0lOQVRJT046IFBhZ2luYXRpb24gPSB7XG4gICAgY29sbGVjdGlvblNpemU6IDAsXG4gICAgcGFnZTogMSxcbiAgICBzaXplOiAxMCxcbiAgICBtYXhQYWdpbmF0aW9uSXRlbVNpemU6IDUsXG4gICAgc29ydDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkNvcHkkID0gdGhpcy5wYWdpbmF0aW9uJC5waXBlKFxuICAgIG1hcChwYWdpbmF0aW9uID0+IHBhZ2luYXRpb24gJiYgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwYWdpbmF0aW9uKSkpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VxdWVuY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgZ2xvYmFsU2VhcmNoRmlsdGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlZEJ5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0JDogT2JzZXJ2YWJsZTxEb2N1bWVudFNlYXJjaFJlcXVlc3Q+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5wYWdpbmF0aW9uJCxcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgIHRoaXMuc2VxdWVuY2UkLFxuICAgIHRoaXMuY3JlYXRlZEJ5JCxcbiAgICB0aGlzLmdsb2JhbFNlYXJjaEZpbHRlciQsXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbcGFnaW5hdGlvbl0pID0+ICEhcGFnaW5hdGlvbiksXG4gICAgbWFwKFxuICAgICAgKFtwYWdpbmF0aW9uLCBkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZXF1ZW5jZSwgY3JlYXRlZEJ5LCBnbG9iYWxTZWFyY2hGaWx0ZXJdKSA9PlxuICAgICAgICBuZXcgRG9jdW1lbnRTZWFyY2hSZXF1ZXN0SW1wbChcbiAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgIHBhZ2luYXRpb24ucGFnZSAtIDEsXG4gICAgICAgICAgcGFnaW5hdGlvbi5zaXplLFxuICAgICAgICAgIHNlcXVlbmNlLFxuICAgICAgICAgIGNyZWF0ZWRCeSxcbiAgICAgICAgICBnbG9iYWxTZWFyY2hGaWx0ZXIsXG4gICAgICAgICAgcGFnaW5hdGlvbi5zb3J0XG4gICAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudHNSZXF1ZXN0JDogT2JzZXJ2YWJsZTxEb2N1bWVudHM+ID0gdGhpcy5kb2N1bWVudFNlYXJjaFJlcXVlc3QkLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKSksXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgdGFwKHJlcXVlc3QgPT4ge1xuICAgICAgdGhpcy5zdG9yZWRTZWFyY2hSZXF1ZXN0S2V5JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5ID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYHN0b3JlIHJlcXVlc3QgaW4gbG9jYWwgc3RvcmFnZTogJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0KX1gKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmVkU2VhcmNoUmVxdWVzdEtleSwgSlNPTi5zdHJpbmdpZnkocmVxdWVzdCkpO1xuICAgICAgfSk7XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50U2VhcmNoUmVxdWVzdCA9PiB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudHMoZG9jdW1lbnRTZWFyY2hSZXF1ZXN0KSksXG4gICAgdGFwKGRvY3VtZW50cyA9PiB7XG4gICAgICB0aGlzLnNldENvbGxlY3Rpb25TaXplKGRvY3VtZW50cyk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBkb2N1bWVudEl0ZW1zJCA9IHRoaXMuZG9jdW1lbnRzUmVxdWVzdCQucGlwZShcbiAgICBtYXAoZG9jdW1lbnRzID0+XG4gICAgICBkb2N1bWVudHMuY29udGVudC5tYXAoZG9jdW1lbnQgPT4ge1xuICAgICAgICBjb25zdCB7Y29udGVudCwgLi4ub3RoZXJzfSA9IGRvY3VtZW50O1xuICAgICAgICByZXR1cm4gey4uLmNvbnRlbnQsIC4uLm90aGVyc307XG4gICAgICB9KVxuICAgICksXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dChmYWxzZSkpXG4gICk7XG5cbiAgZW5hYmxlQ2FzZVNlYXJjaEZpZWxkcyE6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJTZXJ2aWNlOiBEb3NzaWVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLmVuYWJsZUNhc2VTZWFyY2hGaWVsZHMgPSBjb25maWdTZXJ2aWNlLmNvbmZpZy5mZWF0dXJlVG9nZ2xlcy5jYXNlU2VhcmNoRmllbGRzO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGdsb2JhbFNlYXJjaEZpbHRlckNoYW5nZShzZWFyY2hGaWx0ZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZ2xvYmFsU2VhcmNoRmlsdGVyJC5uZXh0KHNlYXJjaEZpbHRlcik7XG4gICAgdGhpcy5wYWdlQ2hhbmdlKDEpO1xuICB9XG5cbiAgc2VxdWVuY2VDaGFuZ2Uoc2VxdWVuY2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VxdWVuY2UkLm5leHQoTnVtYmVyKHNlcXVlbmNlKSk7XG4gICAgdGhpcy5wYWdlQ2hhbmdlKDEpO1xuICB9XG5cbiAgcGFnZUNoYW5nZShuZXdQYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb24gJiYgcGFnaW5hdGlvbi5wYWdlICE9PSBuZXdQYWdlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBQYWdlIGNoYW5nZTogJHtuZXdQYWdlfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHBhZ2U6IG5ld1BhZ2V9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBhZ2VTaXplQ2hhbmdlKG5ld1BhZ2VTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb24gJiYgcGFnaW5hdGlvbi5zaXplICE9PSBuZXdQYWdlU2l6ZSkge1xuICAgICAgICBjb25zdCBhbW91bnRPZkF2YWlsYWJsZVBhZ2VzID0gTWF0aC5jZWlsKHBhZ2luYXRpb24uY29sbGVjdGlvblNpemUgLyBuZXdQYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IG5ld1BhZ2UgPVxuICAgICAgICAgIGFtb3VudE9mQXZhaWxhYmxlUGFnZXMgPCBwYWdpbmF0aW9uLnBhZ2UgPyBhbW91bnRPZkF2YWlsYWJsZVBhZ2VzIDogcGFnaW5hdGlvbi5wYWdlO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBQYWdlIHNpemUgY2hhbmdlLiBOZXcgUGFnZTogJHtuZXdQYWdlfSBOZXcgcGFnZSBzaXplOiAke25ld1BhZ2VTaXplfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHNpemU6IG5ld1BhZ2VTaXplLCBwYWdlOiBuZXdQYWdlfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzb3J0Q2hhbmdlZChuZXdTb3J0U3RhdGU6IFNvcnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocGFnaW5hdGlvbiA9PiB7XG4gICAgICBpZiAocGFnaW5hdGlvbiAmJiBKU09OLnN0cmluZ2lmeShwYWdpbmF0aW9uLnNvcnQpICE9PSBKU09OLnN0cmluZ2lmeShuZXdTb3J0U3RhdGUpKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBTb3J0IHN0YXRlIGNoYW5nZTogJHtKU09OLnN0cmluZ2lmeShuZXdTb3J0U3RhdGUpfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHNvcnQ6IG5ld1NvcnRTdGF0ZX0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcm93Q2xpY2soZG9jdW1lbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXG4gICAgICAgIGAvZG9zc2llcnMvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9kb2N1bWVudC8ke2RvY3VtZW50LmlkfS8ke0RlZmF1bHRUYWJzLnN1bW1hcnl9YCxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhcnREb3NzaWVyKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zJFxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zID0+IHtcbiAgICAgICAgaWYgKGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgJCgnI3N0YXJ0UHJvY2VzcycpLm1vZGFsKCdzaG93Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNbMF07XG4gICAgICAgICAgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RQcm9jZXNzKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbCA9ICQoJyNzdGFydFByb2Nlc3MnKTtcbiAgICBpZiAoIXRoaXMubW9kYWxMaXN0ZW5lckFkZGVkKSB7XG4gICAgICBtb2RhbC5vbignaGlkZGVuLmJzLm1vZGFsJywgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjtcbiAgICBtb2RhbC5tb2RhbCgnaGlkZScpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFBhZ2luYXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZSk6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ1BhZ2luYXRpb25Gb3JEb2NOYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzZXR0aW5nUGFnaW5hdGlvbkZvckRvY05hbWUgPT4ge1xuICAgICAgaWYgKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgIT09IHNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2NsZWFyIHBhZ2luYXRpb24nKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nUGFnaW5hdGlvbkZvckRvY05hbWUkLm5leHQoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbihkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnaW5hdGlvbihkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmhhc1N0b3JlZFNlYXJjaFJlcXVlc3QkLCB0aGlzLnN0b3JlZFNlYXJjaFJlcXVlc3RLZXkkLCB0aGlzLmNvbHVtbnMkXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChbaGFzU3RvcmVkU2VhcmNoUmVxdWVzdCwgc3RvcmVkU2VhcmNoUmVxdWVzdEtleSwgY29sdW1uc10pID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB0aGlzLmdldERlZmF1bHRQYWdpbmF0aW9uKGNvbHVtbnMpO1xuICAgICAgICBjb25zdCBzdG9yZWRQYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5nZXRTdG9yZWRQYWdpbmF0aW9uKFxuICAgICAgICAgIGhhc1N0b3JlZFNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgc3RvcmVkU2VhcmNoUmVxdWVzdEtleVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBTZXQgcGFnaW5hdGlvbjogJHtKU09OLnN0cmluZ2lmeShzdG9yZWRQYWdpbmF0aW9uIHx8IGRlZmF1bHRQYWdpbmF0aW9uKX1gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dChzdG9yZWRQYWdpbmF0aW9uIHx8IGRlZmF1bHRQYWdpbmF0aW9uKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UGFnaW5hdGlvbihjb2x1bW5zOiBBcnJheTxEZWZpbml0aW9uQ29sdW1uPik6IFBhZ2luYXRpb24ge1xuICAgIGNvbnN0IGRlZmF1bHRTb3J0U3RhdGUgPSB0aGlzLmRvc3NpZXJTZXJ2aWNlLmdldEluaXRpYWxTb3J0U3RhdGUoY29sdW1ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5ERUZBVUxUX1BBR0lOQVRJT04sXG4gICAgICBzb3J0OiBkZWZhdWx0U29ydFN0YXRlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFN0b3JlZFBhZ2luYXRpb24oXG4gICAgaGFzU3RvcmVkU2VhcmNoUmVxdWVzdDogYm9vbGVhbixcbiAgICBzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5OiBzdHJpbmdcbiAgKTogUGFnaW5hdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RvcmVkU2VhcmNoUmVxdWVzdCA9XG4gICAgICBoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0ICYmIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmVkU2VhcmNoUmVxdWVzdEtleSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHN0b3JlZFNlYXJjaFJlcXVlc3QgJiYge1xuICAgICAgICAuLi50aGlzLkRFRkFVTFRfUEFHSU5BVElPTixcbiAgICAgICAgc29ydDogc3RvcmVkU2VhcmNoUmVxdWVzdC5zb3J0LFxuICAgICAgICBwYWdlOiBzdG9yZWRTZWFyY2hSZXF1ZXN0LnBhZ2UgKyAxLFxuICAgICAgICBzaXplOiBzdG9yZWRTZWFyY2hSZXF1ZXN0LnNpemUsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29sbGVjdGlvblNpemUoZG9jdW1lbnRzOiBEb2N1bWVudHMpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb24uY29sbGVjdGlvblNpemUgIT09IGRvY3VtZW50cy50b3RhbEVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4ucGFnaW5hdGlvbiwgY29sbGVjdGlvblNpemU6IGRvY3VtZW50cy50b3RhbEVsZW1lbnRzfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dTdGFydFByb2Nlc3NNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1N0YXJ0Lm9wZW5Nb2RhbCh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbik7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlYmFyXCI+PC9uZy1jb250YWluZXI+XG5cbjxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnQgcHQtMFwiICpuZ0lmPVwie2xvYWRpbmc6IGxvYWRpbmckIHwgYXN5bmN9IGFzIG9ic1wiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG1iLTVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkIHwgYXN5bmMgYXMgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0IG10LW0zcHggbWItM1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1wcmltYXJ5IG1yLTBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RG9zc2llcigpXCJcbiAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPT09IDAgPyAnTm8gYWN0aW9uJyA6IG51bGxcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwIHx8IG9icy5sb2FkaW5nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS1wbHVzIG1yLTFcIj48L2k+XG4gICAgICAgICAgICB7eyAnU3RhcnQgRG9zc2llcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibW9kYWwgZmFkZVwiXG4gICAgICAgICAgaWQ9XCJzdGFydFByb2Nlc3NcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cInN0YXJ0UHJvY2Vzc0xhYmVsXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWRcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic3RhcnRQcm9jZXNzTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdkYXNoYm9hcmQuc3RhcnRQcm9jZXNzLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbS0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uIG9mIGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnByb2Nlc3NOYW1lIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnY3RhLmNsb3NlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHZhbHRpbW8tc3Bpbm5lciAqbmdJZj1cIm9icy5sb2FkaW5nXCI+PC92YWx0aW1vLXNwaW5uZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsICNwcm9jZXNzU3RhcnRNb2RhbD48L3ZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRzPlxuICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwiZW5hYmxlQ2FzZVNlYXJjaEZpZWxkc1wiPlxuICAgIDx2YWx0aW1vLXNlYXJjaC1maWVsZHNcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQgfCBhc3luY1wiXG4gICAgICBbc2VhcmNoRmllbGRzXT1cImRvY3VtZW50U2VhcmNoRmllbGRzJCB8IGFzeW5jXCJcbiAgICA+PC92YWx0aW1vLXNlYXJjaC1maWVsZHM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb25Db3B5JCB8IGFzeW5jIGFzIHBhZ2luYXRpb25cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRzJCB8IGFzeW5jIGFzIGZpZWxkc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvY3VtZW50SXRlbXMkIHwgYXN5bmMgYXMgZG9jdW1lbnRJdGVtc1wiPlxuICAgICAgICA8dmFsdGltby13aWRnZXQgKm5nSWY9XCJvYnMubG9hZGluZyA9PT0gZmFsc2VcIj5cbiAgICAgICAgICA8dmFsdGltby1saXN0XG4gICAgICAgICAgICBbaXRlbXNdPVwiZG9jdW1lbnRJdGVtc1wiXG4gICAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAocm93Q2xpY2tlZCk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgICAgW3ZpZXdNb2RlXT1cInRydWVcIlxuICAgICAgICAgICAgW2hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIHBhZ2luYXRpb25JZGVudGlmaWVyPVwiZG9zc2llckxpc3RcIlxuICAgICAgICAgICAgKHBhZ2luYXRpb25DbGlja2VkKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAocGFnaW5hdGlvblNldCk9XCJwYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpbml0aWFsU29ydFN0YXRlXT1cInBhZ2luYXRpb24uc29ydFwiXG4gICAgICAgICAgICAoc29ydENoYW5nZWQpPVwic29ydENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBoZWFkZXI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImxpc3QtaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgKHNjaGVtYSQgfCBhc3luYyk/LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPHN1cCBjbGFzcz1cIm1sLTEgYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1wcmltYXJ5XCI+e3tcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50SXRlbXM/Lmxlbmd0aCB8fCAwXG4gICAgICAgICAgICAgICAgfX08L3N1cD5cbiAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdmFsdGltby1saXN0PlxuICAgICAgICA8L3ZhbHRpbW8td2lkZ2V0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaWRlYmFyPlxuICA8dmFsdGltby1maWx0ZXItc2lkZWJhciAqbmdJZj1cIiFlbmFibGVDYXNlU2VhcmNoRmllbGRzXCI+XG4gICAgPGg0IGNsYXNzPVwidGl0bGVcIj5TZWFyY2g8L2g0PlxuICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2Rvc3NpZXIuZm9ybXMuZ2xvYmFsU2VhcmNoUGxhY2VIb2xkZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoRmlsdGVyJCB8IGFzeW5jXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZ2xvYmFsU2VhcmNoRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZG9zc2llci5mb3Jtcy5yZWZlcmVuY2VOdW1iZXJQbGFjZUhvbGRlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbbmdNb2RlbF09XCJzZXF1ZW5jZSQgfCBhc3luY1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlcXVlbmNlQ2hhbmdlKCRldmVudClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC92YWx0aW1vLWZpbHRlci1zaWRlYmFyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBYTNELE9BQU8sRUFFTCxpQ0FBaUMsR0FLbEMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7QUFVdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBT3JELE1BQU0sT0FBTyxvQkFBb0I7SUFtTS9CLFlBQ21CLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsTUFBaUIsRUFDMUIsYUFBNEI7UUFObkIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIs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QUFDLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUEyQjtRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDOztrSEE1WFUsb0JBQW9CO3NHQUFwQixvQkFBb0IsK0tDbkVqQyxtdE1Bb0tBOzRGRGpHYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usc0JBQXNCO3dRQUtBLFlBQVk7c0JBQTNDLFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBBc3NpZ25lZUZpbHRlcixcbiAgQ29uZmlnU2VydmljZSxcbiAgRGVmaW5pdGlvbkNvbHVtbixcbiAgRG9zc2llckxpc3RUYWIsXG4gIFNlYXJjaEZpZWxkLFxuICBTZWFyY2hGaWVsZFZhbHVlcyxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hGaWx0ZXJSYW5nZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7XG4gIEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwsXG4gIERvY3VtZW50cyxcbiAgRG9jdW1lbnRTZXJ2aWNlLFxuICBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLFxuICBTb3J0U3RhdGUsXG59IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEZWZhdWx0VGFic30gZnJvbSAnLi4vZG9zc2llci1kZXRhaWwtdGFiLWVudW0nO1xuaW1wb3J0IHtEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnR9IGZyb20gJy4uL2Rvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbC9kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7RG9zc2llclNlcnZpY2V9IGZyb20gJy4uL2Rvc3NpZXIuc2VydmljZSc7XG5pbXBvcnQge0xpc3RGaWVsZCwgUGFnaW5hdGlvbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge05nYk5hdkNoYW5nZUV2ZW50fSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12YXJcbmRlY2xhcmUgdmFyICQ7XG5cbm1vbWVudC5sb2NhbGUobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmdLZXknKSB8fCAnJyk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbGlzdC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgncHJvY2Vzc1N0YXJ0TW9kYWwnKSBwcm9jZXNzU3RhcnQ6IERvc3NpZXJQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudDtcblxuICBwdWJsaWMgZG9zc2llclZpc2libGVUYWJzOiBBcnJheTxEb3NzaWVyTGlzdFRhYj4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG5cbiAgcmVhZG9ubHkgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHJlYWRvbmx5IGxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgfHwgJycpLFxuICAgIHRhcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2FuSGF2ZUFzc2lnbmVlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0Q2FzZVNldHRpbmdzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICBtYXAoY2FzZVNldHRpbmdzID0+IGNhc2VTZXR0aW5ncz8uY2FuSGF2ZUFzc2lnbmVlKVxuICApO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50U2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4gfCBudWxsPiA9XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQubmV4dCh0cnVlKSksXG4gICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudFNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQubmV4dChmYWxzZSkpXG4gICAgKTtcblxuICByZWFkb25seSBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24+PiA9XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZVxuICAgICAgICAgID8gdGhpcy5kb2N1bWVudFNlcnZpY2UuZmluZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAgICAgOiBvZihbXSlcbiAgICAgICksXG4gICAgICBtYXAocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMgPT5cbiAgICAgICAgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMuZmlsdGVyKGRlZmluaXRpb24gPT4gZGVmaW5pdGlvbi5jYW5Jbml0aWFsaXplRG9jdW1lbnQpXG4gICAgICApXG4gICAgKTtcblxuICByZWFkb25seSBzY2hlbWEkID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudERlZmluaXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIG1hcChkb2N1bWVudERlZmluaXRpb24gPT4gZG9jdW1lbnREZWZpbml0aW9uPy5zY2hlbWEpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5JDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgIG1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+IGBsaXN0LXNlYXJjaC0ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhc1N0b3JlZFNlYXJjaFJlcXVlc3QkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdG9yZWRTZWFyY2hSZXF1ZXN0S2V5JC5waXBlKFxuICAgIG1hcChzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5ID0+IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXkpICE9PSBudWxsKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1ucyQ6IE9ic2VydmFibGU8QXJyYXk8RGVmaW5pdGlvbkNvbHVtbj4+ID1cbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBtYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICB0aGlzLmRvc3NpZXJTZXJ2aWNlLmdldERlZmluaXRpb25Db2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICApXG4gICAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IEFTU0lHTkVFX0tFWSA9ICdhc3NpZ25lZUZ1bGxOYW1lJztcblxuICByZWFkb25seSBmaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RGaWVsZD4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5jb2x1bW5zJCxcbiAgICB0aGlzLmNhbkhhdmVBc3NpZ25lZSQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbY29sdW1ucywgY2FuSGF2ZUFzc2lnbmVlXSkgPT4gW1xuICAgICAgLi4uY29sdW1uc1xuICAgICAgICAubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgICAgIGtleTogY29sdW1uLnByb3BlcnR5TmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGZpZWxkTGFiZWxzLiR7Y29sdW1uLnRyYW5zbGF0aW9uS2V5fWApLFxuICAgICAgICAgIHNvcnRhYmxlOiBjb2x1bW4uc29ydGFibGUsXG4gICAgICAgICAgLi4uKGNvbHVtbi52aWV3VHlwZSAmJiB7dmlld1R5cGU6IGNvbHVtbi52aWV3VHlwZX0pLFxuICAgICAgICAgIC4uLihjb2x1bW4uZW51bSAmJiB7ZW51bTogY29sdW1uLmVudW19KSxcbiAgICAgICAgfSkpXG4gICAgICAgIC8vIEZpbHRlciBvdXQgYXNzaWduZWUgY29sdW1uIGlmIHRoZSBjYXNlIHR5cGUgY2FuIG5vdCBoYXZlIGFuIGFzc2lnbmVlXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uPy5rZXkgPT09IHRoaXMuQVNTSUdORUVfS0VZICYmICFjYW5IYXZlQXNzaWduZWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgLy8gSWYgdGhlIGNhc2UgdHlwZSBjYW4gaGF2ZSBhbiBhc3NpZ25lZSwgYW5kIHRoZSBhc3NpZ25lZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgaW4gdGhlIGNhc2UgY29sdW1uIGRlZmluaXRpb24sIGFkZCBhbiBhc3NpZ25lZSBjb2x1bW4gYXQgdGhlIGVuZFxuICAgICAgLi4uKGNhbkhhdmVBc3NpZ25lZSAmJiAhY29sdW1ucy5maW5kKGNvbHVtbiA9PiBjb2x1bW4ucHJvcGVydHlOYW1lID09PSB0aGlzLkFTU0lHTkVFX0tFWSlcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogdGhpcy5BU1NJR05FRV9LRVksXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZmllbGRMYWJlbHMuJHt0aGlzLkFTU0lHTkVFX0tFWX1gKSxcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICBdKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9QQUdJTkFUSU9OOiBQYWdpbmF0aW9uID0ge1xuICAgIGNvbGxlY3Rpb25TaXplOiAwLFxuICAgIHBhZ2U6IDEsXG4gICAgc2l6ZTogMTAsXG4gICAgbWF4UGFnaW5hdGlvbkl0ZW1TaXplOiA1LFxuICAgIHNvcnQ6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRpb25Db3B5JCA9IHRoaXMucGFnaW5hdGlvbiQucGlwZShcbiAgICBtYXAocGFnaW5hdGlvbiA9PiBwYWdpbmF0aW9uICYmIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFnaW5hdGlvbikpKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0JDogT2JzZXJ2YWJsZTxBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdD4gPVxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucGFnaW5hdGlvbiQsIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbcGFnaW5hdGlvbl0pID0+ICEhcGFnaW5hdGlvbiksXG4gICAgICBtYXAoXG4gICAgICAgIChbcGFnaW5hdGlvbiwgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+XG4gICAgICAgICAgbmV3IEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0SW1wbChcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICBwYWdpbmF0aW9uLnBhZ2UgLSAxLFxuICAgICAgICAgICAgcGFnaW5hdGlvbi5zaXplLFxuICAgICAgICAgICAgcGFnaW5hdGlvbi5zb3J0XG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hGaWVsZFZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaEZpZWxkVmFsdWVzPih7fSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhc3NpZ25lZUZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFzc2lnbmVlRmlsdGVyPignQUxMJyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudHNSZXF1ZXN0JDogT2JzZXJ2YWJsZTxEb2N1bWVudHM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudFNlYXJjaFJlcXVlc3QkLFxuICAgIHRoaXMuc2VhcmNoRmllbGRWYWx1ZXMkLFxuICAgIHRoaXMuYXNzaWduZWVGaWx0ZXIkLFxuICBdKS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgKFxuICAgICAgICBbcHJldlNlYXJjaFJlcXVlc3QsIHByZXZTZWFyY2hWYWx1ZXMsIHByZXZBc3NpZ25lZUZpbHRlcl0sXG4gICAgICAgIFtjdXJyU2VhcmNoUmVxdWVzdCwgY3VyclNlYXJjaFZhbHVlcywgY3VyckFzc2lnbmVlRmlsdGVyXVxuICAgICAgKSA9PlxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7Li4ucHJldlNlYXJjaFJlcXVlc3QsIC4uLnByZXZTZWFyY2hWYWx1ZXN9KSArIHByZXZBc3NpZ25lZUZpbHRlciA9PT1cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoey4uLmN1cnJTZWFyY2hSZXF1ZXN0LCAuLi5jdXJyU2VhcmNoVmFsdWVzfSkgKyBjdXJyQXNzaWduZWVGaWx0ZXJcbiAgICApLFxuICAgIHRhcCgoW2RvY3VtZW50U2VhcmNoUmVxdWVzdF0pID0+IHtcbiAgICAgIHRoaXMuc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc3RvcmVkU2VhcmNoUmVxdWVzdEtleSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBzdG9yZSByZXF1ZXN0IGluIGxvY2FsIHN0b3JhZ2U6ICR7SlNPTi5zdHJpbmdpZnkoZG9jdW1lbnRTZWFyY2hSZXF1ZXN0KX1gXG4gICAgICAgICk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXksIEpTT04uc3RyaW5naWZ5KGRvY3VtZW50U2VhcmNoUmVxdWVzdCkpO1xuICAgICAgfSk7XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LCBzZWFyY2hWYWx1ZXMsIGFzc2lnbmVlRmlsdGVyXSkgPT4ge1xuICAgICAgaWYgKChPYmplY3Qua2V5cyhzZWFyY2hWYWx1ZXMpIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudHNTZWFyY2goXG4gICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICdBTkQnLFxuICAgICAgICAgIGFzc2lnbmVlRmlsdGVyLFxuICAgICAgICAgIHRoaXMubWFwU2VhcmNoVmFsdWVzVG9GaWx0ZXJzKHNlYXJjaFZhbHVlcylcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudHNTZWFyY2goXG4gICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICdBTkQnLFxuICAgICAgICAgIGFzc2lnbmVlRmlsdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgdGFwKGRvY3VtZW50cyA9PiB7XG4gICAgICB0aGlzLnNldENvbGxlY3Rpb25TaXplKGRvY3VtZW50cyk7XG4gICAgICB0aGlzLmNoZWNrUGFnZShkb2N1bWVudHMpO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgZG9jdW1lbnRJdGVtcyQgPSB0aGlzLmRvY3VtZW50c1JlcXVlc3QkLnBpcGUoXG4gICAgbWFwKGRvY3VtZW50cyA9PlxuICAgICAgZG9jdW1lbnRzLmNvbnRlbnQubWFwKGRvY3VtZW50ID0+IHtcbiAgICAgICAgY29uc3Qge2NvbnRlbnQsIC4uLm90aGVyc30gPSBkb2N1bWVudDtcbiAgICAgICAgcmV0dXJuIHsuLi5jb250ZW50LCAuLi5vdGhlcnN9O1xuICAgICAgfSlcbiAgICApLFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3NzaWVyU2VydmljZTogRG9zc2llclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5kb3NzaWVyVmlzaWJsZVRhYnMgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnPy52aXNpYmxlRG9zc2llckxpc3RUYWJzIHx8IG51bGw7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICB9XG5cbiAgcGFnZUNoYW5nZShuZXdQYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb24gJiYgcGFnaW5hdGlvbi5wYWdlICE9PSBuZXdQYWdlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBQYWdlIGNoYW5nZTogJHtuZXdQYWdlfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHBhZ2U6IG5ld1BhZ2V9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBhZ2VTaXplQ2hhbmdlKG5ld1BhZ2VTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgaWYgKHBhZ2luYXRpb24gJiYgcGFnaW5hdGlvbi5zaXplICE9PSBuZXdQYWdlU2l6ZSkge1xuICAgICAgICBjb25zdCBhbW91bnRPZkF2YWlsYWJsZVBhZ2VzID0gTWF0aC5jZWlsKHBhZ2luYXRpb24uY29sbGVjdGlvblNpemUgLyBuZXdQYWdlU2l6ZSk7XG4gICAgICAgIGNvbnN0IG5ld1BhZ2UgPVxuICAgICAgICAgIGFtb3VudE9mQXZhaWxhYmxlUGFnZXMgPCBwYWdpbmF0aW9uLnBhZ2UgPyBhbW91bnRPZkF2YWlsYWJsZVBhZ2VzIDogcGFnaW5hdGlvbi5wYWdlO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBQYWdlIHNpemUgY2hhbmdlLiBOZXcgUGFnZTogJHtuZXdQYWdlfSBOZXcgcGFnZSBzaXplOiAke25ld1BhZ2VTaXplfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHNpemU6IG5ld1BhZ2VTaXplLCBwYWdlOiBuZXdQYWdlfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzb3J0Q2hhbmdlZChuZXdTb3J0U3RhdGU6IFNvcnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocGFnaW5hdGlvbiA9PiB7XG4gICAgICBpZiAocGFnaW5hdGlvbiAmJiBKU09OLnN0cmluZ2lmeShwYWdpbmF0aW9uLnNvcnQpICE9PSBKU09OLnN0cmluZ2lmeShuZXdTb3J0U3RhdGUpKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBTb3J0IHN0YXRlIGNoYW5nZTogJHtKU09OLnN0cmluZ2lmeShuZXdTb3J0U3RhdGUpfWApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHNvcnQ6IG5ld1NvcnRTdGF0ZX0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcm93Q2xpY2soZG9jdW1lbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXG4gICAgICAgIGAvZG9zc2llcnMvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9kb2N1bWVudC8ke2RvY3VtZW50LmlkfS8ke0RlZmF1bHRUYWJzLnN1bW1hcnl9YCxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhcnREb3NzaWVyKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zJFxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zID0+IHtcbiAgICAgICAgaWYgKGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgJCgnI3N0YXJ0UHJvY2VzcycpLm1vZGFsKCdzaG93Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNbMF07XG4gICAgICAgICAgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RQcm9jZXNzKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbCA9ICQoJyNzdGFydFByb2Nlc3MnKTtcbiAgICBpZiAoIXRoaXMubW9kYWxMaXN0ZW5lckFkZGVkKSB7XG4gICAgICBtb2RhbC5vbignaGlkZGVuLmJzLm1vZGFsJywgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjtcbiAgICBtb2RhbC5tb2RhbCgnaGlkZScpO1xuICB9XG5cbiAgc2VhcmNoKHNlYXJjaEZpZWxkVmFsdWVzOiBTZWFyY2hGaWVsZFZhbHVlcyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRmllbGRWYWx1ZXMkLm5leHQoc2VhcmNoRmllbGRWYWx1ZXMgfHwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZWFyY2hWYWx1ZXNUb0ZpbHRlcnMoXG4gICAgdmFsdWVzOiBTZWFyY2hGaWVsZFZhbHVlc1xuICApOiBBcnJheTxTZWFyY2hGaWx0ZXIgfCBTZWFyY2hGaWx0ZXJSYW5nZT4ge1xuICAgIGNvbnN0IGZpbHRlcnM6IEFycmF5PFNlYXJjaEZpbHRlciB8IFNlYXJjaEZpbHRlclJhbmdlPiA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKHZhbHVlS2V5ID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdmFsdWVzW3ZhbHVlS2V5XSBhcyBhbnk7XG4gICAgICBpZiAoc2VhcmNoVmFsdWUuc3RhcnQpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKHtrZXk6IHZhbHVlS2V5LCByYW5nZUZyb206IHNlYXJjaFZhbHVlLnN0YXJ0LCByYW5nZVRvOiBzZWFyY2hWYWx1ZS5lbmR9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlcnMucHVzaCh7a2V5OiB2YWx1ZUtleSwgdmFsdWVzOiBbc2VhcmNoVmFsdWVdfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRQYWdpbmF0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc2V0dGluZ1BhZ2luYXRpb25Gb3JEb2NOYW1lID0+IHtcbiAgICAgIGlmIChkb2N1bWVudERlZmluaXRpb25OYW1lICE9PSBzZXR0aW5nUGFnaW5hdGlvbkZvckRvY05hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdjbGVhciBwYWdpbmF0aW9uJyk7XG4gICAgICAgIHRoaXMuc2V0dGluZ1BhZ2luYXRpb25Gb3JEb2NOYW1lJC5uZXh0KGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgICAgICB0aGlzLnNldFBhZ2luYXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2luYXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5oYXNTdG9yZWRTZWFyY2hSZXF1ZXN0JCwgdGhpcy5zdG9yZWRTZWFyY2hSZXF1ZXN0S2V5JCwgdGhpcy5jb2x1bW5zJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW2hhc1N0b3JlZFNlYXJjaFJlcXVlc3QsIHN0b3JlZFNlYXJjaFJlcXVlc3RLZXksIGNvbHVtbnNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5nZXREZWZhdWx0UGFnaW5hdGlvbihjb2x1bW5zKTtcbiAgICAgICAgY29uc3Qgc3RvcmVkUGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHRoaXMuZ2V0U3RvcmVkUGFnaW5hdGlvbihcbiAgICAgICAgICBoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgIHN0b3JlZFNlYXJjaFJlcXVlc3RLZXlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgU2V0IHBhZ2luYXRpb246ICR7SlNPTi5zdHJpbmdpZnkoc3RvcmVkUGFnaW5hdGlvbiB8fCBkZWZhdWx0UGFnaW5hdGlvbil9YFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoc3RvcmVkUGFnaW5hdGlvbiB8fCBkZWZhdWx0UGFnaW5hdGlvbik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFBhZ2luYXRpb24oY29sdW1uczogQXJyYXk8RGVmaW5pdGlvbkNvbHVtbj4pOiBQYWdpbmF0aW9uIHtcbiAgICBjb25zdCBkZWZhdWx0U29ydFN0YXRlID0gdGhpcy5kb3NzaWVyU2VydmljZS5nZXRJbml0aWFsU29ydFN0YXRlKGNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLFxuICAgICAgc29ydDogZGVmYXVsdFNvcnRTdGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdG9yZWRQYWdpbmF0aW9uKFxuICAgIGhhc1N0b3JlZFNlYXJjaFJlcXVlc3Q6IGJvb2xlYW4sXG4gICAgc3RvcmVkU2VhcmNoUmVxdWVzdEtleTogc3RyaW5nXG4gICk6IFBhZ2luYXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0b3JlZFNlYXJjaFJlcXVlc3QgPVxuICAgICAgaGFzU3RvcmVkU2VhcmNoUmVxdWVzdCAmJiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXkpKTtcblxuICAgIHJldHVybiAoXG4gICAgICBzdG9yZWRTZWFyY2hSZXF1ZXN0ICYmIHtcbiAgICAgICAgLi4udGhpcy5ERUZBVUxUX1BBR0lOQVRJT04sXG4gICAgICAgIHNvcnQ6IHN0b3JlZFNlYXJjaFJlcXVlc3Quc29ydCxcbiAgICAgICAgcGFnZTogc3RvcmVkU2VhcmNoUmVxdWVzdC5wYWdlICsgMSxcbiAgICAgICAgc2l6ZTogc3RvcmVkU2VhcmNoUmVxdWVzdC5zaXplLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbGxlY3Rpb25TaXplKGRvY3VtZW50czogRG9jdW1lbnRzKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShwYWdpbmF0aW9uID0+IHtcbiAgICAgIGlmIChwYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplICE9PSBkb2N1bWVudHMudG90YWxFbGVtZW50cykge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIGNvbGxlY3Rpb25TaXplOiBkb2N1bWVudHMudG90YWxFbGVtZW50c30pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93U3RhcnRQcm9jZXNzTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnByb2Nlc3NTdGFydC5vcGVuTW9kYWwodGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24pO1xuICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tQYWdlKGRvY3VtZW50czogRG9jdW1lbnRzKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShwYWdpbmF0aW9uID0+IHtcbiAgICAgIGNvbnN0IGFtb3VudE9mSXRlbXMgPSBkb2N1bWVudHMudG90YWxFbGVtZW50cztcbiAgICAgIGNvbnN0IGFtb3VudE9mUGFnZXMgPSBNYXRoLmNlaWwoYW1vdW50T2ZJdGVtcyAvIHBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZSA9IHBhZ2luYXRpb24ucGFnZTtcblxuICAgICAgaWYgKGN1cnJlbnRQYWdlID4gYW1vdW50T2ZQYWdlcykge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnBhZ2luYXRpb24sIHBhZ2U6IGFtb3VudE9mUGFnZXN9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRhYkNoYW5nZSh0YWI6IE5nYk5hdkNoYW5nZUV2ZW50PGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHBhZ2luYXRpb24gPT4ge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5wYWdpbmF0aW9uLCBwYWdlOiAxfSk7XG4gICAgfSk7XG4gICAgdGhpcy5hc3NpZ25lZUZpbHRlciQubmV4dCh0YWIubmV4dElkLnRvVXBwZXJDYXNlKCkpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnQgcHQtMFwiICpuZ0lmPVwie2xvYWRpbmc6IGxvYWRpbmckIHwgYXN5bmN9IGFzIG9ic1wiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG1iLTVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkIHwgYXN5bmMgYXMgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0IG10LW0zcHggbWItM1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1wcmltYXJ5IG1yLTBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RG9zc2llcigpXCJcbiAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPT09IDAgPyAnTm8gYWN0aW9uJyA6IG51bGxcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwIHx8IG9icy5sb2FkaW5nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS1wbHVzIG1yLTFcIj48L2k+XG4gICAgICAgICAgICB7eyAnU3RhcnQgRG9zc2llcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibW9kYWwgZmFkZVwiXG4gICAgICAgICAgaWQ9XCJzdGFydFByb2Nlc3NcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cInN0YXJ0UHJvY2Vzc0xhYmVsXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWRcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic3RhcnRQcm9jZXNzTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdkYXNoYm9hcmQuc3RhcnRQcm9jZXNzLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbS0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uIG9mIGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnByb2Nlc3NOYW1lIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnY3RhLmNsb3NlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHZhbHRpbW8tc3Bpbm5lciAqbmdJZj1cIm9icy5sb2FkaW5nXCI+PC92YWx0aW1vLXNwaW5uZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsICNwcm9jZXNzU3RhcnRNb2RhbD48L3ZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRzPlxuICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgIDx2YWx0aW1vLXNlYXJjaC1maWVsZHNcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdEb2N1bWVudFNlYXJjaEZpZWxkcyQgfCBhc3luY1wiXG4gICAgICBbc2VhcmNoRmllbGRzXT1cImRvY3VtZW50U2VhcmNoRmllbGRzJCB8IGFzeW5jXCJcbiAgICAgIChkb1NlYXJjaCk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICBbZG9jdW1lbnREZWZpbml0aW9uTmFtZV09XCJkb2N1bWVudERlZmluaXRpb25OYW1lJCB8IGFzeW5jXCJcbiAgICA+PC92YWx0aW1vLXNlYXJjaC1maWVsZHM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb25Db3B5JCB8IGFzeW5jIGFzIHBhZ2luYXRpb25cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRzJCB8IGFzeW5jIGFzIGZpZWxkc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvY3VtZW50SXRlbXMkIHwgYXN5bmMgYXMgZG9jdW1lbnRJdGVtc1wiPlxuICAgICAgICA8dmFsdGltby13aWRnZXQgKm5nSWY9XCJvYnMubG9hZGluZyA9PT0gZmFsc2VcIj5cbiAgICAgICAgICA8dmFsdGltby1saXN0XG4gICAgICAgICAgICBbaXRlbXNdPVwiZG9jdW1lbnRJdGVtc1wiXG4gICAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAocm93Q2xpY2tlZCk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgICAgW3ZpZXdNb2RlXT1cInRydWVcIlxuICAgICAgICAgICAgW2hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIHBhZ2luYXRpb25JZGVudGlmaWVyPVwiZG9zc2llckxpc3RcIlxuICAgICAgICAgICAgKHBhZ2luYXRpb25DbGlja2VkKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAocGFnaW5hdGlvblNldCk9XCJwYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpbml0aWFsU29ydFN0YXRlXT1cInBhZ2luYXRpb24uc29ydFwiXG4gICAgICAgICAgICAoc29ydENoYW5nZWQpPVwic29ydENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBoZWFkZXI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImxpc3QtaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgKHNjaGVtYSQgfCBhc3luYyk/LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPHN1cCBjbGFzcz1cIm1sLTEgYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1wcmltYXJ5XCI+e3tcbiAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb24/LmNvbGxlY3Rpb25TaXplIHx8IDBcbiAgICAgICAgICAgICAgICB9fTwvc3VwPlxuICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHRhYnMgKm5nSWY9XCJjYW5IYXZlQXNzaWduZWUkIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdmFsdGltby1saXN0PlxuICAgICAgICA8L3ZhbHRpbW8td2lkZ2V0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb25maWd1cmVkVGFicz5cbiAgPHVsIG5nYk5hdiBbZGVzdHJveU9uSGlkZV09XCJmYWxzZVwiIChuYXZDaGFuZ2UpPVwidGFiQ2hhbmdlKCRldmVudClcIiBjbGFzcz1cIm5hdi10YWJzXCI+XG4gICAgPGxpXG4gICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIGRvc3NpZXJWaXNpYmxlVGFic1wiXG4gICAgICBbbmdiTmF2SXRlbV09XCJ0YWJcIlxuICAgICAgW3RpdGxlXT1cIidkb3NzaWVyLnRhYnMuJyArIHRhYiB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPGEgbmdiTmF2TGluaz57eyAnZG9zc2llci50YWJzLicgKyB0YWIgfCB0cmFuc2xhdGUgfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFicz5cbiAgPHVsXG4gICAgKm5nSWY9XCJkb3NzaWVyVmlzaWJsZVRhYnMgPT09IG51bGw7IGVsc2UgY29uZmlndXJlZFRhYnNcIlxuICAgIG5nYk5hdlxuICAgIFtkZXN0cm95T25IaWRlXT1cImZhbHNlXCJcbiAgICAobmF2Q2hhbmdlKT1cInRhYkNoYW5nZSgkZXZlbnQpXCJcbiAgICBjbGFzcz1cIm5hdi10YWJzXCJcbiAgPlxuICAgIDxsaSBuZ2JOYXZJdGVtPVwiYWxsXCIgW3RpdGxlXT1cIidkb3NzaWVyLnRhYnMuQUxMJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgPGEgbmdiTmF2TGluaz57eyAnZG9zc2llci50YWJzLkFMTCcgfCB0cmFuc2xhdGUgfX08L2E+XG4gICAgPC9saT5cbiAgICA8bGkgbmdiTmF2SXRlbT1cIm1pbmVcIiBbdGl0bGVdPVwiJ2Rvc3NpZXIudGFicy5NSU5FJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgPGEgbmdiTmF2TGluaz57eyAnZG9zc2llci50YWJzLk1JTkUnIHwgdHJhbnNsYXRlIH19PC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIG5nYk5hdkl0ZW09XCJvcGVuXCIgW3RpdGxlXT1cIidkb3NzaWVyLnRhYnMuT1BFTicgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDxhIG5nYk5hdkxpbms+e3sgJ2Rvc3NpZXIudGFicy5PUEVOJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|