@valtimo/object-management 10.4.0 → 10.5.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.
Files changed (21) hide show
  1. package/esm2020/lib/components/object-management-detail-container/object-management-detail-container.component.mjs +4 -4
  2. package/esm2020/lib/components/object-management-detail-container/tabs/object-management-detail/object-management-detail.component.mjs +4 -5
  3. package/esm2020/lib/components/object-management-detail-container/tabs/object-management-list-columns/object-management-list-columns.component.mjs +4 -4
  4. package/esm2020/lib/components/object-management-detail-container/tabs/object-management-list-search-fields/object-management-list-search-fields.component.mjs +4 -5
  5. package/esm2020/lib/components/object-management-list/object-management-list.component.mjs +4 -4
  6. package/esm2020/lib/components/object-management-modal/object-management-modal.component.mjs +6 -6
  7. package/esm2020/lib/components/object-management-upload-modal/object-management-upload-modal.component.mjs +4 -4
  8. package/esm2020/lib/models/object-management.model.mjs +16 -1
  9. package/esm2020/lib/object-management-routing.module.mjs +2 -2
  10. package/esm2020/lib/object-management.module.mjs +2 -2
  11. package/esm2020/lib/services/object-management-state.service.mjs +2 -2
  12. package/esm2020/lib/services/object-management.service.mjs +2 -2
  13. package/esm2020/lib/services/tab.enum.mjs +16 -1
  14. package/esm2020/lib/services/tab.service.mjs +2 -2
  15. package/esm2020/public-api.mjs +2 -2
  16. package/fesm2015/valtimo-object-management.mjs +44 -31
  17. package/fesm2015/valtimo-object-management.mjs.map +1 -1
  18. package/fesm2020/valtimo-object-management.mjs +60 -31
  19. package/fesm2020/valtimo-object-management.mjs.map +1 -1
  20. package/lib/models/object-management.model.d.ts +13 -0
  21. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2015-2020 Ritense BV, the Netherlands.
2
+ * Copyright 2015-2023 Ritense BV, the Netherlands.
3
3
  *
4
4
  * Licensed under EUPL, Version 1.2 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -227,7 +227,6 @@ export class ObjectManagementListSearchFieldsComponent {
227
227
  .pipe(take(1))
228
228
  .subscribe(([dataTypeItems, fieldTypeItems]) => {
229
229
  const column = this.cachedObjectManagementListSearchFields.find(cachedColumn => cachedColumn.key === row.key);
230
- console.log(dataTypeItems);
231
230
  const dataTypeItem = dataTypeItems.find(item => item.key === column.dataType);
232
231
  const dataTypeItemIndex = dataTypeItems.findIndex(item => item.key === column.dataType);
233
232
  const fieldTypeItem = fieldTypeItems.find(item => item.key === column.fieldType);
@@ -314,12 +313,12 @@ export class ObjectManagementListSearchFieldsComponent {
314
313
  }
315
314
  }
316
315
  ObjectManagementListSearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectManagementListSearchFieldsComponent, deps: [{ token: i1.ObjectManagementService }, { token: i2.ActivatedRoute }, { token: i3.TranslateService }, { token: i4.ConfigService }, { token: i5.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
317
- ObjectManagementListSearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectManagementListSearchFieldsComponent, selector: "valtimo-object-management-list-search-fields", viewQueries: [{ propertyName: "moveRowButtonsTemplateRef", first: true, predicate: ["moveRowButtons"], 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<ng-container\n *ngIf=\"{\n searchFields: translatedObjectManagementListSearchFields$ | async,\n fields: objectManagementFields$ | async,\n objectId: objectId$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n loading: loading$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3 mr-2\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"!obs.loading; else loading\">\n <ng-container *ngIf=\"obs.searchFields?.length > 0; else noConfigWarning\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <a\n ibmLink\n class=\"center-link\"\n [href]=\"obs.downloadUrl\"\n [download]=\"obs.downloadName\"\n [disabled]=\"\n !obs.downloadUrl ||\n !obs.downloadName ||\n obs.searchFields?.length < 1 ||\n obs.disableInput ||\n obs.loading\n \"\n >\n {{ 'searchFieldsOverview.download' | translate }}\n </a>\n <button\n (click)=\"openModal('create')\"\n ibmButton=\"primary\"\n size=\"md\"\n [disabled]=\"obs.loading\"\n class=\"ml-3\"\n >\n {{ 'searchFieldsOverview.add' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #moveRowButtons let-index=\"index\" let-length=\"length\">\n <div\n class=\"move-row-buttons\"\n *ngIf=\"{\n disableInput: disableInput$ | async,\n objectId: objectId$ | async\n } as obs\"\n >\n <i\n class=\"mdi mdi-delete btn btn-outline-danger mr-1\"\n (click)=\"deleteRow(index, $event)\"\n [ngClass]=\"{'disabled disabled-move-row-button': obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-up-bold btn btn-outline-primary mr-1\"\n (click)=\"moveRow(index, true, $event, obs.objectId)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === 0 || obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-down-bold btn btn-outline-secondary\"\n (click)=\"moveRow(index, false, $event, obs.objectId)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === length - 1 || obs.disableInput}\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-list\n [items]=\"obs.searchFields\"\n [fields]=\"obs.fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n *ngIf=\"obs.searchFields; else loading\"\n [lastColumnTemplate]=\"moveRowButtonsTemplateRef\"\n (rowClicked)=\"columnRowClicked($event)\"\n >\n </valtimo-list>\n</ng-template>\n\n<ng-template #createEditModal>\n <ibm-modal\n *ngIf=\"{\n type: currentModalType$ | async,\n show: showModal$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async,\n validKey: validKey$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{\n modalObs.type === 'create'\n ? ('searchFieldsOverview.add' | translate)\n : ('searchFieldsOverview.edit' | translate)\n }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <form [formGroup]=\"formGroup\" class=\"list-column-form\">\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.title' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"title\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label\n [disabled]=\"modalObs.disableInput || modalObs.type === 'edit'\"\n [invalid]=\"modalObs.validKey === false\"\n [invalidText]=\"'searchFieldsOverview.uniqueKeyWarning' | translate\"\n >\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.key' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"key\" [invalid]=\"modalObs.validKey === false\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.path' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"path\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'searchFieldsOverview.dataType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <ibm-dropdown formControlName=\"dataType\" [disabled]=\"modalObs.disableInput\">\n <ibm-dropdown-list [items]=\"dataTypeItems$ | async\"></ibm-dropdown-list>\n </ibm-dropdown>\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'searchFieldsOverview.fieldType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <ibm-dropdown formControlName=\"fieldType\" [disabled]=\"modalObs.disableInput\">\n <ibm-dropdown-list [items]=\"fieldTypeItems$ | async\"></ibm-dropdown-list>\n </ibm-dropdown>\n </ibm-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'searchFieldsOverview.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n [disabled]=\"modalObs.valid === false\"\n (click)=\"saveListSearchFields()\"\n [disabled]=\"\n modalObs.disableInput || modalObs.valid === false || modalObs.validKey === false\n \"\n >\n {{ 'searchFieldsOverview.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteRowIndex$ | async\"\n (confirmEvent)=\"deleteRowConfirmation($event)\"\n confirmButtonTextTranslationKey=\"searchFieldsOverview.deleteSearchField\"\n titleTranslationKey=\"searchFieldsOverview.searchField\"\n contentTranslationKey=\"searchFieldsOverview.deleteSearchFieldConfirmation\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #noConfigWarning>\n <div class=\"pl-2 pr-2 pb-2\">\n <ibm-notification\n [notificationObj]=\"{\n type: 'info',\n title: 'searchFieldsOverview.noSearchFieldsConfiguredWarningTitle' | translate,\n showClose: false\n }\"\n >\n </ibm-notification>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></div>\n</ng-template>\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 */::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--inline-notification{max-width:100%}.label-with-tooltip{display:flex;align-items:center}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:1rem}.display-type-dropdown{width:300px}.list-column-form{margin-bottom:3rem}.select-label{padding-bottom:.5rem;width:250px}.loading-icon{width:100%;display:flex;align-items:center;justify-content:center}.center-link{display:flex;align-items:center}::ng-deep .move-row-buttons{display:flex;flex-direction:row;justify-content:flex-end;padding-right:13px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i8.Label, selector: "ibm-label", inputs: ["labelInputID", "disabled", "labelState", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i8.TextInput, selector: "[ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i8.Button, selector: "[ibmButton]", inputs: ["ibmButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i9.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }, { kind: "component", type: i8.Modal, selector: "ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i8.ModalHeader, selector: "ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i8.ModalFooter, selector: "ibm-modal-footer" }, { kind: "directive", type: i8.ModalContent, selector: "[ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i8.ModalHeaderHeading, selector: "[ibmModalHeaderHeading]" }, { kind: "component", type: i8.Notification, selector: "ibm-notification,ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "component", type: i8.Loading, selector: "ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i8.Dropdown, selector: "ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i8.DropdownList, selector: "ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i8.Link, selector: "[ibmLink]", inputs: ["inline", "disabled"] }, { kind: "directive", type: i8.IconDirective, selector: "[ibmIcon]", inputs: ["ibmIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "cancelButtonText", "cancelButtonTextTranslationKey", "showModalSubject$", "outputOnConfirm"], outputs: ["confirmEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
316
+ ObjectManagementListSearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectManagementListSearchFieldsComponent, selector: "valtimo-object-management-list-search-fields", viewQueries: [{ propertyName: "moveRowButtonsTemplateRef", first: true, predicate: ["moveRowButtons"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 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<ng-container\n *ngIf=\"{\n searchFields: translatedObjectManagementListSearchFields$ | async,\n fields: objectManagementFields$ | async,\n objectId: objectId$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n loading: loading$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3 mr-2\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"!obs.loading; else loading\">\n <ng-container *ngIf=\"obs.searchFields?.length > 0; else noConfigWarning\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <a\n ibmLink\n class=\"center-link\"\n [href]=\"obs.downloadUrl\"\n [download]=\"obs.downloadName\"\n [disabled]=\"\n !obs.downloadUrl ||\n !obs.downloadName ||\n obs.searchFields?.length < 1 ||\n obs.disableInput ||\n obs.loading\n \"\n >\n {{ 'searchFieldsOverview.download' | translate }}\n </a>\n <button\n (click)=\"openModal('create')\"\n ibmButton=\"primary\"\n size=\"md\"\n [disabled]=\"obs.loading\"\n class=\"ml-3\"\n >\n {{ 'searchFieldsOverview.add' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #moveRowButtons let-index=\"index\" let-length=\"length\">\n <div\n class=\"move-row-buttons\"\n *ngIf=\"{\n disableInput: disableInput$ | async,\n objectId: objectId$ | async\n } as obs\"\n >\n <i\n class=\"mdi mdi-delete btn btn-outline-danger mr-1\"\n (click)=\"deleteRow(index, $event)\"\n [ngClass]=\"{'disabled disabled-move-row-button': obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-up-bold btn btn-outline-primary mr-1\"\n (click)=\"moveRow(index, true, $event, obs.objectId)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === 0 || obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-down-bold btn btn-outline-secondary\"\n (click)=\"moveRow(index, false, $event, obs.objectId)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === length - 1 || obs.disableInput}\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-list\n [items]=\"obs.searchFields\"\n [fields]=\"obs.fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n *ngIf=\"obs.searchFields; else loading\"\n [lastColumnTemplate]=\"moveRowButtonsTemplateRef\"\n (rowClicked)=\"columnRowClicked($event)\"\n >\n </valtimo-list>\n</ng-template>\n\n<ng-template #createEditModal>\n <ibm-modal\n *ngIf=\"{\n type: currentModalType$ | async,\n show: showModal$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async,\n validKey: validKey$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{\n modalObs.type === 'create'\n ? ('searchFieldsOverview.add' | translate)\n : ('searchFieldsOverview.edit' | translate)\n }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <form [formGroup]=\"formGroup\" class=\"list-column-form\">\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.title' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"title\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label\n [disabled]=\"modalObs.disableInput || modalObs.type === 'edit'\"\n [invalid]=\"modalObs.validKey === false\"\n [invalidText]=\"'searchFieldsOverview.uniqueKeyWarning' | translate\"\n >\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.key' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"key\" [invalid]=\"modalObs.validKey === false\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.path' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"path\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'searchFieldsOverview.dataType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <ibm-dropdown formControlName=\"dataType\" [disabled]=\"modalObs.disableInput\">\n <ibm-dropdown-list [items]=\"dataTypeItems$ | async\"></ibm-dropdown-list>\n </ibm-dropdown>\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'searchFieldsOverview.fieldType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <ibm-dropdown formControlName=\"fieldType\" [disabled]=\"modalObs.disableInput\">\n <ibm-dropdown-list [items]=\"fieldTypeItems$ | async\"></ibm-dropdown-list>\n </ibm-dropdown>\n </ibm-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'searchFieldsOverview.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n [disabled]=\"modalObs.valid === false\"\n (click)=\"saveListSearchFields()\"\n [disabled]=\"\n modalObs.disableInput || modalObs.valid === false || modalObs.validKey === false\n \"\n >\n {{ 'searchFieldsOverview.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteRowIndex$ | async\"\n (confirmEvent)=\"deleteRowConfirmation($event)\"\n confirmButtonTextTranslationKey=\"searchFieldsOverview.deleteSearchField\"\n titleTranslationKey=\"searchFieldsOverview.searchField\"\n contentTranslationKey=\"searchFieldsOverview.deleteSearchFieldConfirmation\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #noConfigWarning>\n <div class=\"pl-2 pr-2 pb-2\">\n <ibm-notification\n [notificationObj]=\"{\n type: 'info',\n title: 'searchFieldsOverview.noSearchFieldsConfiguredWarningTitle' | translate,\n showClose: false\n }\"\n >\n </ibm-notification>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 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 */::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--inline-notification{max-width:100%}.label-with-tooltip{display:flex;align-items:center}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:1rem}.display-type-dropdown{width:300px}.list-column-form{margin-bottom:3rem}.select-label{padding-bottom:.5rem;width:250px}.loading-icon{width:100%;display:flex;align-items:center;justify-content:center}.center-link{display:flex;align-items:center}::ng-deep .move-row-buttons{display:flex;flex-direction:row;justify-content:flex-end;padding-right:13px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i8.Label, selector: "ibm-label", inputs: ["labelInputID", "disabled", "labelState", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i8.TextInput, selector: "[ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i8.Button, selector: "[ibmButton]", inputs: ["ibmButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i9.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }, { kind: "component", type: i8.Modal, selector: "ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i8.ModalHeader, selector: "ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i8.ModalFooter, selector: "ibm-modal-footer" }, { kind: "directive", type: i8.ModalContent, selector: "[ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i8.ModalHeaderHeading, selector: "[ibmModalHeaderHeading]" }, { kind: "component", type: i8.Notification, selector: "ibm-notification,ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "component", type: i8.Loading, selector: "ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i8.Dropdown, selector: "ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i8.DropdownList, selector: "ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i8.Link, selector: "[ibmLink]", inputs: ["inline", "disabled"] }, { kind: "directive", type: i8.IconDirective, selector: "[ibmIcon]", inputs: ["ibmIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "cancelButtonText", "cancelButtonTextTranslationKey", "showModalSubject$", "outputOnConfirm"], outputs: ["confirmEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
318
317
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectManagementListSearchFieldsComponent, decorators: [{
319
318
  type: Component,
320
- args: [{ selector: 'valtimo-object-management-list-search-fields', 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<ng-container\n *ngIf=\"{\n searchFields: translatedObjectManagementListSearchFields$ | async,\n fields: objectManagementFields$ | async,\n objectId: objectId$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n loading: loading$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3 mr-2\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"!obs.loading; else loading\">\n <ng-container *ngIf=\"obs.searchFields?.length > 0; else noConfigWarning\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <a\n ibmLink\n class=\"center-link\"\n [href]=\"obs.downloadUrl\"\n [download]=\"obs.downloadName\"\n [disabled]=\"\n !obs.downloadUrl ||\n !obs.downloadName ||\n obs.searchFields?.length < 1 ||\n obs.disableInput ||\n obs.loading\n \"\n >\n {{ 'searchFieldsOverview.download' | translate }}\n </a>\n <button\n (click)=\"openModal('create')\"\n ibmButton=\"primary\"\n size=\"md\"\n [disabled]=\"obs.loading\"\n class=\"ml-3\"\n >\n {{ 'searchFieldsOverview.add' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #moveRowButtons let-index=\"index\" let-length=\"length\">\n <div\n class=\"move-row-buttons\"\n *ngIf=\"{\n disableInput: disableInput$ | async,\n objectId: objectId$ | async\n } as obs\"\n >\n <i\n class=\"mdi mdi-delete btn btn-outline-danger mr-1\"\n (click)=\"deleteRow(index, $event)\"\n [ngClass]=\"{'disabled disabled-move-row-button': obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-up-bold btn btn-outline-primary mr-1\"\n (click)=\"moveRow(index, true, $event, obs.objectId)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === 0 || obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-down-bold btn btn-outline-secondary\"\n (click)=\"moveRow(index, false, $event, obs.objectId)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === length - 1 || obs.disableInput}\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-list\n [items]=\"obs.searchFields\"\n [fields]=\"obs.fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n *ngIf=\"obs.searchFields; else loading\"\n [lastColumnTemplate]=\"moveRowButtonsTemplateRef\"\n (rowClicked)=\"columnRowClicked($event)\"\n >\n </valtimo-list>\n</ng-template>\n\n<ng-template #createEditModal>\n <ibm-modal\n *ngIf=\"{\n type: currentModalType$ | async,\n show: showModal$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async,\n validKey: validKey$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{\n modalObs.type === 'create'\n ? ('searchFieldsOverview.add' | translate)\n : ('searchFieldsOverview.edit' | translate)\n }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <form [formGroup]=\"formGroup\" class=\"list-column-form\">\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.title' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"title\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label\n [disabled]=\"modalObs.disableInput || modalObs.type === 'edit'\"\n [invalid]=\"modalObs.validKey === false\"\n [invalidText]=\"'searchFieldsOverview.uniqueKeyWarning' | translate\"\n >\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.key' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"key\" [invalid]=\"modalObs.validKey === false\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.path' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"path\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'searchFieldsOverview.dataType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <ibm-dropdown formControlName=\"dataType\" [disabled]=\"modalObs.disableInput\">\n <ibm-dropdown-list [items]=\"dataTypeItems$ | async\"></ibm-dropdown-list>\n </ibm-dropdown>\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'searchFieldsOverview.fieldType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <ibm-dropdown formControlName=\"fieldType\" [disabled]=\"modalObs.disableInput\">\n <ibm-dropdown-list [items]=\"fieldTypeItems$ | async\"></ibm-dropdown-list>\n </ibm-dropdown>\n </ibm-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'searchFieldsOverview.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n [disabled]=\"modalObs.valid === false\"\n (click)=\"saveListSearchFields()\"\n [disabled]=\"\n modalObs.disableInput || modalObs.valid === false || modalObs.validKey === false\n \"\n >\n {{ 'searchFieldsOverview.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteRowIndex$ | async\"\n (confirmEvent)=\"deleteRowConfirmation($event)\"\n confirmButtonTextTranslationKey=\"searchFieldsOverview.deleteSearchField\"\n titleTranslationKey=\"searchFieldsOverview.searchField\"\n contentTranslationKey=\"searchFieldsOverview.deleteSearchFieldConfirmation\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #noConfigWarning>\n <div class=\"pl-2 pr-2 pb-2\">\n <ibm-notification\n [notificationObj]=\"{\n type: 'info',\n title: 'searchFieldsOverview.noSearchFieldsConfiguredWarningTitle' | translate,\n showClose: false\n }\"\n >\n </ibm-notification>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></div>\n</ng-template>\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 */::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--inline-notification{max-width:100%}.label-with-tooltip{display:flex;align-items:center}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:1rem}.display-type-dropdown{width:300px}.list-column-form{margin-bottom:3rem}.select-label{padding-bottom:.5rem;width:250px}.loading-icon{width:100%;display:flex;align-items:center;justify-content:center}.center-link{display:flex;align-items:center}::ng-deep .move-row-buttons{display:flex;flex-direction:row;justify-content:flex-end;padding-right:13px}\n"] }]
319
+ args: [{ selector: 'valtimo-object-management-list-search-fields', template: "<!--\n ~ Copyright 2015-2023 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<ng-container\n *ngIf=\"{\n searchFields: translatedObjectManagementListSearchFields$ | async,\n fields: objectManagementFields$ | async,\n objectId: objectId$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n loading: loading$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3 mr-2\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"!obs.loading; else loading\">\n <ng-container *ngIf=\"obs.searchFields?.length > 0; else noConfigWarning\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <a\n ibmLink\n class=\"center-link\"\n [href]=\"obs.downloadUrl\"\n [download]=\"obs.downloadName\"\n [disabled]=\"\n !obs.downloadUrl ||\n !obs.downloadName ||\n obs.searchFields?.length < 1 ||\n obs.disableInput ||\n obs.loading\n \"\n >\n {{ 'searchFieldsOverview.download' | translate }}\n </a>\n <button\n (click)=\"openModal('create')\"\n ibmButton=\"primary\"\n size=\"md\"\n [disabled]=\"obs.loading\"\n class=\"ml-3\"\n >\n {{ 'searchFieldsOverview.add' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #moveRowButtons let-index=\"index\" let-length=\"length\">\n <div\n class=\"move-row-buttons\"\n *ngIf=\"{\n disableInput: disableInput$ | async,\n objectId: objectId$ | async\n } as obs\"\n >\n <i\n class=\"mdi mdi-delete btn btn-outline-danger mr-1\"\n (click)=\"deleteRow(index, $event)\"\n [ngClass]=\"{'disabled disabled-move-row-button': obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-up-bold btn btn-outline-primary mr-1\"\n (click)=\"moveRow(index, true, $event, obs.objectId)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === 0 || obs.disableInput}\"\n ></i>\n <i\n class=\"mdi mdi-arrow-down-bold btn btn-outline-secondary\"\n (click)=\"moveRow(index, false, $event, obs.objectId)\"\n [ngClass]=\"{'disabled disabled-move-row-button': index === length - 1 || obs.disableInput}\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-list\n [items]=\"obs.searchFields\"\n [fields]=\"obs.fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n *ngIf=\"obs.searchFields; else loading\"\n [lastColumnTemplate]=\"moveRowButtonsTemplateRef\"\n (rowClicked)=\"columnRowClicked($event)\"\n >\n </valtimo-list>\n</ng-template>\n\n<ng-template #createEditModal>\n <ibm-modal\n *ngIf=\"{\n type: currentModalType$ | async,\n show: showModal$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async,\n validKey: validKey$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{\n modalObs.type === 'create'\n ? ('searchFieldsOverview.add' | translate)\n : ('searchFieldsOverview.edit' | translate)\n }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <form [formGroup]=\"formGroup\" class=\"list-column-form\">\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.title' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"title\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label\n [disabled]=\"modalObs.disableInput || modalObs.type === 'edit'\"\n [invalid]=\"modalObs.validKey === false\"\n [invalidText]=\"'searchFieldsOverview.uniqueKeyWarning' | translate\"\n >\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.key' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"key\" [invalid]=\"modalObs.validKey === false\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'searchFieldsOverview.path' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <input ibmText formControlName=\"path\" />\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'searchFieldsOverview.dataType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <ibm-dropdown formControlName=\"dataType\" [disabled]=\"modalObs.disableInput\">\n <ibm-dropdown-list [items]=\"dataTypeItems$ | async\"></ibm-dropdown-list>\n </ibm-dropdown>\n </ibm-label>\n </div>\n <div class=\"cds--text-input__field-wrapper\">\n <ibm-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'searchFieldsOverview.fieldType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n <ibm-dropdown formControlName=\"fieldType\" [disabled]=\"modalObs.disableInput\">\n <ibm-dropdown-list [items]=\"fieldTypeItems$ | async\"></ibm-dropdown-list>\n </ibm-dropdown>\n </ibm-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'searchFieldsOverview.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n [disabled]=\"modalObs.valid === false\"\n (click)=\"saveListSearchFields()\"\n [disabled]=\"\n modalObs.disableInput || modalObs.valid === false || modalObs.validKey === false\n \"\n >\n {{ 'searchFieldsOverview.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteRowIndex$ | async\"\n (confirmEvent)=\"deleteRowConfirmation($event)\"\n confirmButtonTextTranslationKey=\"searchFieldsOverview.deleteSearchField\"\n titleTranslationKey=\"searchFieldsOverview.searchField\"\n contentTranslationKey=\"searchFieldsOverview.deleteSearchFieldConfirmation\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #noConfigWarning>\n <div class=\"pl-2 pr-2 pb-2\">\n <ibm-notification\n [notificationObj]=\"{\n type: 'info',\n title: 'searchFieldsOverview.noSearchFieldsConfiguredWarningTitle' | translate,\n showClose: false\n }\"\n >\n </ibm-notification>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 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 */::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--inline-notification{max-width:100%}.label-with-tooltip{display:flex;align-items:center}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:1rem}.display-type-dropdown{width:300px}.list-column-form{margin-bottom:3rem}.select-label{padding-bottom:.5rem;width:250px}.loading-icon{width:100%;display:flex;align-items:center;justify-content:center}.center-link{display:flex;align-items:center}::ng-deep .move-row-buttons{display:flex;flex-direction:row;justify-content:flex-end;padding-right:13px}\n"] }]
321
320
  }], ctorParameters: function () { return [{ type: i1.ObjectManagementService }, { type: i2.ActivatedRoute }, { type: i3.TranslateService }, { type: i4.ConfigService }, { type: i5.DomSanitizer }]; }, propDecorators: { moveRowButtonsTemplateRef: [{
322
321
  type: ViewChild,
323
322
  args: ['moveRowButtons']
324
323
  }] } });
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vb2JqZWN0LW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL29iamVjdC1tYW5hZ2VtZW50LWRldGFpbC1jb250YWluZXIvdGFicy9vYmplY3QtbWFuYWdlbWVudC1saXN0LXNlYXJjaC1maWVsZHMvb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vb2JqZWN0LW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL29iamVjdC1tYW5hZ2VtZW50LWRldGFpbC1jb250YWluZXIvdGFicy9vYmplY3QtbWFuYWdlbWVudC1saXN0LXNlYXJjaC1maWVsZHMvb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBZSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBV2QsT0FBTyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBV2xFLE1BQU0sT0FBTyx5Q0FBeUM7SUF3THBELFlBQ21C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UUE7NEZEbE5hLHlDQUF5QztrQkFMckQsU0FBUzsrQkFDRSw4Q0FBOEM7aU9BS3BCLHlCQUF5QjtzQkFBNUQsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3RhcnRXaXRoLFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVVybH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge1xuICBDb25maWdTZXJ2aWNlLFxuICBEZWZpbml0aW9uQ29sdW1uLFxuICBTZWFyY2hGaWVsZCxcbiAgU2VhcmNoRmllbGRDb2x1bW5WaWV3LFxuICBTZWFyY2hGaWVsZERhdGFUeXBlLFxuICBTZWFyY2hGaWVsZEZpZWxkVHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7TGlzdEZpZWxkfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0xpc3RJdGVtfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2Ryb3Bkb3duL2xpc3QtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge09iamVjdE1hbmFnZW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9vYmplY3QtbWFuYWdlbWVudC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1vYmplY3QtbWFuYWdlbWVudC1saXN0LXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnbW92ZVJvd0J1dHRvbnMnKSBwdWJsaWMgbW92ZVJvd0J1dHRvbnNUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgcmVhZG9ubHkgZG93bmxvYWROYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVVybD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBjdXJyZW50TW9kYWxUeXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignY3JlYXRlJyk7XG4gIHJlYWRvbmx5IHNob3dNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzaG93RGVsZXRlTW9kYWwkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGVsZXRlUm93SW5kZXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gIHJlYWRvbmx5IElOVkFMSURfS0VZID0gJ2ludmFsaWQnO1xuICByZWFkb25seSBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICB0aXRsZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBrZXk6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgcGF0aDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBkYXRhVHlwZTogbmV3IEZvcm1Db250cm9sKHtcbiAgICAgIGtleTogdGhpcy5JTlZBTElEX0tFWSxcbiAgICB9KSxcbiAgICBmaWVsZFR5cGU6IG5ldyBGb3JtQ29udHJvbCh7XG4gICAgICBrZXk6IHRoaXMuSU5WQUxJRF9LRVksXG4gICAgfSksXG4gIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IENPTFVNTlM6IEFycmF5PERlZmluaXRpb25Db2x1bW4+ID0gW1xuICAgIHtcbiAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5TmFtZTogJ3RpdGxlJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAndGl0bGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6ICdzdHJpbmcnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcHJvcGVydHlOYW1lOiAna2V5JyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAna2V5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5TmFtZTogJ3BhdGgnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdwYXRoJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5TmFtZTogJ2RhdGFUeXBlJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZGF0YVR5cGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6ICdzdHJpbmcnLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcHJvcGVydHlOYW1lOiAnZmllbGRUeXBlJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZmllbGRUeXBlJyxcbiAgICB9LFxuICBdO1xuICByZWFkb25seSBEQVRBX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZERhdGFUeXBlPiA9IFtcbiAgICAndGV4dCcsXG4gICAgJ251bWJlcicsXG4gICAgJ2RhdGUnLFxuICAgICdkYXRldGltZScsXG4gICAgJ2Jvb2xlYW4nLFxuICBdO1xuICBwcml2YXRlIHJlYWRvbmx5IEZJRUxEX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEZpZWxkVHlwZT4gPSBbJ3NpbmdsZScsICdyYW5nZSddO1xuICBwcml2YXRlIGNhY2hlZE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWZyZXNoT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsPihudWxsKTtcblxuICByZWFkb25seSBvYmplY3RNYW5hZ2VtZW50RmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0RmllbGQ+PiA9IHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgIC5zdHJlYW0oJ2tleScpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKCkgPT5cbiAgICAgICAgdGhpcy5DT0xVTU5TLm1hcChjb2x1bW4gPT4gKHtcbiAgICAgICAgICBrZXk6IGNvbHVtbi5wcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke2NvbHVtbi50cmFuc2xhdGlvbktleX1gKSxcbiAgICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnRhYmxlLFxuICAgICAgICAgIC4uLihjb2x1bW4udmlld1R5cGUgJiYge3ZpZXdUeXBlOiBjb2x1bW4udmlld1R5cGV9KSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICByZWFkb25seSBvYmplY3RJZCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgbWFwKHBhcmFtcyA9PiBwYXJhbXMuaWQgfHwgJycpLFxuICAgIGZpbHRlcihvYmplY3RJZCA9PiAhIW9iamVjdElkKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PGFueT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5vYmplY3RJZCQsXG4gICAgdGhpcy5yZWZyZXNoT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMkLFxuICBdKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW29iamVjdElkXSkgPT4gdGhpcy5vYmplY3RNYW5hZ2VtZW50U2VydmljZS5nZXRTZWFyY2hGaWVsZChvYmplY3RJZCkpLFxuICAgIHRhcChvYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcyA9PiB7XG4gICAgICB0aGlzLm9iamVjdElkJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShvYmplY3RJZCA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBvYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcyAmJlxuICAgICAgICAgIEFycmF5LmlzQXJyYXkob2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMpICYmXG4gICAgICAgICAgb2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNldERvd25sb2FkKG9iamVjdElkLCBvYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHRhcChvYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcyA9PiB7XG4gICAgICB0aGlzLmNhY2hlZE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzID0gb2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHM7XG4gICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgdHJhbnNsYXRlZE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZENvbHVtblZpZXc+PiA9XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzJCxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtjb2x1bW5zXSkgPT5cbiAgICAgICAgY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgIHRpdGxlOiBjb2x1bW4udGl0bGUgfHwgJy0nLFxuICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgIGBzZWFyY2hGaWVsZHMuJHtjb2x1bW4/LmRhdGFUeXBlPy50b0xvd2VyQ2FzZSgpfWBcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpZWxkVHlwZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICBgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtjb2x1bW4/LmZpZWxkVHlwZT8udG9Mb3dlckNhc2UoKX1gXG4gICAgICAgICAgKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZERhdGFUeXBlSXRlbUluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcblxuICByZWFkb25seSBkYXRhVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5zZWxlY3RlZERhdGFUeXBlSXRlbUluZGV4JCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtzZWxlY3RlZERhdGFUeXBlSXRlbUluZGV4XSkgPT5cbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZERhdGFUeXBlLnNlbGVjdGApLFxuICAgICAgICAgIGtleTogdGhpcy5JTlZBTElEX0tFWSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4udGhpcy5EQVRBX1RZUEVTLm1hcCh0eXBlID0+ICh7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkcy4ke3R5cGV9YCksXG4gICAgICAgICAga2V5OiB0eXBlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIH0pKSxcbiAgICAgIF0ubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgc2VsZWN0ZWQ6IGluZGV4ID09PSBzZWxlY3RlZERhdGFUeXBlSXRlbUluZGV4LFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRmllbGRUeXBlSXRlbUluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgZmllbGRUeXBlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGRUeXBlSXRlbUluZGV4JCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtzZWxlY3RlZEZpZWxkVHlwZUl0ZW1JbmRleF0pID0+XG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRGaWVsZFR5cGUuc2VsZWN0YCksXG4gICAgICAgICAga2V5OiB0aGlzLklOVkFMSURfS0VZLFxuICAgICAgICB9LFxuICAgICAgICAuLi50aGlzLkZJRUxEX1RZUEVTLm1hcCh0eXBlID0+ICh7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7dHlwZX1gKSxcbiAgICAgICAgICBrZXk6IHR5cGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgfSkpLFxuICAgICAgXS5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBzZWxlY3RlZDogaW5kZXggPT09IHNlbGVjdGVkRmllbGRUeXBlSXRlbUluZGV4LFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHZhbGlkS2V5JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcywgdGhpcy5jdXJyZW50TW9kYWxUeXBlJF0pLnBpcGUoXG4gICAgbWFwKChbZm9ybVZhbHVlcywgY3VycmVudE1vZGFsVHlwZV0pID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IHRoaXMuY2FjaGVkT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMubWFwKGNvbHVtbiA9PiBjb2x1bW4ua2V5KTtcbiAgICAgIHJldHVybiBjdXJyZW50TW9kYWxUeXBlID09PSAnY3JlYXRlJyA/ICFleGlzdGluZ0tleXMuaW5jbHVkZXMoZm9ybVZhbHVlcy5rZXkpIDogdHJ1ZTtcbiAgICB9KSxcbiAgICBzdGFydFdpdGgoZmFsc2UpXG4gICk7XG5cbiAgcmVhZG9ubHkgdmFsaWQkID0gY29tYmluZUxhdGVzdChbdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLCB0aGlzLnZhbGlkS2V5JF0pLnBpcGUoXG4gICAgbWFwKChbZm9ybVZhbHVlcywgdmFsaWRLZXldKSA9PiAhIShmb3JtVmFsdWVzLnBhdGggJiYgdmFsaWRLZXkpKSxcbiAgICBzdGFydFdpdGgoZmFsc2UpXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RNYW5hZ2VtZW50U2VydmljZTogT2JqZWN0TWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICkge31cblxuICBvcGVuTW9kYWwobW9kYWxUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNb2RhbCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmN1cnJlbnRNb2RhbFR5cGUkLm5leHQobW9kYWxUeXBlKTtcblxuICAgIGlmIChtb2RhbFR5cGUgPT09ICdjcmVhdGUnKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1sna2V5J10uZW5hYmxlKCk7XG4gICAgICB0aGlzLnJlc2V0Rm9ybUdyb3VwKCk7XG4gICAgfSBlbHNlIGlmIChtb2RhbFR5cGUgPT09ICdlZGl0Jykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbJ2tleSddLmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01vZGFsJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGRlbGV0ZVJvdyhsaXN0U2VhcmNoRmllbGRSb3dJbmRleDogbnVtYmVyLCBjbGlja0V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY2xpY2tFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc2hvd0RlbGV0ZU1vZGFsJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVsZXRlUm93SW5kZXgkLm5leHQobGlzdFNlYXJjaEZpZWxkUm93SW5kZXgpO1xuICB9XG5cbiAgZGVsZXRlUm93Q29uZmlybWF0aW9uKGxpc3RTZWFyY2hGaWVsZFJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5LZXkgPSB0aGlzLmdldENvbHVtbktleShsaXN0U2VhcmNoRmllbGRSb3dJbmRleCk7XG5cbiAgICBpZiAoY29sdW1uS2V5KSB7XG4gICAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgICB0aGlzLm9iamVjdElkJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIHN3aXRjaE1hcChvYmplY3RJZCA9PlxuICAgICAgICAgICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U2VydmljZS5kZWxldGVTZWFyY2hGaWVsZChvYmplY3RJZCwgY29sdW1uS2V5KVxuICAgICAgICAgICksXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMucmVmcmVzaE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzKCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbHVtbktleShsaXN0U2VhcmNoRmllbGRSb3dJbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHNbbGlzdFNlYXJjaEZpZWxkUm93SW5kZXhdPy5rZXk7XG4gIH1cblxuICBtb3ZlUm93KFxuICAgIGxpc3RTZWFyY2hGaWVsZFJvd0luZGV4OiBudW1iZXIsXG4gICAgbW92ZVVwOiBib29sZWFuLFxuICAgIGNsaWNrRXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgb2JqZWN0SWQ6IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBvYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcyA9IFsuLi50aGlzLmNhY2hlZE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzXTtcbiAgICBjb25zdCBsaXN0U2VhcmNoRmllbGRSb3cgPSBvYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkc1tsaXN0U2VhcmNoRmllbGRSb3dJbmRleF07XG5cbiAgICBjbGlja0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgc2F2ZUxpc3RTZWFyY2hGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQoKTtcblxuICAgIHRoaXMuY3VycmVudE1vZGFsVHlwZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY3VycmVudE1vZGFsVHlwZSA9PiB7XG4gICAgICBpZiAoY3VycmVudE1vZGFsVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hGaWVsZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWVsZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29sdW1uUm93Q2xpY2tlZChyb3c6IHtrZXk6IHN0cmluZ30pOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0Rm9ybUdyb3VwKCk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGFUeXBlSXRlbXMkLCB0aGlzLmZpZWxkVHlwZUl0ZW1zJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW2RhdGFUeXBlSXRlbXMsIGZpZWxkVHlwZUl0ZW1zXSkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNhY2hlZE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzLmZpbmQoXG4gICAgICAgICAgY2FjaGVkQ29sdW1uID0+IGNhY2hlZENvbHVtbi5rZXkgPT09IHJvdy5rZXlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YVR5cGVJdGVtcyk7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlSXRlbSA9IGRhdGFUeXBlSXRlbXMuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBjb2x1bW4uZGF0YVR5cGUpO1xuICAgICAgICBjb25zdCBkYXRhVHlwZUl0ZW1JbmRleCA9IGRhdGFUeXBlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5rZXkgPT09IGNvbHVtbi5kYXRhVHlwZSk7XG5cbiAgICAgICAgY29uc3QgZmllbGRUeXBlSXRlbSA9IGZpZWxkVHlwZUl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0gY29sdW1uLmZpZWxkVHlwZSk7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZUl0ZW1JbmRleCA9IGZpZWxkVHlwZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ua2V5ID09PSBjb2x1bW4uZmllbGRUeXBlKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVR5cGVJdGVtSW5kZXgkLm5leHQoZGF0YVR5cGVJdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGRUeXBlSXRlbUluZGV4JC5uZXh0KGZpZWxkVHlwZUl0ZW1JbmRleCk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAga2V5OiBjb2x1bW4ua2V5LFxuICAgICAgICAgIHRpdGxlOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgcGF0aDogY29sdW1uLnBhdGgsXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGRhdGFUeXBlOiB7Li4uZGF0YVR5cGVJdGVtfSxcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZmllbGRUeXBlOiB7Li4uZmllbGRUeXBlSXRlbX0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3Blbk1vZGFsKCdlZGl0Jyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZChvYmplY3RJZDogc3RyaW5nLCBzZWFyY2hGaWVsZDogU2VhcmNoRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuICAgIHRoaXMub2JqZWN0TWFuYWdlbWVudFNlcnZpY2VcbiAgICAgIC5wdXRTZWFyY2hGaWVsZChvYmplY3RJZCwgdGhpcy5mb3JtR3JvdXAudmFsdWUua2V5LCBzZWFyY2hGaWVsZClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVmcmVzaE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzKCk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYGxpc3Qtc2VhcmNoLWZpZWxkcyR7b2JqZWN0SWR9YCwgbnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWFyY2hGaWVsZCgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblxuICAgIHRoaXMub2JqZWN0SWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKG9iamVjdElkID0+XG4gICAgICAgICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U2VydmljZS5wb3N0U2VhcmNoRmllbGQoXG4gICAgICAgICAgICBvYmplY3RJZCxcbiAgICAgICAgICAgIHRoaXMubWFwRm9ybVZhbHVlc1RvQ29sdW1uKGZvcm1WYWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaEZpZWxkKCk6IHZvaWQge1xuICAgIHRoaXMub2JqZWN0SWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKG9iamVjdElkID0+XG4gICAgICAgICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U2VydmljZS5wdXRTZWFyY2hGaWVsZChcbiAgICAgICAgICAgIG9iamVjdElkLFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWUua2V5LFxuICAgICAgICAgICAgdGhpcy5tYXBGb3JtVmFsdWVzVG9Db2x1bW4odGhpcy5mb3JtR3JvdXAudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICAgICAgICAgIHRoaXMucmVmcmVzaE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREb3dubG9hZChvYmplY3RJZDogc3RyaW5nLCBPYmplY3RNYW5hZ2VtZW50U2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pOiB2b2lkIHtcbiAgICB0aGlzLmRvd25sb2FkTmFtZSQubmV4dChgJHtvYmplY3RJZH0uanNvbmApO1xuICAgIHRoaXMuZG93bmxvYWRVcmwkLm5leHQoXG4gICAgICB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxuICAgICAgICAnZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCwnICtcbiAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoT2JqZWN0TWFuYWdlbWVudFNlYXJjaEZpZWxkcywgbnVsbCwgMikpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Rm9ybUdyb3VwKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnJlc2V0KCk7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFUeXBlSXRlbUluZGV4JC5uZXh0KDApO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZFR5cGVJdGVtSW5kZXgkLm5leHQoMCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEZvcm1WYWx1ZXNUb0NvbHVtbihmb3JtVmFsdWU6IGFueSk6IFNlYXJjaEZpZWxkIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBmb3JtVmFsdWUua2V5LFxuICAgICAgdGl0bGU6IGZvcm1WYWx1ZS50aXRsZSB8fCAnJyxcbiAgICAgIHBhdGg6IGZvcm1WYWx1ZS5wYXRoLFxuICAgICAgZGF0YVR5cGU6IGZvcm1WYWx1ZS5kYXRhVHlwZS5rZXksXG4gICAgICBmaWVsZFR5cGU6IGZvcm1WYWx1ZS5maWVsZFR5cGUua2V5LFxuICAgIH07XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgc2VhcmNoRmllbGRzOiB0cmFuc2xhdGVkT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgZmllbGRzOiBvYmplY3RNYW5hZ2VtZW50RmllbGRzJCB8IGFzeW5jLFxuICAgIG9iamVjdElkOiBvYmplY3RJZCQgfCBhc3luYyxcbiAgICBkb3dubG9hZFVybDogZG93bmxvYWRVcmwkIHwgYXN5bmMsXG4gICAgZG93bmxvYWROYW1lOiBkb3dubG9hZE5hbWUkIHwgYXN5bmMsXG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgcHItMCBwbC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgbXQtbTNweCBtYi0zIG1yLTJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnM7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhb2JzLmxvYWRpbmc7IGVsc2UgbG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9icy5zZWFyY2hGaWVsZHM/Lmxlbmd0aCA+IDA7IGVsc2Ugbm9Db25maWdXYXJuaW5nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0OyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3JlYXRlRWRpdE1vZGFsXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlbGV0ZU1vZGFsXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9ucyBsZXQtb2JzPVwib2JzXCI+XG4gIDxhXG4gICAgaWJtTGlua1xuICAgIGNsYXNzPVwiY2VudGVyLWxpbmtcIlxuICAgIFtocmVmXT1cIm9icy5kb3dubG9hZFVybFwiXG4gICAgW2Rvd25sb2FkXT1cIm9icy5kb3dubG9hZE5hbWVcIlxuICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICFvYnMuZG93bmxvYWRVcmwgfHxcbiAgICAgICFvYnMuZG93bmxvYWROYW1lIHx8XG4gICAgICBvYnMuc2VhcmNoRmllbGRzPy5sZW5ndGggPCAxIHx8XG4gICAgICBvYnMuZGlzYWJsZUlucHV0IHx8XG4gICAgICBvYnMubG9hZGluZ1xuICAgIFwiXG4gID5cbiAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYT5cbiAgPGJ1dHRvblxuICAgIChjbGljayk9XCJvcGVuTW9kYWwoJ2NyZWF0ZScpXCJcbiAgICBpYm1CdXR0b249XCJwcmltYXJ5XCJcbiAgICBzaXplPVwibWRcIlxuICAgIFtkaXNhYmxlZF09XCJvYnMubG9hZGluZ1wiXG4gICAgY2xhc3M9XCJtbC0zXCJcbiAgPlxuICAgIHt7ICdzZWFyY2hGaWVsZHNPdmVydmlldy5hZGQnIHwgdHJhbnNsYXRlIH19XG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgaWJtSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW92ZVJvd0J1dHRvbnMgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtbGVuZ3RoPVwibGVuZ3RoXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1vdmUtcm93LWJ1dHRvbnNcIlxuICAgICpuZ0lmPVwie1xuICAgICAgZGlzYWJsZUlucHV0OiBkaXNhYmxlSW5wdXQkIHwgYXN5bmMsXG4gICAgICBvYmplY3RJZDogb2JqZWN0SWQkIHwgYXN5bmNcbiAgICB9IGFzIG9ic1wiXG4gID5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtZGkgbWRpLWRlbGV0ZSBidG4gYnRuLW91dGxpbmUtZGFuZ2VyIG1yLTFcIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdyhpbmRleCwgJGV2ZW50KVwiXG4gICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkIGRpc2FibGVkLW1vdmUtcm93LWJ1dHRvbic6IG9icy5kaXNhYmxlSW5wdXR9XCJcbiAgICA+PC9pPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm1kaSBtZGktYXJyb3ctdXAtYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBtci0xXCJcbiAgICAgIChjbGljayk9XCJtb3ZlUm93KGluZGV4LCB0cnVlLCAkZXZlbnQsIG9icy5vYmplY3RJZClcIlxuICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCBkaXNhYmxlZC1tb3ZlLXJvdy1idXR0b24nOiBpbmRleCA9PT0gMCB8fCBvYnMuZGlzYWJsZUlucHV0fVwiXG4gICAgPjwvaT5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtZGkgbWRpLWFycm93LWRvd24tYm9sZCBidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgIChjbGljayk9XCJtb3ZlUm93KGluZGV4LCBmYWxzZSwgJGV2ZW50LCBvYnMub2JqZWN0SWQpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQgZGlzYWJsZWQtbW92ZS1yb3ctYnV0dG9uJzogaW5kZXggPT09IGxlbmd0aCAtIDEgfHwgb2JzLmRpc2FibGVJbnB1dH1cIlxuICAgID48L2k+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPHZhbHRpbW8tbGlzdFxuICAgIFtpdGVtc109XCJvYnMuc2VhcmNoRmllbGRzXCJcbiAgICBbZmllbGRzXT1cIm9icy5maWVsZHNcIlxuICAgIFt2aWV3TW9kZV09XCJmYWxzZVwiXG4gICAgW2hlYWRlcl09XCJmYWxzZVwiXG4gICAgKm5nSWY9XCJvYnMuc2VhcmNoRmllbGRzOyBlbHNlIGxvYWRpbmdcIlxuICAgIFtsYXN0Q29sdW1uVGVtcGxhdGVdPVwibW92ZVJvd0J1dHRvbnNUZW1wbGF0ZVJlZlwiXG4gICAgKHJvd0NsaWNrZWQpPVwiY29sdW1uUm93Q2xpY2tlZCgkZXZlbnQpXCJcbiAgPlxuICA8L3ZhbHRpbW8tbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3JlYXRlRWRpdE1vZGFsPlxuICA8aWJtLW1vZGFsXG4gICAgKm5nSWY9XCJ7XG4gICAgICB0eXBlOiBjdXJyZW50TW9kYWxUeXBlJCB8IGFzeW5jLFxuICAgICAgc2hvdzogc2hvd01vZGFsJCB8IGFzeW5jLFxuICAgICAgdmFsaWQ6IHZhbGlkJCB8IGFzeW5jLFxuICAgICAgZGlzYWJsZUlucHV0OiBkaXNhYmxlSW5wdXQkIHwgYXN5bmMsXG4gICAgICB2YWxpZEtleTogdmFsaWRLZXkkIHwgYXN5bmNcbiAgICB9IGFzIG1vZGFsT2JzXCJcbiAgICBbb3Blbl09XCJtb2RhbE9icy5zaG93XCJcbiAgPlxuICAgIDxpYm0tbW9kYWwtaGVhZGVyIFtzaG93Q2xvc2VCdXR0b25dPVwidHJ1ZVwiIChjbG9zZVNlbGVjdCk9XCJjbG9zZU1vZGFsKClcIj5cbiAgICAgIDxoMyBpYm1Nb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7XG4gICAgICAgICAgbW9kYWxPYnMudHlwZSA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgID8gKCdzZWFyY2hGaWVsZHNPdmVydmlldy5hZGQnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgOiAoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmVkaXQnIHwgdHJhbnNsYXRlKVxuICAgICAgICB9fVxuICAgICAgPC9oMz5cbiAgICA8L2libS1tb2RhbC1oZWFkZXI+XG4gICAgPHNlY3Rpb24gaWJtTW9kYWxDb250ZW50PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGFsQ29udGVudDsgY29udGV4dDoge21vZGFsT2JzOiBtb2RhbE9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGFsRm9vdGVyOyBjb250ZXh0OiB7bW9kYWxPYnM6IG1vZGFsT2JzfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2libS1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWxDb250ZW50IGxldC1tb2RhbE9icz1cIm1vZGFsT2JzXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgY2xhc3M9XCJsaXN0LWNvbHVtbi1mb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cImNkcy0tdGV4dC1pbnB1dF9fZmllbGQtd3JhcHBlclwiPlxuICAgICAgPGlibS1sYWJlbCBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtd2l0aC10b29sdGlwXCI+XG4gICAgICAgICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDx2LXRvb2x0aXAtaWNvblxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RhbE9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgID48L3YtdG9vbHRpcC1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBpYm1UZXh0IGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgLz5cbiAgICAgIDwvaWJtLWxhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjZHMtLXRleHQtaW5wdXRfX2ZpZWxkLXdyYXBwZXJcIj5cbiAgICAgIDxpYm0tbGFiZWxcbiAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dCB8fCBtb2RhbE9icy50eXBlID09PSAnZWRpdCdcIlxuICAgICAgICBbaW52YWxpZF09XCJtb2RhbE9icy52YWxpZEtleSA9PT0gZmFsc2VcIlxuICAgICAgICBbaW52YWxpZFRleHRdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnVuaXF1ZUtleVdhcm5pbmcnIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC13aXRoLXRvb2x0aXBcIj5cbiAgICAgICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDx2LXRvb2x0aXAtaWNvblxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICA+PC92LXRvb2x0aXAtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXQgaWJtVGV4dCBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIiBbaW52YWxpZF09XCJtb2RhbE9icy52YWxpZEtleSA9PT0gZmFsc2VcIiAvPlxuICAgICAgPC9pYm0tbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNkcy0tdGV4dC1pbnB1dF9fZmllbGQtd3JhcHBlclwiPlxuICAgICAgPGlibS1sYWJlbCBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtd2l0aC10b29sdGlwXCI+XG4gICAgICAgICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnBhdGgnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPHYtdG9vbHRpcC1pY29uXG4gICAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5wYXRoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICA+PC92LXRvb2x0aXAtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXQgaWJtVGV4dCBmb3JtQ29udHJvbE5hbWU9XCJwYXRoXCIgLz5cbiAgICAgIDwvaWJtLWxhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjZHMtLXRleHQtaW5wdXRfX2ZpZWxkLXdyYXBwZXJcIj5cbiAgICAgIDxpYm0tbGFiZWwgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXdpdGgtdG9vbHRpcCBzZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZGF0YVR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPHYtdG9vbHRpcC1pY29uXG4gICAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kYXRhVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgPjwvdi10b29sdGlwLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlibS1kcm9wZG93biBmb3JtQ29udHJvbE5hbWU9XCJkYXRhVHlwZVwiIFtkaXNhYmxlZF09XCJtb2RhbE9icy5kaXNhYmxlSW5wdXRcIj5cbiAgICAgICAgICA8aWJtLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImRhdGFUeXBlSXRlbXMkIHwgYXN5bmNcIj48L2libS1kcm9wZG93bi1saXN0PlxuICAgICAgICA8L2libS1kcm9wZG93bj5cbiAgICAgIDwvaWJtLWxhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjZHMtLXRleHQtaW5wdXRfX2ZpZWxkLXdyYXBwZXJcIj5cbiAgICAgIDxpYm0tbGFiZWwgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXdpdGgtdG9vbHRpcCBzZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZmllbGRUeXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDx2LXRvb2x0aXAtaWNvblxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZmllbGRUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICA+PC92LXRvb2x0aXAtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aWJtLWRyb3Bkb3duIGZvcm1Db250cm9sTmFtZT1cImZpZWxkVHlwZVwiIFtkaXNhYmxlZF09XCJtb2RhbE9icy5kaXNhYmxlSW5wdXRcIj5cbiAgICAgICAgICA8aWJtLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImZpZWxkVHlwZUl0ZW1zJCB8IGFzeW5jXCI+PC9pYm0tZHJvcGRvd24tbGlzdD5cbiAgICAgICAgPC9pYm0tZHJvcGRvd24+XG4gICAgICA8L2libS1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RhbEZvb3RlciBsZXQtbW9kYWxPYnM9XCJtb2RhbE9ic1wiPlxuICA8aWJtLW1vZGFsLWZvb3Rlcj5cbiAgICA8bmctY29udGFpbmVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpYm1CdXR0b249XCJzZWNvbmRhcnlcIlxuICAgICAgICBbYXR0ci5tb2RhbC1wcmltYXJ5LWZvY3VzXT1cInRydWVcIlxuICAgICAgICAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZWFyY2hGaWVsZHNPdmVydmlldy5jbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpYm1CdXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgW2F0dHIubW9kYWwtcHJpbWFyeS1mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLnZhbGlkID09PSBmYWxzZVwiXG4gICAgICAgIChjbGljayk9XCJzYXZlTGlzdFNlYXJjaEZpZWxkcygpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgIG1vZGFsT2JzLmRpc2FibGVJbnB1dCB8fCBtb2RhbE9icy52YWxpZCA9PT0gZmFsc2UgfHwgbW9kYWxPYnMudmFsaWRLZXkgPT09IGZhbHNlXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZWFyY2hGaWVsZHNPdmVydmlldy5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvaWJtLW1vZGFsLWZvb3Rlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVsZXRlTW9kYWw+XG4gIDx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICAgIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93RGVsZXRlTW9kYWwkXCJcbiAgICBbb3V0cHV0T25Db25maXJtXT1cImRlbGV0ZVJvd0luZGV4JCB8IGFzeW5jXCJcbiAgICAoY29uZmlybUV2ZW50KT1cImRlbGV0ZVJvd0NvbmZpcm1hdGlvbigkZXZlbnQpXCJcbiAgICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwic2VhcmNoRmllbGRzT3ZlcnZpZXcuZGVsZXRlU2VhcmNoRmllbGRcIlxuICAgIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFwiXG4gICAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwic2VhcmNoRmllbGRzT3ZlcnZpZXcuZGVsZXRlU2VhcmNoRmllbGRDb25maXJtYXRpb25cIlxuICA+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm9Db25maWdXYXJuaW5nPlxuICA8ZGl2IGNsYXNzPVwicGwtMiBwci0yIHBiLTJcIj5cbiAgICA8aWJtLW5vdGlmaWNhdGlvblxuICAgICAgW25vdGlmaWNhdGlvbk9ial09XCJ7XG4gICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgdGl0bGU6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5ub1NlYXJjaEZpZWxkc0NvbmZpZ3VyZWRXYXJuaW5nVGl0bGUnIHwgdHJhbnNsYXRlLFxuICAgICAgICBzaG93Q2xvc2U6IGZhbHNlXG4gICAgICB9XCJcbiAgICA+XG4gICAgPC9pYm0tbm90aWZpY2F0aW9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctaWNvblwiPjxpYm0tbG9hZGluZz48L2libS1sb2FkaW5nPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vb2JqZWN0LW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL29iamVjdC1tYW5hZ2VtZW50LWRldGFpbC1jb250YWluZXIvdGFicy9vYmplY3QtbWFuYWdlbWVudC1saXN0LXNlYXJjaC1maWVsZHMvb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vb2JqZWN0LW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL29iamVjdC1tYW5hZ2VtZW50LWRldGFpbC1jb250YWluZXIvdGFicy9vYmplY3QtbWFuYWdlbWVudC1saXN0LXNlYXJjaC1maWVsZHMvb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBZSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBV2QsT0FBTyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBV2xFLE1BQU0sT0FBTyx5Q0FBeUM7SUF3THBELFlBQ21C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O2lPQUtwQix5QkFBeUI7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVVcmx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtcbiAgQ29uZmlnU2VydmljZSxcbiAgRGVmaW5pdGlvbkNvbHVtbixcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpZWxkQ29sdW1uVmlldyxcbiAgU2VhcmNoRmllbGREYXRhVHlwZSxcbiAgU2VhcmNoRmllbGRGaWVsZFR5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0xpc3RGaWVsZH0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtMaXN0SXRlbX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9kcm9wZG93bi9saXN0LWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYmplY3RNYW5hZ2VtZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvb2JqZWN0LW1hbmFnZW1lbnQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC1zZWFyY2gtZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29iamVjdC1tYW5hZ2VtZW50LWxpc3Qtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29iamVjdC1tYW5hZ2VtZW50LWxpc3Qtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkc0NvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ21vdmVSb3dCdXR0b25zJykgcHVibGljIG1vdmVSb3dCdXR0b25zVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gIHJlYWRvbmx5IGRvd25sb2FkTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBkb3dubG9hZFVybCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNhZmVVcmw+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgY3VycmVudE1vZGFsVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ2NyZWF0ZScpO1xuICByZWFkb25seSBzaG93TW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc2FibGVJbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0RlbGV0ZU1vZGFsJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRlbGV0ZVJvd0luZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcblxuICByZWFkb25seSBJTlZBTElEX0tFWSA9ICdpbnZhbGlkJztcbiAgcmVhZG9ubHkgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgdGl0bGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAga2V5OiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIHBhdGg6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgZGF0YVR5cGU6IG5ldyBGb3JtQ29udHJvbCh7XG4gICAgICBrZXk6IHRoaXMuSU5WQUxJRF9LRVksXG4gICAgfSksXG4gICAgZmllbGRUeXBlOiBuZXcgRm9ybUNvbnRyb2woe1xuICAgICAga2V5OiB0aGlzLklOVkFMSURfS0VZLFxuICAgIH0pLFxuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBDT0xVTU5TOiBBcnJheTxEZWZpbml0aW9uQ29sdW1uPiA9IFtcbiAgICB7XG4gICAgICB2aWV3VHlwZTogJ3N0cmluZycsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBwcm9wZXJ0eU5hbWU6ICd0aXRsZScsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ3RpdGxlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5TmFtZTogJ2tleScsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2tleScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogJ3N0cmluZycsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBwcm9wZXJ0eU5hbWU6ICdwYXRoJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAncGF0aCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogJ3N0cmluZycsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBwcm9wZXJ0eU5hbWU6ICdkYXRhVHlwZScsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RhdGFUeXBlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiAnc3RyaW5nJyxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5TmFtZTogJ2ZpZWxkVHlwZScsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2ZpZWxkVHlwZScsXG4gICAgfSxcbiAgXTtcbiAgcmVhZG9ubHkgREFUQV9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGREYXRhVHlwZT4gPSBbXG4gICAgJ3RleHQnLFxuICAgICdudW1iZXInLFxuICAgICdkYXRlJyxcbiAgICAnZGF0ZXRpbWUnLFxuICAgICdib29sZWFuJyxcbiAgXTtcbiAgcHJpdmF0ZSByZWFkb25seSBGSUVMRF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRGaWVsZFR5cGU+ID0gWydzaW5nbGUnLCAncmFuZ2UnXTtcbiAgcHJpdmF0ZSBjYWNoZWRPYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgb2JqZWN0TWFuYWdlbWVudEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEZpZWxkPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAuc3RyZWFtKCdrZXknKVxuICAgIC5waXBlKFxuICAgICAgbWFwKCgpID0+XG4gICAgICAgIHRoaXMuQ09MVU1OUy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAgICAga2V5OiBjb2x1bW4ucHJvcGVydHlOYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtjb2x1bW4udHJhbnNsYXRpb25LZXl9YCksXG4gICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5zb3J0YWJsZSxcbiAgICAgICAgICAuLi4oY29sdW1uLnZpZXdUeXBlICYmIHt2aWV3VHlwZTogY29sdW1uLnZpZXdUeXBlfSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgcmVhZG9ubHkgb2JqZWN0SWQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zLmlkIHx8ICcnKSxcbiAgICBmaWx0ZXIob2JqZWN0SWQgPT4gISFvYmplY3RJZClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxhbnk+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMub2JqZWN0SWQkLFxuICAgIHRoaXMucmVmcmVzaE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzJCxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtvYmplY3RJZF0pID0+IHRoaXMub2JqZWN0TWFuYWdlbWVudFNlcnZpY2UuZ2V0U2VhcmNoRmllbGQob2JqZWN0SWQpKSxcbiAgICB0YXAob2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMgPT4ge1xuICAgICAgdGhpcy5vYmplY3RJZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUob2JqZWN0SWQgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgb2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMgJiZcbiAgICAgICAgICBBcnJheS5pc0FycmF5KG9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzKSAmJlxuICAgICAgICAgIG9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZXREb3dubG9hZChvYmplY3RJZCwgb2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAob2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMgPT4ge1xuICAgICAgdGhpcy5jYWNoZWRPYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcyA9IG9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzO1xuICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHRyYW5zbGF0ZWRPYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGRDb2x1bW5WaWV3Pj4gPVxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcyQsXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbY29sdW1uc10pID0+XG4gICAgICAgIGNvbHVtbnMubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICB0aXRsZTogY29sdW1uLnRpdGxlIHx8ICctJyxcbiAgICAgICAgICBkYXRhVHlwZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICBgc2VhcmNoRmllbGRzLiR7Y29sdW1uPy5kYXRhVHlwZT8udG9Mb3dlckNhc2UoKX1gXG4gICAgICAgICAgKSxcbiAgICAgICAgICBmaWVsZFR5cGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7Y29sdW1uPy5maWVsZFR5cGU/LnRvTG93ZXJDYXNlKCl9YFxuICAgICAgICAgICksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWREYXRhVHlwZUl0ZW1JbmRleCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgcmVhZG9ubHkgZGF0YVR5cGVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhVHlwZUl0ZW1JbmRleCQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc2VsZWN0ZWREYXRhVHlwZUl0ZW1JbmRleF0pID0+XG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGREYXRhVHlwZS5zZWxlY3RgKSxcbiAgICAgICAgICBrZXk6IHRoaXMuSU5WQUxJRF9LRVksXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnRoaXMuREFUQV9UWVBFUy5tYXAodHlwZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHt0eXBlfWApLFxuICAgICAgICAgIGtleTogdHlwZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICB9KSksXG4gICAgICBdLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHNlbGVjdGVkOiBpbmRleCA9PT0gc2VsZWN0ZWREYXRhVHlwZUl0ZW1JbmRleCxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpZWxkVHlwZUl0ZW1JbmRleCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IGZpZWxkVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkVHlwZUl0ZW1JbmRleCQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc2VsZWN0ZWRGaWVsZFR5cGVJdGVtSW5kZXhdKSA9PlxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkRmllbGRUeXBlLnNlbGVjdGApLFxuICAgICAgICAgIGtleTogdGhpcy5JTlZBTElEX0tFWSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4udGhpcy5GSUVMRF9UWVBFUy5tYXAodHlwZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3R5cGV9YCksXG4gICAgICAgICAga2V5OiB0eXBlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIH0pKSxcbiAgICAgIF0ubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgc2VsZWN0ZWQ6IGluZGV4ID09PSBzZWxlY3RlZEZpZWxkVHlwZUl0ZW1JbmRleCxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSB2YWxpZEtleSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMsIHRoaXMuY3VycmVudE1vZGFsVHlwZSRdKS5waXBlKFxuICAgIG1hcCgoW2Zvcm1WYWx1ZXMsIGN1cnJlbnRNb2RhbFR5cGVdKSA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZ0tleXMgPSB0aGlzLmNhY2hlZE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzLm1hcChjb2x1bW4gPT4gY29sdW1uLmtleSk7XG4gICAgICByZXR1cm4gY3VycmVudE1vZGFsVHlwZSA9PT0gJ2NyZWF0ZScgPyAhZXhpc3RpbmdLZXlzLmluY2x1ZGVzKGZvcm1WYWx1ZXMua2V5KSA6IHRydWU7XG4gICAgfSksXG4gICAgc3RhcnRXaXRoKGZhbHNlKVxuICApO1xuXG4gIHJlYWRvbmx5IHZhbGlkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcywgdGhpcy52YWxpZEtleSRdKS5waXBlKFxuICAgIG1hcCgoW2Zvcm1WYWx1ZXMsIHZhbGlkS2V5XSkgPT4gISEoZm9ybVZhbHVlcy5wYXRoICYmIHZhbGlkS2V5KSksXG4gICAgc3RhcnRXaXRoKGZhbHNlKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0TWFuYWdlbWVudFNlcnZpY2U6IE9iamVjdE1hbmFnZW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICApIHt9XG5cbiAgb3Blbk1vZGFsKG1vZGFsVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TW9kYWwkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5jdXJyZW50TW9kYWxUeXBlJC5uZXh0KG1vZGFsVHlwZSk7XG5cbiAgICBpZiAobW9kYWxUeXBlID09PSAnY3JlYXRlJykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbJ2tleSddLmVuYWJsZSgpO1xuICAgICAgdGhpcy5yZXNldEZvcm1Hcm91cCgpO1xuICAgIH0gZWxzZSBpZiAobW9kYWxUeXBlID09PSAnZWRpdCcpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzWydrZXknXS5kaXNhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNb2RhbCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBkZWxldGVSb3cobGlzdFNlYXJjaEZpZWxkUm93SW5kZXg6IG51bWJlciwgY2xpY2tFdmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNsaWNrRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNob3dEZWxldGVNb2RhbCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlbGV0ZVJvd0luZGV4JC5uZXh0KGxpc3RTZWFyY2hGaWVsZFJvd0luZGV4KTtcbiAgfVxuXG4gIGRlbGV0ZVJvd0NvbmZpcm1hdGlvbihsaXN0U2VhcmNoRmllbGRSb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uS2V5ID0gdGhpcy5nZXRDb2x1bW5LZXkobGlzdFNlYXJjaEZpZWxkUm93SW5kZXgpO1xuXG4gICAgaWYgKGNvbHVtbktleSkge1xuICAgICAgdGhpcy5kaXNhYmxlSW5wdXQoKTtcblxuICAgICAgdGhpcy5vYmplY3RJZCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBzd2l0Y2hNYXAob2JqZWN0SWQgPT5cbiAgICAgICAgICAgIHRoaXMub2JqZWN0TWFuYWdlbWVudFNlcnZpY2UuZGVsZXRlU2VhcmNoRmllbGQob2JqZWN0SWQsIGNvbHVtbktleSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJlZnJlc2hPYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcygpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5LZXkobGlzdFNlYXJjaEZpZWxkUm93SW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmNhY2hlZE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzW2xpc3RTZWFyY2hGaWVsZFJvd0luZGV4XT8ua2V5O1xuICB9XG5cbiAgbW92ZVJvdyhcbiAgICBsaXN0U2VhcmNoRmllbGRSb3dJbmRleDogbnVtYmVyLFxuICAgIG1vdmVVcDogYm9vbGVhbixcbiAgICBjbGlja0V2ZW50OiBNb3VzZUV2ZW50LFxuICAgIG9iamVjdElkOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgb2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMgPSBbLi4udGhpcy5jYWNoZWRPYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkc107XG4gICAgY29uc3QgbGlzdFNlYXJjaEZpZWxkUm93ID0gb2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHNbbGlzdFNlYXJjaEZpZWxkUm93SW5kZXhdO1xuXG4gICAgY2xpY2tFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHNhdmVMaXN0U2VhcmNoRmllbGRzKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG5cbiAgICB0aGlzLmN1cnJlbnRNb2RhbFR5cGUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGN1cnJlbnRNb2RhbFR5cGUgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRNb2RhbFR5cGUgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoRmllbGQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtblJvd0NsaWNrZWQocm93OiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEZvcm1Hcm91cCgpO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5kYXRhVHlwZUl0ZW1zJCwgdGhpcy5maWVsZFR5cGVJdGVtcyRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtkYXRhVHlwZUl0ZW1zLCBmaWVsZFR5cGVJdGVtc10pID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jYWNoZWRPYmplY3RNYW5hZ2VtZW50TGlzdFNlYXJjaEZpZWxkcy5maW5kKFxuICAgICAgICAgIGNhY2hlZENvbHVtbiA9PiBjYWNoZWRDb2x1bW4ua2V5ID09PSByb3cua2V5XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlSXRlbSA9IGRhdGFUeXBlSXRlbXMuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBjb2x1bW4uZGF0YVR5cGUpO1xuICAgICAgICBjb25zdCBkYXRhVHlwZUl0ZW1JbmRleCA9IGRhdGFUeXBlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5rZXkgPT09IGNvbHVtbi5kYXRhVHlwZSk7XG5cbiAgICAgICAgY29uc3QgZmllbGRUeXBlSXRlbSA9IGZpZWxkVHlwZUl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0gY29sdW1uLmZpZWxkVHlwZSk7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZUl0ZW1JbmRleCA9IGZpZWxkVHlwZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ua2V5ID09PSBjb2x1bW4uZmllbGRUeXBlKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVR5cGVJdGVtSW5kZXgkLm5leHQoZGF0YVR5cGVJdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmllbGRUeXBlSXRlbUluZGV4JC5uZXh0KGZpZWxkVHlwZUl0ZW1JbmRleCk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAga2V5OiBjb2x1bW4ua2V5LFxuICAgICAgICAgIHRpdGxlOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgcGF0aDogY29sdW1uLnBhdGgsXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGRhdGFUeXBlOiB7Li4uZGF0YVR5cGVJdGVtfSxcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZmllbGRUeXBlOiB7Li4uZmllbGRUeXBlSXRlbX0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3Blbk1vZGFsKCdlZGl0Jyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZChvYmplY3RJZDogc3RyaW5nLCBzZWFyY2hGaWVsZDogU2VhcmNoRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuICAgIHRoaXMub2JqZWN0TWFuYWdlbWVudFNlcnZpY2VcbiAgICAgIC5wdXRTZWFyY2hGaWVsZChvYmplY3RJZCwgdGhpcy5mb3JtR3JvdXAudmFsdWUua2V5LCBzZWFyY2hGaWVsZClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVmcmVzaE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzKCk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYGxpc3Qtc2VhcmNoLWZpZWxkcyR7b2JqZWN0SWR9YCwgbnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWFyY2hGaWVsZCgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblxuICAgIHRoaXMub2JqZWN0SWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKG9iamVjdElkID0+XG4gICAgICAgICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U2VydmljZS5wb3N0U2VhcmNoRmllbGQoXG4gICAgICAgICAgICBvYmplY3RJZCxcbiAgICAgICAgICAgIHRoaXMubWFwRm9ybVZhbHVlc1RvQ29sdW1uKGZvcm1WYWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaEZpZWxkKCk6IHZvaWQge1xuICAgIHRoaXMub2JqZWN0SWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKG9iamVjdElkID0+XG4gICAgICAgICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U2VydmljZS5wdXRTZWFyY2hGaWVsZChcbiAgICAgICAgICAgIG9iamVjdElkLFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWUua2V5LFxuICAgICAgICAgICAgdGhpcy5tYXBGb3JtVmFsdWVzVG9Db2x1bW4odGhpcy5mb3JtR3JvdXAudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICAgICAgICAgIHRoaXMucmVmcmVzaE9iamVjdE1hbmFnZW1lbnRMaXN0U2VhcmNoRmllbGRzKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREb3dubG9hZChvYmplY3RJZDogc3RyaW5nLCBPYmplY3RNYW5hZ2VtZW50U2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pOiB2b2lkIHtcbiAgICB0aGlzLmRvd25sb2FkTmFtZSQubmV4dChgJHtvYmplY3RJZH0uanNvbmApO1xuICAgIHRoaXMuZG93bmxvYWRVcmwkLm5leHQoXG4gICAgICB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxuICAgICAgICAnZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCwnICtcbiAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoT2JqZWN0TWFuYWdlbWVudFNlYXJjaEZpZWxkcywgbnVsbCwgMikpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Rm9ybUdyb3VwKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnJlc2V0KCk7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFUeXBlSXRlbUluZGV4JC5uZXh0KDApO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZFR5cGVJdGVtSW5kZXgkLm5leHQoMCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEZvcm1WYWx1ZXNUb0NvbHVtbihmb3JtVmFsdWU6IGFueSk6IFNlYXJjaEZpZWxkIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBmb3JtVmFsdWUua2V5LFxuICAgICAgdGl0bGU6IGZvcm1WYWx1ZS50aXRsZSB8fCAnJyxcbiAgICAgIHBhdGg6IGZvcm1WYWx1ZS5wYXRoLFxuICAgICAgZGF0YVR5cGU6IGZvcm1WYWx1ZS5kYXRhVHlwZS5rZXksXG4gICAgICBmaWVsZFR5cGU6IGZvcm1WYWx1ZS5maWVsZFR5cGUua2V5LFxuICAgIH07XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgc2VhcmNoRmllbGRzOiB0cmFuc2xhdGVkT2JqZWN0TWFuYWdlbWVudExpc3RTZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgZmllbGRzOiBvYmplY3RNYW5hZ2VtZW50RmllbGRzJCB8IGFzeW5jLFxuICAgIG9iamVjdElkOiBvYmplY3RJZCQgfCBhc3luYyxcbiAgICBkb3dubG9hZFVybDogZG93bmxvYWRVcmwkIHwgYXN5bmMsXG4gICAgZG93bmxvYWROYW1lOiBkb3dubG9hZE5hbWUkIHwgYXN5bmMsXG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgcHItMCBwbC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgbXQtbTNweCBtYi0zIG1yLTJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnM7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhb2JzLmxvYWRpbmc7IGVsc2UgbG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9icy5zZWFyY2hGaWVsZHM/Lmxlbmd0aCA+IDA7IGVsc2Ugbm9Db25maWdXYXJuaW5nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0OyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3JlYXRlRWRpdE1vZGFsXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlbGV0ZU1vZGFsXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9ucyBsZXQtb2JzPVwib2JzXCI+XG4gIDxhXG4gICAgaWJtTGlua1xuICAgIGNsYXNzPVwiY2VudGVyLWxpbmtcIlxuICAgIFtocmVmXT1cIm9icy5kb3dubG9hZFVybFwiXG4gICAgW2Rvd25sb2FkXT1cIm9icy5kb3dubG9hZE5hbWVcIlxuICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICFvYnMuZG93bmxvYWRVcmwgfHxcbiAgICAgICFvYnMuZG93bmxvYWROYW1lIHx8XG4gICAgICBvYnMuc2VhcmNoRmllbGRzPy5sZW5ndGggPCAxIHx8XG4gICAgICBvYnMuZGlzYWJsZUlucHV0IHx8XG4gICAgICBvYnMubG9hZGluZ1xuICAgIFwiXG4gID5cbiAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYT5cbiAgPGJ1dHRvblxuICAgIChjbGljayk9XCJvcGVuTW9kYWwoJ2NyZWF0ZScpXCJcbiAgICBpYm1CdXR0b249XCJwcmltYXJ5XCJcbiAgICBzaXplPVwibWRcIlxuICAgIFtkaXNhYmxlZF09XCJvYnMubG9hZGluZ1wiXG4gICAgY2xhc3M9XCJtbC0zXCJcbiAgPlxuICAgIHt7ICdzZWFyY2hGaWVsZHNPdmVydmlldy5hZGQnIHwgdHJhbnNsYXRlIH19XG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgaWJtSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW92ZVJvd0J1dHRvbnMgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtbGVuZ3RoPVwibGVuZ3RoXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1vdmUtcm93LWJ1dHRvbnNcIlxuICAgICpuZ0lmPVwie1xuICAgICAgZGlzYWJsZUlucHV0OiBkaXNhYmxlSW5wdXQkIHwgYXN5bmMsXG4gICAgICBvYmplY3RJZDogb2JqZWN0SWQkIHwgYXN5bmNcbiAgICB9IGFzIG9ic1wiXG4gID5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtZGkgbWRpLWRlbGV0ZSBidG4gYnRuLW91dGxpbmUtZGFuZ2VyIG1yLTFcIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdyhpbmRleCwgJGV2ZW50KVwiXG4gICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkIGRpc2FibGVkLW1vdmUtcm93LWJ1dHRvbic6IG9icy5kaXNhYmxlSW5wdXR9XCJcbiAgICA+PC9pPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm1kaSBtZGktYXJyb3ctdXAtYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBtci0xXCJcbiAgICAgIChjbGljayk9XCJtb3ZlUm93KGluZGV4LCB0cnVlLCAkZXZlbnQsIG9icy5vYmplY3RJZClcIlxuICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCBkaXNhYmxlZC1tb3ZlLXJvdy1idXR0b24nOiBpbmRleCA9PT0gMCB8fCBvYnMuZGlzYWJsZUlucHV0fVwiXG4gICAgPjwvaT5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtZGkgbWRpLWFycm93LWRvd24tYm9sZCBidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgIChjbGljayk9XCJtb3ZlUm93KGluZGV4LCBmYWxzZSwgJGV2ZW50LCBvYnMub2JqZWN0SWQpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQgZGlzYWJsZWQtbW92ZS1yb3ctYnV0dG9uJzogaW5kZXggPT09IGxlbmd0aCAtIDEgfHwgb2JzLmRpc2FibGVJbnB1dH1cIlxuICAgID48L2k+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPHZhbHRpbW8tbGlzdFxuICAgIFtpdGVtc109XCJvYnMuc2VhcmNoRmllbGRzXCJcbiAgICBbZmllbGRzXT1cIm9icy5maWVsZHNcIlxuICAgIFt2aWV3TW9kZV09XCJmYWxzZVwiXG4gICAgW2hlYWRlcl09XCJmYWxzZVwiXG4gICAgKm5nSWY9XCJvYnMuc2VhcmNoRmllbGRzOyBlbHNlIGxvYWRpbmdcIlxuICAgIFtsYXN0Q29sdW1uVGVtcGxhdGVdPVwibW92ZVJvd0J1dHRvbnNUZW1wbGF0ZVJlZlwiXG4gICAgKHJvd0NsaWNrZWQpPVwiY29sdW1uUm93Q2xpY2tlZCgkZXZlbnQpXCJcbiAgPlxuICA8L3ZhbHRpbW8tbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3JlYXRlRWRpdE1vZGFsPlxuICA8aWJtLW1vZGFsXG4gICAgKm5nSWY9XCJ7XG4gICAgICB0eXBlOiBjdXJyZW50TW9kYWxUeXBlJCB8IGFzeW5jLFxuICAgICAgc2hvdzogc2hvd01vZGFsJCB8IGFzeW5jLFxuICAgICAgdmFsaWQ6IHZhbGlkJCB8IGFzeW5jLFxuICAgICAgZGlzYWJsZUlucHV0OiBkaXNhYmxlSW5wdXQkIHwgYXN5bmMsXG4gICAgICB2YWxpZEtleTogdmFsaWRLZXkkIHwgYXN5bmNcbiAgICB9IGFzIG1vZGFsT2JzXCJcbiAgICBbb3Blbl09XCJtb2RhbE9icy5zaG93XCJcbiAgPlxuICAgIDxpYm0tbW9kYWwtaGVhZGVyIFtzaG93Q2xvc2VCdXR0b25dPVwidHJ1ZVwiIChjbG9zZVNlbGVjdCk9XCJjbG9zZU1vZGFsKClcIj5cbiAgICAgIDxoMyBpYm1Nb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7XG4gICAgICAgICAgbW9kYWxPYnMudHlwZSA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgID8gKCdzZWFyY2hGaWVsZHNPdmVydmlldy5hZGQnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgOiAoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmVkaXQnIHwgdHJhbnNsYXRlKVxuICAgICAgICB9fVxuICAgICAgPC9oMz5cbiAgICA8L2libS1tb2RhbC1oZWFkZXI+XG4gICAgPHNlY3Rpb24gaWJtTW9kYWxDb250ZW50PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGFsQ29udGVudDsgY29udGV4dDoge21vZGFsT2JzOiBtb2RhbE9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGFsRm9vdGVyOyBjb250ZXh0OiB7bW9kYWxPYnM6IG1vZGFsT2JzfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2libS1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWxDb250ZW50IGxldC1tb2RhbE9icz1cIm1vZGFsT2JzXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgY2xhc3M9XCJsaXN0LWNvbHVtbi1mb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cImNkcy0tdGV4dC1pbnB1dF9fZmllbGQtd3JhcHBlclwiPlxuICAgICAgPGlibS1sYWJlbCBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtd2l0aC10b29sdGlwXCI+XG4gICAgICAgICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDx2LXRvb2x0aXAtaWNvblxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RhbE9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgID48L3YtdG9vbHRpcC1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBpYm1UZXh0IGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgLz5cbiAgICAgIDwvaWJtLWxhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjZHMtLXRleHQtaW5wdXRfX2ZpZWxkLXdyYXBwZXJcIj5cbiAgICAgIDxpYm0tbGFiZWxcbiAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dCB8fCBtb2RhbE9icy50eXBlID09PSAnZWRpdCdcIlxuICAgICAgICBbaW52YWxpZF09XCJtb2RhbE9icy52YWxpZEtleSA9PT0gZmFsc2VcIlxuICAgICAgICBbaW52YWxpZFRleHRdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnVuaXF1ZUtleVdhcm5pbmcnIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC13aXRoLXRvb2x0aXBcIj5cbiAgICAgICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDx2LXRvb2x0aXAtaWNvblxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICA+PC92LXRvb2x0aXAtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXQgaWJtVGV4dCBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIiBbaW52YWxpZF09XCJtb2RhbE9icy52YWxpZEtleSA9PT0gZmFsc2VcIiAvPlxuICAgICAgPC9pYm0tbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNkcy0tdGV4dC1pbnB1dF9fZmllbGQtd3JhcHBlclwiPlxuICAgICAgPGlibS1sYWJlbCBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtd2l0aC10b29sdGlwXCI+XG4gICAgICAgICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnBhdGgnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPHYtdG9vbHRpcC1pY29uXG4gICAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5wYXRoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICA+PC92LXRvb2x0aXAtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXQgaWJtVGV4dCBmb3JtQ29udHJvbE5hbWU9XCJwYXRoXCIgLz5cbiAgICAgIDwvaWJtLWxhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjZHMtLXRleHQtaW5wdXRfX2ZpZWxkLXdyYXBwZXJcIj5cbiAgICAgIDxpYm0tbGFiZWwgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXdpdGgtdG9vbHRpcCBzZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZGF0YVR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPHYtdG9vbHRpcC1pY29uXG4gICAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kYXRhVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgPjwvdi10b29sdGlwLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlibS1kcm9wZG93biBmb3JtQ29udHJvbE5hbWU9XCJkYXRhVHlwZVwiIFtkaXNhYmxlZF09XCJtb2RhbE9icy5kaXNhYmxlSW5wdXRcIj5cbiAgICAgICAgICA8aWJtLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImRhdGFUeXBlSXRlbXMkIHwgYXN5bmNcIj48L2libS1kcm9wZG93bi1saXN0PlxuICAgICAgICA8L2libS1kcm9wZG93bj5cbiAgICAgIDwvaWJtLWxhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjZHMtLXRleHQtaW5wdXRfX2ZpZWxkLXdyYXBwZXJcIj5cbiAgICAgIDxpYm0tbGFiZWwgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXdpdGgtdG9vbHRpcCBzZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZmllbGRUeXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDx2LXRvb2x0aXAtaWNvblxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZmllbGRUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICA+PC92LXRvb2x0aXAtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aWJtLWRyb3Bkb3duIGZvcm1Db250cm9sTmFtZT1cImZpZWxkVHlwZVwiIFtkaXNhYmxlZF09XCJtb2RhbE9icy5kaXNhYmxlSW5wdXRcIj5cbiAgICAgICAgICA8aWJtLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImZpZWxkVHlwZUl0ZW1zJCB8IGFzeW5jXCI+PC9pYm0tZHJvcGRvd24tbGlzdD5cbiAgICAgICAgPC9pYm0tZHJvcGRvd24+XG4gICAgICA8L2libS1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RhbEZvb3RlciBsZXQtbW9kYWxPYnM9XCJtb2RhbE9ic1wiPlxuICA8aWJtLW1vZGFsLWZvb3Rlcj5cbiAgICA8bmctY29udGFpbmVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpYm1CdXR0b249XCJzZWNvbmRhcnlcIlxuICAgICAgICBbYXR0ci5tb2RhbC1wcmltYXJ5LWZvY3VzXT1cInRydWVcIlxuICAgICAgICAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZWFyY2hGaWVsZHNPdmVydmlldy5jbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpYm1CdXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgW2F0dHIubW9kYWwtcHJpbWFyeS1mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsT2JzLnZhbGlkID09PSBmYWxzZVwiXG4gICAgICAgIChjbGljayk9XCJzYXZlTGlzdFNlYXJjaEZpZWxkcygpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgIG1vZGFsT2JzLmRpc2FibGVJbnB1dCB8fCBtb2RhbE9icy52YWxpZCA9PT0gZmFsc2UgfHwgbW9kYWxPYnMudmFsaWRLZXkgPT09IGZhbHNlXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZWFyY2hGaWVsZHNPdmVydmlldy5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvaWJtLW1vZGFsLWZvb3Rlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVsZXRlTW9kYWw+XG4gIDx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICAgIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93RGVsZXRlTW9kYWwkXCJcbiAgICBbb3V0cHV0T25Db25maXJtXT1cImRlbGV0ZVJvd0luZGV4JCB8IGFzeW5jXCJcbiAgICAoY29uZmlybUV2ZW50KT1cImRlbGV0ZVJvd0NvbmZpcm1hdGlvbigkZXZlbnQpXCJcbiAgICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwic2VhcmNoRmllbGRzT3ZlcnZpZXcuZGVsZXRlU2VhcmNoRmllbGRcIlxuICAgIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFwiXG4gICAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwic2VhcmNoRmllbGRzT3ZlcnZpZXcuZGVsZXRlU2VhcmNoRmllbGRDb25maXJtYXRpb25cIlxuICA+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm9Db25maWdXYXJuaW5nPlxuICA8ZGl2IGNsYXNzPVwicGwtMiBwci0yIHBiLTJcIj5cbiAgICA8aWJtLW5vdGlmaWNhdGlvblxuICAgICAgW25vdGlmaWNhdGlvbk9ial09XCJ7XG4gICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgdGl0bGU6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5ub1NlYXJjaEZpZWxkc0NvbmZpZ3VyZWRXYXJuaW5nVGl0bGUnIHwgdHJhbnNsYXRlLFxuICAgICAgICBzaG93Q2xvc2U6IGZhbHNlXG4gICAgICB9XCJcbiAgICA+XG4gICAgPC9pYm0tbm90aWZpY2F0aW9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctaWNvblwiPjxpYm0tbG9hZGluZz48L2libS1sb2FkaW5nPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2015-2020 Ritense BV, the Netherlands.
2
+ * Copyright 2015-2023 Ritense BV, the Netherlands.
3
3
  *
4
4
  * Licensed under EUPL, Version 1.2 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -58,9 +58,9 @@ export class ObjectManagementListComponent {
58
58
  }
59
59
  }
60
60
  ObjectManagementListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectManagementListComponent, deps: [{ token: i1.ObjectManagementService }, { token: i2.ObjectManagementStateService }, { token: i3.TranslateService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
61
- ObjectManagementListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectManagementListComponent, selector: "valtimo-object-management-list", 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 class=\"text-right mt-m3px mb-3\">\n <button (click)=\"showUploadModal()\" class=\"btn btn-secondary btn-space\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'objectManagement.uploadObjecttype' | translate }}\n </button>\n <button (click)=\"showAddModal()\" type=\"button\" class=\"btn btn-space btn-primary mr-0\">\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'objectManagement.createObjecttype' | translate }}\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"objecttypesInstances$ | async as objecttypesInstances\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"objecttypesInstances\"\n [fields]=\"fields\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"objecttypesList\"\n (rowClicked)=\"redirectToDetails($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ 'objectManagement.title' | translate }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n objecttypesInstances?.length || 0\n }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<valtimo-object-management-upload-modal\n [objecttypes]=\"objecttypesInstances$ | async\"\n></valtimo-object-management-upload-modal>\n<valtimo-object-management-modal></valtimo-object-management-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"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i7.ObjectManagementModalComponent, selector: "valtimo-object-management-modal", inputs: ["prefillObject$"] }, { kind: "component", type: i8.ObjectManagementUploadModalComponent, selector: "valtimo-object-management-upload-modal", inputs: ["objecttypes"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
61
+ ObjectManagementListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectManagementListComponent, selector: "valtimo-object-management-list", ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 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 class=\"text-right mt-m3px mb-3\">\n <button (click)=\"showUploadModal()\" class=\"btn btn-secondary btn-space\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'objectManagement.uploadObjecttype' | translate }}\n </button>\n <button (click)=\"showAddModal()\" type=\"button\" class=\"btn btn-space btn-primary mr-0\">\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'objectManagement.createObjecttype' | translate }}\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"objecttypesInstances$ | async as objecttypesInstances\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"objecttypesInstances\"\n [fields]=\"fields\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"objecttypesList\"\n (rowClicked)=\"redirectToDetails($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ 'objectManagement.title' | translate }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n objecttypesInstances?.length || 0\n }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<valtimo-object-management-upload-modal\n [objecttypes]=\"objecttypesInstances$ | async\"\n></valtimo-object-management-upload-modal>\n<valtimo-object-management-modal></valtimo-object-management-modal>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i7.ObjectManagementModalComponent, selector: "valtimo-object-management-modal", inputs: ["prefillObject$"] }, { kind: "component", type: i8.ObjectManagementUploadModalComponent, selector: "valtimo-object-management-upload-modal", inputs: ["objecttypes"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
62
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectManagementListComponent, decorators: [{
63
63
  type: Component,
64
- args: [{ selector: 'valtimo-object-management-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 class=\"text-right mt-m3px mb-3\">\n <button (click)=\"showUploadModal()\" class=\"btn btn-secondary btn-space\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'objectManagement.uploadObjecttype' | translate }}\n </button>\n <button (click)=\"showAddModal()\" type=\"button\" class=\"btn btn-space btn-primary mr-0\">\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'objectManagement.createObjecttype' | translate }}\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"objecttypesInstances$ | async as objecttypesInstances\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"objecttypesInstances\"\n [fields]=\"fields\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"objecttypesList\"\n (rowClicked)=\"redirectToDetails($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ 'objectManagement.title' | translate }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n objecttypesInstances?.length || 0\n }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<valtimo-object-management-upload-modal\n [objecttypes]=\"objecttypesInstances$ | async\"\n></valtimo-object-management-upload-modal>\n<valtimo-object-management-modal></valtimo-object-management-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"] }]
64
+ args: [{ selector: 'valtimo-object-management-list', template: "<!--\n ~ Copyright 2015-2023 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 class=\"text-right mt-m3px mb-3\">\n <button (click)=\"showUploadModal()\" class=\"btn btn-secondary btn-space\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'objectManagement.uploadObjecttype' | translate }}\n </button>\n <button (click)=\"showAddModal()\" type=\"button\" class=\"btn btn-space btn-primary mr-0\">\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'objectManagement.createObjecttype' | translate }}\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #list let-obs=\"obs\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <ng-container *ngIf=\"objecttypesInstances$ | async as objecttypesInstances\">\n <valtimo-widget *ngIf=\"obs.loading === false\">\n <valtimo-list\n [items]=\"objecttypesInstances\"\n [fields]=\"fields\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"objecttypesList\"\n (rowClicked)=\"redirectToDetails($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ 'objectManagement.title' | translate }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n objecttypesInstances?.length || 0\n }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<valtimo-object-management-upload-modal\n [objecttypes]=\"objecttypesInstances$ | async\"\n></valtimo-object-management-upload-modal>\n<valtimo-object-management-modal></valtimo-object-management-modal>\n", styles: ["/*!\n * Copyright 2015-2023 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"] }]
65
65
  }], ctorParameters: function () { return [{ type: i1.ObjectManagementService }, { type: i2.ObjectManagementStateService }, { type: i3.TranslateService }, { type: i4.Router }]; } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LW1hbmFnZW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL29iamVjdC1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9vYmplY3QtbWFuYWdlbWVudC1saXN0L29iamVjdC1tYW5hZ2VtZW50LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9vYmplY3QtbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC9vYmplY3QtbWFuYWdlbWVudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBWTlDLE1BQU0sT0FBTyw2QkFBNkI7SUFjeEMsWUFDbUIsdUJBQWdELEVBQ2hELHFCQUFtRCxFQUNuRCxnQkFBa0MsRUFDM0MsTUFBYztRQUhMLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUE4QjtRQUNuRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQzNDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFqQmYsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRTlDLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBc0MsRUFBRSxDQUFDLENBQUM7UUFFdkUsMEJBQXFCLEdBQWtDLGFBQWEsQ0FBQztZQUM1RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUTtTQUNwQyxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFDM0IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUM3RCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDckMsQ0FBQztJQU9DLENBQUM7SUFFSixZQUFZO1FBQ1YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQTRCO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMkJBQTJCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sSUFBSSxHQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2YsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUMzRSxHQUFHO1NBQ0osQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUNKLENBQUM7OzJIQTNDVSw2QkFBNkI7K0dBQTdCLDZCQUE2QixzRUM5QjFDLG1oRkFnRUE7NEZEbENhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYmplY3RNYW5hZ2VtZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvb2JqZWN0LW1hbmFnZW1lbnQuc2VydmljZSc7XG5pbXBvcnQge09iamVjdHR5cGV9IGZyb20gJy4uLy4uL21vZGVscy9vYmplY3QtbWFuYWdlbWVudC5tb2RlbCc7XG5pbXBvcnQge09iamVjdE1hbmFnZW1lbnRTdGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29iamVjdC1tYW5hZ2VtZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tb2JqZWN0LW1hbmFnZW1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYmplY3QtbWFuYWdlbWVudC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RNYW5hZ2VtZW50TGlzdENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICByZWFkb25seSBmaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTx7a2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmd9Pj4oW10pO1xuXG4gIHJlYWRvbmx5IG9iamVjdHR5cGVzSW5zdGFuY2VzJDogT2JzZXJ2YWJsZTxBcnJheTxPYmplY3R0eXBlPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgICB0aGlzLm9iamVjdE1hbmFnZW1lbnRTdGF0ZS5yZWZyZXNoJCxcbiAgXSkucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5zZXRGaWVsZHMoKSksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub2JqZWN0TWFuYWdlbWVudFNlcnZpY2UuZ2V0QWxsT2JqZWN0cygpKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdE1hbmFnZW1lbnRTZXJ2aWNlOiBPYmplY3RNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdE1hbmFnZW1lbnRTdGF0ZTogT2JqZWN0TWFuYWdlbWVudFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHt9XG5cbiAgc2hvd0FkZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMub2JqZWN0TWFuYWdlbWVudFN0YXRlLnNldE1vZGFsVHlwZSgnYWRkJyk7XG4gICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U3RhdGUuc2hvd01vZGFsKCk7XG4gIH1cblxuICBzaG93VXBsb2FkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U3RhdGUuc2V0TW9kYWxUeXBlKCd1cGxvYWQnKTtcbiAgICB0aGlzLm9iamVjdE1hbmFnZW1lbnRTdGF0ZS5zaG93TW9kYWwoKTtcbiAgfVxuXG4gIHJlZGlyZWN0VG9EZXRhaWxzKG9iamVjdE1hbmFnZW1lbnQ6IE9iamVjdHR5cGUpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9vYmplY3QtbWFuYWdlbWVudC9vYmplY3QnLCBvYmplY3RNYW5hZ2VtZW50LmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZpZWxkcygpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gWyd0aXRsZSddO1xuICAgIHRoaXMuZmllbGRzJC5uZXh0KFxuICAgICAga2V5cy5tYXAoa2V5ID0+ICh7XG4gICAgICAgIGxhYmVsOiBgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgb2JqZWN0TWFuYWdlbWVudC5sYWJlbHMuJHtrZXl9YCl9YCxcbiAgICAgICAga2V5LFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50IHB0LTBcIiAqbmdJZj1cIntsb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMCBtYi01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodCBtdC1tM3B4IG1iLTNcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd1VwbG9hZE1vZGFsKClcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zcGFjZVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXVwbG9hZCBtci0xXCI+PC9pPlxuICAgICAgICAgIHt7ICdvYmplY3RNYW5hZ2VtZW50LnVwbG9hZE9iamVjdHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzaG93QWRkTW9kYWwoKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXByaW1hcnkgbXItMFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXBsdXMgbXItMVwiPjwvaT5cbiAgICAgICAgICB7eyAnb2JqZWN0TWFuYWdlbWVudC5jcmVhdGVPYmplY3R0eXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3Q7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkcyQgfCBhc3luYyBhcyBmaWVsZHNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib2JqZWN0dHlwZXNJbnN0YW5jZXMkIHwgYXN5bmMgYXMgb2JqZWN0dHlwZXNJbnN0YW5jZXNcIj5cbiAgICAgIDx2YWx0aW1vLXdpZGdldCAqbmdJZj1cIm9icy5sb2FkaW5nID09PSBmYWxzZVwiPlxuICAgICAgICA8dmFsdGltby1saXN0XG4gICAgICAgICAgW2l0ZW1zXT1cIm9iamVjdHR5cGVzSW5zdGFuY2VzXCJcbiAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgW3ZpZXdNb2RlXT1cInRydWVcIlxuICAgICAgICAgIFtoZWFkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgcGFnaW5hdGlvbklkZW50aWZpZXI9XCJvYmplY3R0eXBlc0xpc3RcIlxuICAgICAgICAgIChyb3dDbGlja2VkKT1cInJlZGlyZWN0VG9EZXRhaWxzKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBoZWFkZXI+XG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJsaXN0LWhlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAnb2JqZWN0TWFuYWdlbWVudC50aXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPHN1cCBjbGFzcz1cIm1sLTEgYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1wcmltYXJ5XCI+e3tcbiAgICAgICAgICAgICAgICBvYmplY3R0eXBlc0luc3RhbmNlcz8ubGVuZ3RoIHx8IDBcbiAgICAgICAgICAgICAgfX08L3N1cD5cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmFsdGltby1saXN0PlxuICAgICAgPC92YWx0aW1vLXdpZGdldD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48dmFsdGltby1vYmplY3QtbWFuYWdlbWVudC11cGxvYWQtbW9kYWxcbiAgW29iamVjdHR5cGVzXT1cIm9iamVjdHR5cGVzSW5zdGFuY2VzJCB8IGFzeW5jXCJcbj48L3ZhbHRpbW8tb2JqZWN0LW1hbmFnZW1lbnQtdXBsb2FkLW1vZGFsPlxuPHZhbHRpbW8tb2JqZWN0LW1hbmFnZW1lbnQtbW9kYWw+PC92YWx0aW1vLW9iamVjdC1tYW5hZ2VtZW50LW1vZGFsPlxuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LW1hbmFnZW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL29iamVjdC1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9vYmplY3QtbWFuYWdlbWVudC1saXN0L29iamVjdC1tYW5hZ2VtZW50LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9vYmplY3QtbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC9vYmplY3QtbWFuYWdlbWVudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBWTlDLE1BQU0sT0FBTyw2QkFBNkI7SUFjeEMsWUFDbUIsdUJBQWdELEVBQ2hELHFCQUFtRCxFQUNuRCxnQkFBa0MsRUFDM0MsTUFBYztRQUhMLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUE4QjtRQUNuRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQzNDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFqQmYsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRTlDLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBc0MsRUFBRSxDQUFDLENBQUM7UUFFdkUsMEJBQXFCLEdBQWtDLGFBQWEsQ0FBQztZQUM1RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUTtTQUNwQyxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFDM0IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUM3RCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDckMsQ0FBQztJQU9DLENBQUM7SUFFSixZQUFZO1FBQ1YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQTRCO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMkJBQTJCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sSUFBSSxHQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2YsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUMzRSxHQUFHO1NBQ0osQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUNKLENBQUM7OzJIQTNDVSw2QkFBNkI7K0dBQTdCLDZCQUE2QixzRUM5QjFDLG1oRkFnRUE7NEZEbENhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYmplY3RNYW5hZ2VtZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvb2JqZWN0LW1hbmFnZW1lbnQuc2VydmljZSc7XG5pbXBvcnQge09iamVjdHR5cGV9IGZyb20gJy4uLy4uL21vZGVscy9vYmplY3QtbWFuYWdlbWVudC5tb2RlbCc7XG5pbXBvcnQge09iamVjdE1hbmFnZW1lbnRTdGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29iamVjdC1tYW5hZ2VtZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tb2JqZWN0LW1hbmFnZW1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYmplY3QtbWFuYWdlbWVudC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LW1hbmFnZW1lbnQtbGlzdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RNYW5hZ2VtZW50TGlzdENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICByZWFkb25seSBmaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTx7a2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmd9Pj4oW10pO1xuXG4gIHJlYWRvbmx5IG9iamVjdHR5cGVzSW5zdGFuY2VzJDogT2JzZXJ2YWJsZTxBcnJheTxPYmplY3R0eXBlPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgICB0aGlzLm9iamVjdE1hbmFnZW1lbnRTdGF0ZS5yZWZyZXNoJCxcbiAgXSkucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5zZXRGaWVsZHMoKSksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub2JqZWN0TWFuYWdlbWVudFNlcnZpY2UuZ2V0QWxsT2JqZWN0cygpKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdE1hbmFnZW1lbnRTZXJ2aWNlOiBPYmplY3RNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdE1hbmFnZW1lbnRTdGF0ZTogT2JqZWN0TWFuYWdlbWVudFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHt9XG5cbiAgc2hvd0FkZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMub2JqZWN0TWFuYWdlbWVudFN0YXRlLnNldE1vZGFsVHlwZSgnYWRkJyk7XG4gICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U3RhdGUuc2hvd01vZGFsKCk7XG4gIH1cblxuICBzaG93VXBsb2FkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5vYmplY3RNYW5hZ2VtZW50U3RhdGUuc2V0TW9kYWxUeXBlKCd1cGxvYWQnKTtcbiAgICB0aGlzLm9iamVjdE1hbmFnZW1lbnRTdGF0ZS5zaG93TW9kYWwoKTtcbiAgfVxuXG4gIHJlZGlyZWN0VG9EZXRhaWxzKG9iamVjdE1hbmFnZW1lbnQ6IE9iamVjdHR5cGUpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9vYmplY3QtbWFuYWdlbWVudC9vYmplY3QnLCBvYmplY3RNYW5hZ2VtZW50LmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZpZWxkcygpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gWyd0aXRsZSddO1xuICAgIHRoaXMuZmllbGRzJC5uZXh0KFxuICAgICAga2V5cy5tYXAoa2V5ID0+ICh7XG4gICAgICAgIGxhYmVsOiBgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgb2JqZWN0TWFuYWdlbWVudC5sYWJlbHMuJHtrZXl9YCl9YCxcbiAgICAgICAga2V5LFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50IHB0LTBcIiAqbmdJZj1cIntsb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMCBtYi01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodCBtdC1tM3B4IG1iLTNcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd1VwbG9hZE1vZGFsKClcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zcGFjZVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXVwbG9hZCBtci0xXCI+PC9pPlxuICAgICAgICAgIHt7ICdvYmplY3RNYW5hZ2VtZW50LnVwbG9hZE9iamVjdHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzaG93QWRkTW9kYWwoKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXByaW1hcnkgbXItMFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXBsdXMgbXItMVwiPjwvaT5cbiAgICAgICAgICB7eyAnb2JqZWN0TWFuYWdlbWVudC5jcmVhdGVPYmplY3R0eXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3Q7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsaXN0IGxldC1vYnM9XCJvYnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkcyQgfCBhc3luYyBhcyBmaWVsZHNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib2JqZWN0dHlwZXNJbnN0YW5jZXMkIHwgYXN5bmMgYXMgb2JqZWN0dHlwZXNJbnN0YW5jZXNcIj5cbiAgICAgIDx2YWx0aW1vLXdpZGdldCAqbmdJZj1cIm9icy5sb2FkaW5nID09PSBmYWxzZVwiPlxuICAgICAgICA8dmFsdGltby1saXN0XG4gICAgICAgICAgW2l0ZW1zXT1cIm9iamVjdHR5cGVzSW5zdGFuY2VzXCJcbiAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgW3ZpZXdNb2RlXT1cInRydWVcIlxuICAgICAgICAgIFtoZWFkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgcGFnaW5hdGlvbklkZW50aWZpZXI9XCJvYmplY3R0eXBlc0xpc3RcIlxuICAgICAgICAgIChyb3dDbGlja2VkKT1cInJlZGlyZWN0VG9EZXRhaWxzKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBoZWFkZXI+XG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJsaXN0LWhlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAnb2JqZWN0TWFuYWdlbWVudC50aXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPHN1cCBjbGFzcz1cIm1sLTEgYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1wcmltYXJ5XCI+e3tcbiAgICAgICAgICAgICAgICBvYmplY3R0eXBlc0luc3RhbmNlcz8ubGVuZ3RoIHx8IDBcbiAgICAgICAgICAgICAgfX08L3N1cD5cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmFsdGltby1saXN0PlxuICAgICAgPC92YWx0aW1vLXdpZGdldD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48dmFsdGltby1vYmplY3QtbWFuYWdlbWVudC11cGxvYWQtbW9kYWxcbiAgW29iamVjdHR5cGVzXT1cIm9iamVjdHR5cGVzSW5zdGFuY2VzJCB8IGFzeW5jXCJcbj48L3ZhbHRpbW8tb2JqZWN0LW1hbmFnZW1lbnQtdXBsb2FkLW1vZGFsPlxuPHZhbHRpbW8tb2JqZWN0LW1hbmFnZW1lbnQtbW9kYWw+PC92YWx0aW1vLW9iamVjdC1tYW5hZ2VtZW50LW1vZGFsPlxuIl19