@valtimo/components 5.4.0 → 5.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 (30) hide show
  1. package/assets/css/ng-multiselect-dropdown.theme.scss +16 -0
  2. package/esm2020/lib/components/dropzone/dropzone.component.mjs +3 -3
  3. package/esm2020/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +16 -1
  4. package/esm2020/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +16 -1
  5. package/esm2020/lib/components/form-io/form-io-uploader/form-io-uploader.component.mjs +18 -3
  6. package/esm2020/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +16 -1
  7. package/esm2020/lib/components/form-io/services/form-io-dom.service.mjs +16 -1
  8. package/esm2020/lib/components/form-io/services/form-io-state.service.mjs +16 -1
  9. package/esm2020/lib/components/list/list.component.mjs +3 -3
  10. package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +3 -3
  11. package/esm2020/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +3 -3
  12. package/esm2020/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +3 -3
  13. package/esm2020/lib/components/webcam/webcam.component.mjs +3 -3
  14. package/esm2020/lib/models/index.mjs +12 -14
  15. package/esm2020/lib/models/pagination.model.mjs +16 -1
  16. package/esm2020/lib/models/searchable-dropdown.model.mjs +16 -1
  17. package/fesm2015/valtimo-components.mjs +115 -27
  18. package/fesm2015/valtimo-components.mjs.map +1 -1
  19. package/fesm2020/valtimo-components.mjs +147 -27
  20. package/fesm2020/valtimo-components.mjs.map +1 -1
  21. package/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.d.ts.map +1 -1
  22. package/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.d.ts.map +1 -1
  23. package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts.map +1 -1
  24. package/lib/components/form-io/form-io-uploader/form-io-uploader.formio.d.ts.map +1 -1
  25. package/lib/components/form-io/services/form-io-dom.service.d.ts.map +1 -1
  26. package/lib/components/form-io/services/form-io-state.service.d.ts.map +1 -1
  27. package/lib/models/index.d.ts.map +1 -1
  28. package/lib/models/pagination.model.d.ts.map +1 -1
  29. package/lib/models/searchable-dropdown.model.d.ts.map +1 -1
  30. package/package.json +2 -2
@@ -156,10 +156,10 @@ export class ListComponent {
156
156
  }
157
157
  ListComponent.PAGINATION_SIZE = 'PaginationSize';
158
158
  ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ListComponent, deps: [{ token: i1.ViewContentService }, { token: i2.NGXLogger }], target: i0.ɵɵFactoryTarget.Component });
159
- ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ListComponent, selector: "valtimo-list", inputs: { items: "items", fields: "fields", pagination: "pagination", viewMode: "viewMode", isSearchable: "isSearchable", header: "header", actions: "actions", paginationIdentifier: "paginationIdentifier", initialSortState: "initialSortState" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"Search...\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-more-vert\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"], components: [{ type: i3.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "async": i4.AsyncPipe, "listFilter": i6.ListFilterPipe, "translate": i7.TranslatePipe } });
159
+ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ListComponent, selector: "valtimo-list", inputs: { items: "items", fields: "fields", pagination: "pagination", viewMode: "viewMode", isSearchable: "isSearchable", header: "header", actions: "actions", paginationIdentifier: "paginationIdentifier", initialSortState: "initialSortState" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"Search...\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"], components: [{ type: i3.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "async": i4.AsyncPipe, "listFilter": i6.ListFilterPipe, "translate": i7.TranslatePipe } });
160
160
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ListComponent, decorators: [{
161
161
  type: Component,
162
- args: [{ selector: 'valtimo-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>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"Search...\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-more-vert\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"] }]
162
+ args: [{ selector: 'valtimo-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>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"Search...\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"] }]
163
163
  }], ctorParameters: function () { return [{ type: i1.ViewContentService }, { type: i2.NGXLogger }]; }, propDecorators: { items: [{
164
164
  type: Input
165
165
  }], fields: [{
@@ -192,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
192
192
  type: ViewChild,
193
193
  args: ['searchBox']
194
194
  }] } });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQVFsRCxNQUFNLE9BQU8sYUFBYTtJQTZCeEIsWUFBb0Isa0JBQXNDLEVBQVUsTUFBaUI7UUFBakUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFwQjVFLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFHbkIsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLGdCQUFXLEdBQTRCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFHdkIsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO1FBR2xDLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBWTtZQUM5QyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUM7WUFDcEMsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQyxDQUFDO1FBR0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLE9BQU8sQ0FBQztJQUNsRSxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQ2xDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FDL0QsQ0FBQztRQUNGLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLCtEQUErRCxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdGO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwyR0FBMkcsQ0FDNUcsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsZUFBdUI7UUFDdkMsWUFBWSxDQUFDLE9BQU8sQ0FDbEIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLGVBQWUsRUFBRSxFQUM5RCxlQUFlLENBQ2hCLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaURBQWlELEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQy9DLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztpQkFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDdkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2pELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDcEMsMEVBQTBFO29CQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDekI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7aUJBQzFCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFTSw2QkFBNkI7UUFDbEMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM5QyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7b0JBQ2QsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO29CQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO2lCQUN2QyxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLElBQUk7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLGFBQWEsQ0FBQyxVQUFlLEVBQUUsR0FBUTtRQUM1QyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDbEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNsQixNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLElBQUk7WUFDakUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xDLENBQUMsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBSTtRQUNwQixZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFJO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxRQUFpQjtRQUNwRCxNQUFNLElBQUksR0FBYyxNQUFNLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQWMsS0FBSyxDQUFDO1FBRTdCLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxRQUFtQixDQUFDO1lBRXhCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO2dCQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDbkIsUUFBUSxHQUFHLEVBQUMsS0FBSyxFQUFFLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUM7aUJBQ3ZFO3FCQUFNO29CQUNMLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO3dCQUNqQyxRQUFRLEdBQUcsRUFBQyxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxFQUFDLENBQUM7cUJBQzlEO3lCQUFNO3dCQUNMLFFBQVEsR0FBRyxFQUFDLEtBQUssRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDO3FCQUN4RTtpQkFDRjthQUNGO2lCQUFNO2dCQUNMLFFBQVEsR0FBRyxFQUFDLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQzthQUNuRTtZQUVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFoS2MsNkJBQWUsR0FBRyxnQkFBaUIsQ0FBQTsyR0FEdkMsYUFBYTsrRkFBYixhQUFhLG9rQkN2QzFCLG8wUEEwTkE7NEZEbkxhLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsY0FBYztpSUFPZixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQU1pQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NvcnRTdGF0ZSwgRGlyZWN0aW9ufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1ZpZXdDb250ZW50U2VydmljZX0gZnJvbSAnLi4vdmlldy1jb250ZW50L3ZpZXctY29udGVudC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgc3RhdGljIFBBR0lOQVRJT05fU0laRSA9ICdQYWdpbmF0aW9uU2l6ZSc7XG5cbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PGFueT47XG4gIEBJbnB1dCgpIGZpZWxkczogQXJyYXk8YW55PjtcbiAgQElucHV0KCkgcGFnaW5hdGlvbj86IGFueTtcbiAgQElucHV0KCkgdmlld01vZGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc1NlYXJjaGFibGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBoZWFkZXI/OiBib29sZWFuO1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuICBAT3V0cHV0KCkgcm93Q2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uU2V0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlYXJjaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPFNvcnRTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGhlYWRlclByb3ZpZGVkID0gZmFsc2U7XG4gIHB1YmxpYyB2aWV3TGlzdEFzOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hNb2RlbDogc3RyaW5nO1xuICBwdWJsaWMgcmVnRXhwU3RyaW5nUmVtb3ZlVW5kZXJzY29yZSA9IC9fL2c7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEJveCcpIHNlYXJjaEJveDogRWxlbWVudFJlZjtcblxuICByZWFkb25seSBzb3J0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U29ydFN0YXRlPih7XG4gICAgc3RhdGU6IHtuYW1lOiAnJywgZGlyZWN0aW9uOiAnREVTQyd9LFxuICAgIGlzU29ydGluZzogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIpIHtcbiAgICB0aGlzLnZpZXdMaXN0QXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndmlld0xpc3RBcycpIHx8ICd0YWJsZSc7XG4gIH1cblxuICBsb2FkUGFnaW5hdGlvblNpemUoKSB7XG4gICAgY29uc3QgZW50cmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0xpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWBcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9ICtlbnRyaWVzO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoK2VudHJpZXMpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gbG9hZGVkIGZyb20gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBDdXJyZW50OiAnLCBlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgTk9UIGV4aXN0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gV2lsbCB1c2UgZGVmYXVsdC4gQ2hhbmdlIGl0IHRvIGNyZWF0ZSBhbiBlbnRyeS4nXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdCgpO1xuICB9XG5cbiAgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtMaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9IG51bWJlck9mRW50cmllcztcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRQYWdpbmF0aW9uU2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWxTb3J0U3RhdGUpIHtcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLmluaXRpYWxTb3J0U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pdGVtcyAmJiBjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1MaXN0SXRlbXNNYXRjaEZpZWxkcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc1NlYXJjaGFibGUpIHtcbiAgICAgIGZyb21FdmVudCh0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHNlYXJjaCBjYWxsYmFrIGlzIHNwZWNpZmllZCwgcGVyaGFwcyB0byBxdWVyeSBvbiB0aGUgc2VydmVyIHNpZGVcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGVsID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtTGlzdEl0ZW1zTWF0Y2hGaWVsZHMoKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5maWVsZHMpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5saXN0SXRlbUZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmaWVsZCA9PiAoe1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIGxhYmVsOiBmaWVsZC5sYWJlbCxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlIHx8ICcnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnJlc29sdmVPYmplY3QoZmllbGQsIGl0ZW0pLFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DbGlja1JvdyhpdGVtKSB7XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZU9iamVjdChkZWZpbml0aW9uOiBhbnksIG9iajogYW55KSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbktleSA9IGRlZmluaXRpb24ua2V5O1xuICAgIGNvbnN0IGN1c3RvbVByb3BTdHJpbmcgPSAnJC4nO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb25LZXkuaW5jbHVkZXMoY3VzdG9tUHJvcFN0cmluZylcbiAgICAgID8gZGVmaW5pdGlvbktleS5zcGxpdChjdXN0b21Qcm9wU3RyaW5nKVsxXVxuICAgICAgOiBkZWZpbml0aW9uS2V5O1xuICAgIGNvbnN0IHJlc29sdmVkT2JqVmFsdWUgPSBrZXkuc3BsaXQoJy4nKS5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cnIpIHtcbiAgICAgIHJldHVybiBwcmV2ID8gcHJldltjdXJyXSA6IG51bGw7XG4gICAgfSwgb2JqIHx8IHNlbGYpO1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZW50U2VydmljZS5nZXQocmVzb2x2ZWRPYmpWYWx1ZSwgZGVmaW5pdGlvbik7XG4gIH1cblxuICBwdWJsaWMgc3dpdGNoVmlldyh0eXBlKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZpZXdMaXN0QXMnLCB0eXBlKTtcbiAgICB0aGlzLnZpZXdMaXN0QXMgPSB0eXBlO1xuICB9XG5cbiAgcHVibGljIGdldFRvdGFsUGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplIC8gdGhpcy5wYWdpbmF0aW9uLnNpemUpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tQYWdpbmF0aW9uKHBhZ2UpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25DbGlja2VkLmVtaXQocGFnZSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRmllbGRDbGljayhrZXk6IHN0cmluZywgc29ydGFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkZXNjOiBEaXJlY3Rpb24gPSAnREVTQyc7XG4gICAgY29uc3QgYXNjOiBEaXJlY3Rpb24gPSAnQVNDJztcblxuICAgIGlmICghc29ydGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHNvcnQgPT4ge1xuICAgICAgbGV0IG5ld1N0YXRlOiBTb3J0U3RhdGU7XG5cbiAgICAgIGlmIChzb3J0LnN0YXRlLm5hbWUgPT09IGtleSkge1xuICAgICAgICBpZiAoIXNvcnQuaXNTb3J0aW5nKSB7XG4gICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246IGRlc2N9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gZGVzYykge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7Li4uc29ydCwgc3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246IGFzY319O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHtzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogZGVzY30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogZGVzY30sIGlzU29ydGluZzogdHJ1ZX07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ydCQubmV4dChuZXdTdGF0ZSk7XG4gICAgICB0aGlzLnNvcnRDaGFuZ2VkLmVtaXQobmV3U3RhdGUpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXY+XG4gIDxkaXYgKm5nSWY9XCIoaXRlbXM/Lmxlbmd0aCA+IDAgJiYgZmllbGRzPy5sZW5ndGggPiAwKSB8fCBoZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgc2VhcmNoLWhvbGRlciBiZy1saWdodFwiXG4gICAgICBbbmdDbGFzc109XCJ7J3BiLTQgcHQtNCc6ICFoZWFkZXJ9XCJcbiAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlIHx8IHZpZXdNb2RlIHx8IGhlYWRlclwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImFsaWduLXNlbGYtc3RhcnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gcm93XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBjb2wtc20tOFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICAjc2VhcmNoQm94XG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3dpdGNoLXZpZXctaG9sZGVyIGJ0bi1ncm91cCBjb2wtc20tNCBtdC0xIG10LXNtLTBcIlxuICAgICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgICAgKm5nSWY9XCJ2aWV3TW9kZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ2aWV3TGlzdEFzID09PSAndGFibGUnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tZGVmYXVsdCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFZpZXcoJ3RhYmxlJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXZpZXctaGVhZGxpbmUgdmlldy1pY29uXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZpZXdMaXN0QXMgPT09ICd0aWxlJyA/ICdidG4tcHJpbWFyeScgOiAnYnRuLWRlZmF1bHQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hWaWV3KCd0aWxlJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXZpZXctbW9kdWxlIHZpZXctaWNvblwiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RhYnNdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxkaXYgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHM/Lmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZSBub1N3aXBlXCIgKm5nSWY9XCIhdmlld01vZGUgfHwgdmlld0xpc3RBcyA9PT0gJ3RhYmxlJ1wiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciBtLTBcIiAqbmdJZj1cInNvcnQkIHwgYXN5bmMgYXMgc29ydFwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRmllbGRDbGljayhmaWVsZC5rZXksIGZpZWxkLnNvcnRhYmxlKVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmllbGQuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgJ2lzLWJlaW5nLXNvcnRlZCc6IGZpZWxkLmtleSA9PT0gc29ydC5zdGF0ZS5uYW1lICYmIHNvcnQuaXNTb3J0aW5nLFxuICAgICAgICAgICAgICAgIGFzY2VuZGluZzogc29ydC5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmNvbHVtbk5hbWUgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjbGljay1hYmxlJzogdGhpcy5yb3dDbGlja2VkLm9ic2VydmVycy5sZW5ndGggPiAwfVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtcyB8IGxpc3RGaWx0ZXI6IHNlYXJjaE1vZGVsXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUm93KGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi10b3BcIiAqbmdGb3I9XCJsZXQgbGlzdEl0ZW1GaWVsZCBvZiBpdGVtLmxpc3RJdGVtRmllbGRzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaXN0SXRlbUZpZWxkLnR5cGUgPT09ICcnXCI+XG4gICAgICAgICAgICAgICAge3sgbGlzdEl0ZW1GaWVsZC52YWx1ZSB8fCAnLScgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibGlzdEl0ZW1GaWVsZC50eXBlID09PSAnZHJvcGRvd25BY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJvcGRvd25BY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2xpc3RJdGVtRmllbGQ6IGxpc3RJdGVtRmllbGQsIGl0ZW06IGl0ZW19XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLXRvcFwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIoaXRlbXMgfCBsaXN0RmlsdGVyOiBzZWFyY2hNb2RlbCkubGVuZ3RoID09PSAwXCIgW2NvbFNwYW5dPVwiZmllbGRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICB7eyAnbGlzdC5ub01hdGNoaW5nSXRlbXMnIHwgdHJhbnNsYXRlIH19PGk+XCJ7eyBzZWFyY2hNb2RlbCB9fVwiPC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiAqbmdJZj1cInZpZXdNb2RlICYmIHZpZXdMaXN0QXMgPT09ICd0aWxlJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBwLTJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1zbS02IGNvbC14bC00IHAtMlwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXMgfCBsaXN0RmlsdGVyOiBzZWFyY2hNb2RlbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tSb3coaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrLWFibGUgdGlsZS1ob2xkZXIgcC00XCI+XG4gICAgICAgICAgICA8ZGwgY2xhc3M9XCJyb3cgbWItMFwiICpuZ0Zvcj1cImxldCBsaXN0SXRlbUZpZWxkIG9mIGl0ZW0ubGlzdEl0ZW1GaWVsZHNcIj5cbiAgICAgICAgICAgICAgPGR0IGNsYXNzPVwiY29sLTEyIGNvbC1tZC01IHRleHQteGwtcmlnaHRcIj57eyBsaXN0SXRlbUZpZWxkLmxhYmVsIH19PC9kdD5cbiAgICAgICAgICAgICAgPGRkIGNsYXNzPVwiY29sLTEyIGNvbC1tZC03XCI+e3sgbGlzdEl0ZW1GaWVsZC52YWx1ZSB8fCAnLScgfX08L2RkPlxuICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cIihpdGVtcyB8IGxpc3RGaWx0ZXI6IHNlYXJjaE1vZGVsKS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICB7eyAnbGlzdC5ub01hdGNoaW5nSXRlbXMnIHwgdHJhbnNsYXRlIH19PGk+XCJ7eyBzZWFyY2hNb2RlbCB9fVwiPC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJwYWdpbmF0aW9uLWhvbGRlciBiZy1saWdodCBweC00IHB0LTQgcGItMiBvdmVyZmxvdy1hdXRvIHJvdyBtci0wIG1sLTBcIlxuICAgICpuZ0lmPVwicGFnaW5hdGlvbiAmJiBpdGVtcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHM/Lmxlbmd0aCA+IDBcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZsb2F0LWxlZnQgcGFnZS1jb3VudCBjb2wtNFwiPlxuICAgICAgPHN0cm9uZz57e1xuICAgICAgICAnbGlzdC5jdXJyZW50UGFnZScgfCB0cmFuc2xhdGU6IHtjdXJyZW50OiBwYWdpbmF0aW9uLnBhZ2UsIHRvdGFsOiBnZXRUb3RhbFBhZ2VDb3VudCgpfVxuICAgICAgfX08L3N0cm9uZz5cbiAgICAgIDxiciAvPlxuICAgICAge3tcbiAgICAgICAgcGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA9PT0gMVxuICAgICAgICAgID8gKCdsaXN0LnNob3dpbmdSZXN1bHQnIHwgdHJhbnNsYXRlOiB7bnVtYmVyOiAoaXRlbXMgfCBsaXN0RmlsdGVyOiBzZWFyY2hNb2RlbCkubGVuZ3RofSlcbiAgICAgICAgICA6ICgnbGlzdC5zaG93aW5nUmVzdWx0cydcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgbnVtYmVyOiAoaXRlbXMgfCBsaXN0RmlsdGVyOiBzZWFyY2hNb2RlbCkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgdG90YWw6IHBhZ2luYXRpb24uY29sbGVjdGlvblNpemVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgIHt7ICdsaXN0LnNob3cnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicGFnaW5hdGlvbi5zaXplXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0UGFnaW5hdGlvblNpemUoJGV2ZW50KVwiPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiNTBcIj41MDwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICB7eyAnbGlzdC5lbnRyaWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgPG5nYi1wYWdpbmF0aW9uXG4gICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA+IHBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIGNsYXNzPVwiZmxvYXQtcmlnaHRcIlxuICAgICAgICBbY29sbGVjdGlvblNpemVdPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZVwiXG4gICAgICAgIFsocGFnZSldPVwicGFnaW5hdGlvbi5wYWdlXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIFttYXhTaXplXT1cInBhZ2luYXRpb24ubWF4UGFnaW5hdGlvbkl0ZW1TaXplXCJcbiAgICAgICAgW3JvdGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25DbGlja1BhZ2luYXRpb24ocGFnaW5hdGlvbi5wYWdlKVwiXG4gICAgICA+PC9uZ2ItcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLXJlc3VsdHNcIiBjbGFzcz1cInAtNVwiICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIHt7ICdsaXN0Lm5vUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLWZpZWxkLWRlZmluaXRpb25zXCIgY2xhc3M9XCJwLTVcIiAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID09PSAwXCI+XG4gICAge3sgJ2xpc3Qubm9GaWVsZERlZmluaXRpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duQWN0aW9ucyBsZXQtbGlzdEl0ZW1GaWVsZD1cImxpc3RJdGVtRmllbGRcIiBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJsaXN0SXRlbUZpZWxkPy52YWx1ZS5sZW5ndGggPiAwXCI+XG4gICAgPGFcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGQtYmxvY2tcIlxuICAgICAgaWQ9XCJkcm9wZG93bk1lbnVcIlxuICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiYWN0aW9uLWljb24gaWNvbiBtZGkgbWRpLW1vcmUtdmVydFwiPjwvaT5cbiAgICA8L2E+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVcIj5cbiAgICAgIDxhXG4gICAgICAgIChjbGljayk9XCJhY3Rpb24uY2FsbGJhY2soaXRlbSlcIlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcC0yXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBsaXN0SXRlbUZpZWxkLnZhbHVlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5pY29uQ2xhc3MgIT09IG51bGxcIj5cbiAgICAgICAgICA8aSBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAge3sgYWN0aW9uPy5sYWJlbCB8fCAnLScgfX1cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQVFsRCxNQUFNLE9BQU8sYUFBYTtJQTZCeEIsWUFBb0Isa0JBQXNDLEVBQVUsTUFBaUI7UUFBakUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFwQjVFLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFHbkIsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLGdCQUFXLEdBQTRCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFHdkIsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO1FBR2xDLFVBQUssR0FBRyxJQUFJLGVBQWUs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b3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NvcnRTdGF0ZSwgRGlyZWN0aW9ufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1ZpZXdDb250ZW50U2VydmljZX0gZnJvbSAnLi4vdmlldy1jb250ZW50L3ZpZXctY29udGVudC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgc3RhdGljIFBBR0lOQVRJT05fU0laRSA9ICdQYWdpbmF0aW9uU2l6ZSc7XG5cbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PGFueT47XG4gIEBJbnB1dCgpIGZpZWxkczogQXJyYXk8YW55PjtcbiAgQElucHV0KCkgcGFnaW5hdGlvbj86IGFueTtcbiAgQElucHV0KCkgdmlld01vZGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc1NlYXJjaGFibGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBoZWFkZXI/OiBib29sZWFuO1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuICBAT3V0cHV0KCkgcm93Q2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uU2V0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlYXJjaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPFNvcnRTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGhlYWRlclByb3ZpZGVkID0gZmFsc2U7XG4gIHB1YmxpYyB2aWV3TGlzdEFzOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hNb2RlbDogc3RyaW5nO1xuICBwdWJsaWMgcmVnRXhwU3RyaW5nUmVtb3ZlVW5kZXJzY29yZSA9IC9fL2c7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEJveCcpIHNlYXJjaEJveDogRWxlbWVudFJlZjtcblxuICByZWFkb25seSBzb3J0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U29ydFN0YXRlPih7XG4gICAgc3RhdGU6IHtuYW1lOiAnJywgZGlyZWN0aW9uOiAnREVTQyd9LFxuICAgIGlzU29ydGluZzogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIpIHtcbiAgICB0aGlzLnZpZXdMaXN0QXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndmlld0xpc3RBcycpIHx8ICd0YWJsZSc7XG4gIH1cblxuICBsb2FkUGFnaW5hdGlvblNpemUoKSB7XG4gICAgY29uc3QgZW50cmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0xpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWBcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9ICtlbnRyaWVzO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoK2VudHJpZXMpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gbG9hZGVkIGZyb20gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBDdXJyZW50OiAnLCBlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgTk9UIGV4aXN0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gV2lsbCB1c2UgZGVmYXVsdC4gQ2hhbmdlIGl0IHRvIGNyZWF0ZSBhbiBlbnRyeS4nXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdCgpO1xuICB9XG5cbiAgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtMaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9IG51bWJlck9mRW50cmllcztcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRQYWdpbmF0aW9uU2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWxTb3J0U3RhdGUpIHtcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLmluaXRpYWxTb3J0U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pdGVtcyAmJiBjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1MaXN0SXRlbXNNYXRjaEZpZWxkcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc1NlYXJjaGFibGUpIHtcbiAgICAgIGZyb21FdmVudCh0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHNlYXJjaCBjYWxsYmFrIGlzIHNwZWNpZmllZCwgcGVyaGFwcyB0byBxdWVyeSBvbiB0aGUgc2VydmVyIHNpZGVcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGVsID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtTGlzdEl0ZW1zTWF0Y2hGaWVsZHMoKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5maWVsZHMpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5saXN0SXRlbUZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmaWVsZCA9PiAoe1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIGxhYmVsOiBmaWVsZC5sYWJlbCxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlIHx8ICcnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnJlc29sdmVPYmplY3QoZmllbGQsIGl0ZW0pLFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DbGlja1JvdyhpdGVtKSB7XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZU9iamVjdChkZWZpbml0aW9uOiBhbnksIG9iajogYW55KSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbktleSA9IGRlZmluaXRpb24ua2V5O1xuICAgIGNvbnN0IGN1c3RvbVByb3BTdHJpbmcgPSAnJC4nO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb25LZXkuaW5jbHVkZXMoY3VzdG9tUHJvcFN0cmluZylcbiAgICAgID8gZGVmaW5pdGlvbktleS5zcGxpdChjdXN0b21Qcm9wU3RyaW5nKVsxXVxuICAgICAgOiBkZWZpbml0aW9uS2V5O1xuICAgIGNvbnN0IHJlc29sdmVkT2JqVmFsdWUgPSBrZXkuc3BsaXQoJy4nKS5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cnIpIHtcbiAgICAgIHJldHVybiBwcmV2ID8gcHJldltjdXJyXSA6IG51bGw7XG4gICAgfSwgb2JqIHx8IHNlbGYpO1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZW50U2VydmljZS5nZXQocmVzb2x2ZWRPYmpWYWx1ZSwgZGVmaW5pdGlvbik7XG4gIH1cblxuICBwdWJsaWMgc3dpdGNoVmlldyh0eXBlKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZpZXdMaXN0QXMnLCB0eXBlKTtcbiAgICB0aGlzLnZpZXdMaXN0QXMgPSB0eXBlO1xuICB9XG5cbiAgcHVibGljIGdldFRvdGFsUGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplIC8gdGhpcy5wYWdpbmF0aW9uLnNpemUpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tQYWdpbmF0aW9uKHBhZ2UpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25DbGlja2VkLmVtaXQocGFnZSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRmllbGRDbGljayhrZXk6IHN0cmluZywgc29ydGFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkZXNjOiBEaXJlY3Rpb24gPSAnREVTQyc7XG4gICAgY29uc3QgYXNjOiBEaXJlY3Rpb24gPSAnQVNDJztcblxuICAgIGlmICghc29ydGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHNvcnQgPT4ge1xuICAgICAgbGV0IG5ld1N0YXRlOiBTb3J0U3RhdGU7XG5cbiAgICAgIGlmIChzb3J0LnN0YXRlLm5hbWUgPT09IGtleSkge1xuICAgICAgICBpZiAoIXNvcnQuaXNTb3J0aW5nKSB7XG4gICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246IGRlc2N9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gZGVzYykge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7Li4uc29ydCwgc3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246IGFzY319O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHtzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogZGVzY30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogZGVzY30sIGlzU29ydGluZzogdHJ1ZX07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ydCQubmV4dChuZXdTdGF0ZSk7XG4gICAgICB0aGlzLnNvcnRDaGFuZ2VkLmVtaXQobmV3U3RhdGUpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXY+XG4gIDxkaXYgKm5nSWY9XCIoaXRlbXM/Lmxlbmd0aCA+IDAgJiYgZmllbGRzPy5sZW5ndGggPiAwKSB8fCBoZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgc2VhcmNoLWhvbGRlciBiZy1saWdodFwiXG4gICAgICBbbmdDbGFzc109XCJ7J3BiLTQgcHQtNCc6ICFoZWFkZXJ9XCJcbiAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlIHx8IHZpZXdNb2RlIHx8IGhlYWRlclwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImFsaWduLXNlbGYtc3RhcnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gcm93XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBjb2wtc20tOFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICAjc2VhcmNoQm94XG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3dpdGNoLXZpZXctaG9sZGVyIGJ0bi1ncm91cCBjb2wtc20tNCBtdC0xIG10LXNtLTBcIlxuICAgICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgICAgKm5nSWY9XCJ2aWV3TW9kZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ2aWV3TGlzdEFzID09PSAndGFibGUnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tZGVmYXVsdCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFZpZXcoJ3RhYmxlJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXZpZXctaGVhZGxpbmUgdmlldy1pY29uXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZpZXdMaXN0QXMgPT09ICd0aWxlJyA/ICdidG4tcHJpbWFyeScgOiAnYnRuLWRlZmF1bHQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hWaWV3KCd0aWxlJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXZpZXctbW9kdWxlIHZpZXctaWNvblwiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RhYnNdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxkaXYgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHM/Lmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZSBub1N3aXBlXCIgKm5nSWY9XCIhdmlld01vZGUgfHwgdmlld0xpc3RBcyA9PT0gJ3RhYmxlJ1wiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciBtLTBcIiAqbmdJZj1cInNvcnQkIHwgYXN5bmMgYXMgc29ydFwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRmllbGRDbGljayhmaWVsZC5rZXksIGZpZWxkLnNvcnRhYmxlKVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmllbGQuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgJ2lzLWJlaW5nLXNvcnRlZCc6IGZpZWxkLmtleSA9PT0gc29ydC5zdGF0ZS5uYW1lICYmIHNvcnQuaXNTb3J0aW5nLFxuICAgICAgICAgICAgICAgIGFzY2VuZGluZzogc29ydC5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmNvbHVtbk5hbWUgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjbGljay1hYmxlJzogdGhpcy5yb3dDbGlja2VkLm9ic2VydmVycy5sZW5ndGggPiAwfVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtcyB8IGxpc3RGaWx0ZXI6IHNlYXJjaE1vZGVsXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUm93KGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi10b3BcIiAqbmdGb3I9XCJsZXQgbGlzdEl0ZW1GaWVsZCBvZiBpdGVtLmxpc3RJdGVtRmllbGRzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaXN0SXRlbUZpZWxkLnR5cGUgPT09ICcnXCI+XG4gICAgICAgICAgICAgICAge3sgbGlzdEl0ZW1GaWVsZC52YWx1ZSB8fCAnLScgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibGlzdEl0ZW1GaWVsZC50eXBlID09PSAnZHJvcGRvd25BY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJvcGRvd25BY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2xpc3RJdGVtRmllbGQ6IGxpc3RJdGVtRmllbGQsIGl0ZW06IGl0ZW19XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLXRvcFwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIoaXRlbXMgfCBsaXN0RmlsdGVyOiBzZWFyY2hNb2RlbCkubGVuZ3RoID09PSAwXCIgW2NvbFNwYW5dPVwiZmllbGRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICB7eyAnbGlzdC5ub01hdGNoaW5nSXRlbXMnIHwgdHJhbnNsYXRlIH19PGk+XCJ7eyBzZWFyY2hNb2RlbCB9fVwiPC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiAqbmdJZj1cInZpZXdNb2RlICYmIHZpZXdMaXN0QXMgPT09ICd0aWxlJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBwLTJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1zbS02IGNvbC14bC00IHAtMlwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXMgfCBsaXN0RmlsdGVyOiBzZWFyY2hNb2RlbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tSb3coaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrLWFibGUgdGlsZS1ob2xkZXIgcC00XCI+XG4gICAgICAgICAgICA8ZGwgY2xhc3M9XCJyb3cgbWItMFwiICpuZ0Zvcj1cImxldCBsaXN0SXRlbUZpZWxkIG9mIGl0ZW0ubGlzdEl0ZW1GaWVsZHNcIj5cbiAgICAgICAgICAgICAgPGR0IGNsYXNzPVwiY29sLTEyIGNvbC1tZC01IHRleHQteGwtcmlnaHRcIj57eyBsaXN0SXRlbUZpZWxkLmxhYmVsIH19PC9kdD5cbiAgICAgICAgICAgICAgPGRkIGNsYXNzPVwiY29sLTEyIGNvbC1tZC03XCI+e3sgbGlzdEl0ZW1GaWVsZC52YWx1ZSB8fCAnLScgfX08L2RkPlxuICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cIihpdGVtcyB8IGxpc3RGaWx0ZXI6IHNlYXJjaE1vZGVsKS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICB7eyAnbGlzdC5ub01hdGNoaW5nSXRlbXMnIHwgdHJhbnNsYXRlIH19PGk+XCJ7eyBzZWFyY2hNb2RlbCB9fVwiPC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJwYWdpbmF0aW9uLWhvbGRlciBiZy1saWdodCBweC00IHB0LTQgcGItMiBvdmVyZmxvdy1hdXRvIHJvdyBtci0wIG1sLTBcIlxuICAgICpuZ0lmPVwicGFnaW5hdGlvbiAmJiBpdGVtcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHM/Lmxlbmd0aCA+IDBcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZsb2F0LWxlZnQgcGFnZS1jb3VudCBjb2wtNFwiPlxuICAgICAgPHN0cm9uZz57e1xuICAgICAgICAnbGlzdC5jdXJyZW50UGFnZScgfCB0cmFuc2xhdGU6IHtjdXJyZW50OiBwYWdpbmF0aW9uLnBhZ2UsIHRvdGFsOiBnZXRUb3RhbFBhZ2VDb3VudCgpfVxuICAgICAgfX08L3N0cm9uZz5cbiAgICAgIDxiciAvPlxuICAgICAge3tcbiAgICAgICAgcGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA9PT0gMVxuICAgICAgICAgID8gKCdsaXN0LnNob3dpbmdSZXN1bHQnIHwgdHJhbnNsYXRlOiB7bnVtYmVyOiAoaXRlbXMgfCBsaXN0RmlsdGVyOiBzZWFyY2hNb2RlbCkubGVuZ3RofSlcbiAgICAgICAgICA6ICgnbGlzdC5zaG93aW5nUmVzdWx0cydcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgbnVtYmVyOiAoaXRlbXMgfCBsaXN0RmlsdGVyOiBzZWFyY2hNb2RlbCkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgdG90YWw6IHBhZ2luYXRpb24uY29sbGVjdGlvblNpemVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgIHt7ICdsaXN0LnNob3cnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicGFnaW5hdGlvbi5zaXplXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0UGFnaW5hdGlvblNpemUoJGV2ZW50KVwiPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiNTBcIj41MDwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICB7eyAnbGlzdC5lbnRyaWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgPG5nYi1wYWdpbmF0aW9uXG4gICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA+IHBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIGNsYXNzPVwiZmxvYXQtcmlnaHRcIlxuICAgICAgICBbY29sbGVjdGlvblNpemVdPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZVwiXG4gICAgICAgIFsocGFnZSldPVwicGFnaW5hdGlvbi5wYWdlXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIFttYXhTaXplXT1cInBhZ2luYXRpb24ubWF4UGFnaW5hdGlvbkl0ZW1TaXplXCJcbiAgICAgICAgW3JvdGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25DbGlja1BhZ2luYXRpb24ocGFnaW5hdGlvbi5wYWdlKVwiXG4gICAgICA+PC9uZ2ItcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLXJlc3VsdHNcIiBjbGFzcz1cInAtNVwiICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIHt7ICdsaXN0Lm5vUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLWZpZWxkLWRlZmluaXRpb25zXCIgY2xhc3M9XCJwLTVcIiAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID09PSAwXCI+XG4gICAge3sgJ2xpc3Qubm9GaWVsZERlZmluaXRpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duQWN0aW9ucyBsZXQtbGlzdEl0ZW1GaWVsZD1cImxpc3RJdGVtRmllbGRcIiBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJsaXN0SXRlbUZpZWxkPy52YWx1ZS5sZW5ndGggPiAwXCI+XG4gICAgPGFcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGQtYmxvY2tcIlxuICAgICAgaWQ9XCJkcm9wZG93bk1lbnVcIlxuICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiYWN0aW9uLWljb24gaWNvbiBtZGkgbWRpLWRvdHMtdmVydGljYWxcIj48L2k+XG4gICAgPC9hPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25NZW51XCI+XG4gICAgICA8YVxuICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0pXCJcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHAtMlwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgbGlzdEl0ZW1GaWVsZC52YWx1ZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24uaWNvbkNsYXNzICE9PSBudWxsXCI+XG4gICAgICAgICAgPGkgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIHt7IGFjdGlvbj8ubGFiZWwgfHwgJy0nIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -18,9 +18,9 @@ import * as i0 from "@angular/core";
18
18
  export class ProgressBarComponent {
19
19
  }
20
20
  ProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- ProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ProgressBarComponent, selector: "valtimo-progress-bar", ngImport: i0, template: "<div class=\"progress\" style=\"position: relative\">\n <div class=\"progress-bar progress-bar-striped indeterminate\"></div>\n</div>\n", styles: [".progress-bar.indeterminate{position:relative;animation:progress-indeterminate 3s linear infinite}@keyframes progress-indeterminate{0%{left:-25%;width:25%}to{left:100%;width:25%}}\n"] });
21
+ ProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ProgressBarComponent, selector: "valtimo-progress-bar", 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=\"progress\" style=\"position: relative\">\n <div class=\"progress-bar progress-bar-striped indeterminate\"></div>\n</div>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.progress-bar.indeterminate{position:relative;animation:progress-indeterminate 3s linear infinite}@keyframes progress-indeterminate{0%{left:-25%;width:25%}to{left:100%;width:25%}}\n"] });
22
22
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProgressBarComponent, decorators: [{
23
23
  type: Component,
24
- args: [{ selector: 'valtimo-progress-bar', template: "<div class=\"progress\" style=\"position: relative\">\n <div class=\"progress-bar progress-bar-striped indeterminate\"></div>\n</div>\n", styles: [".progress-bar.indeterminate{position:relative;animation:progress-indeterminate 3s linear infinite}@keyframes progress-indeterminate{0%{left:-25%;width:25%}to{left:100%;width:25%}}\n"] }]
24
+ args: [{ selector: 'valtimo-progress-bar', 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=\"progress\" style=\"position: relative\">\n <div class=\"progress-bar progress-bar-striped indeterminate\"></div>\n</div>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.progress-bar.indeterminate{position:relative;animation:progress-indeterminate 3s linear infinite}@keyframes progress-indeterminate{0%{left:-25%;width:25%}to{left:100%;width:25%}}\n"] }]
25
25
  }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvcHJvZ3Jlc3MtYmFyL3Byb2dyZXNzLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3Byb2dyZXNzLWJhci9wcm9ncmVzcy1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQU94QyxNQUFNLE9BQU8sb0JBQW9COztrSEFBcEIsb0JBQW9CO3NHQUFwQixvQkFBb0IsNERDdkJqQywwSUFHQTs0RkRvQmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1wcm9ncmVzcy1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQmFyQ29tcG9uZW50IHt9XG4iLCI8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdHJpcGVkIGluZGV0ZXJtaW5hdGVcIj48L2Rpdj5cbjwvZGl2PlxuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvcHJvZ3Jlc3MtYmFyL3Byb2dyZXNzLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3Byb2dyZXNzLWJhci9wcm9ncmVzcy1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQU94QyxNQUFNLE9BQU8sb0JBQW9COztrSEFBcEIsb0JBQW9CO3NHQUFwQixvQkFBb0IsNERDdkJqQywweEJBbUJBOzRGRElhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tcHJvZ3Jlc3MtYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2dyZXNzLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb2dyZXNzLWJhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0JhckNvbXBvbmVudCB7fVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdHJpcGVkIGluZGV0ZXJtaW5hdGVcIj48L2Rpdj5cbjwvZGl2PlxuIl19
@@ -168,10 +168,10 @@ export class SearchableDropdownComponent {
168
168
  }
169
169
  }
170
170
  SearchableDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchableDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
171
- SearchableDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SearchableDropdownComponent, selector: "valtimo-searchable-dropdown", inputs: { style: "style", items: "items", buttonText: "buttonText", searchText: "searchText", noResultsText: "noResultsText", disabled: "disabled", width: "width" }, outputs: { itemSelected: "itemSelected" }, host: { listeners: { "click": "clickInside()", "document:click": "clickout()" } }, viewQueries: [{ propertyName: "buttons", predicate: ["button"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button\n class=\"btn btn-primary btn-sm dropdown-size\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5 class=\"underline-button\" (click)=\"openDropdown()\" [style.width.px]=\"width\">\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"dropdown-container\" [style.width.px]=\"width\">\n <div class=\"dropdown-size search\" [style.width.px]=\"width\">\n <input\n #search\n [ngClass]=\"{disabled: disabled}\"\n [placeholder]=\"searchText\"\n [formControl]=\"searchTerm\"\n />\n {{ search.focus() }}\n </div>\n <div class=\"dropdown-list\" (mouseenter)=\"mouseEnterList()\" (mouseleave)=\"mouseLeaveList()\">\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container\n *ngIf=\"\n filteredItems.length > 0 && focusedItemId$ | async as focusedItemId;\n else noResults\n \"\n >\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{focus: focusedItemId === item.id, disabled: disabled}\"\n class=\"dropdown-button dropdown-size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"dropdown-button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div class=\"dropdown-button dropdown-size disabled\" [style.width.px]=\"width\">\n <span class=\"dropdown-button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div *ngIf=\"style === 'button' || !style\" class=\"dropdown-size\" [style.width.px]=\"width\"></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"underline-button\"><b>-</b></h5>\n</ng-template>\n", styles: [".dropdown-size{width:250px;height:34px}.underline-button{text-decoration:underline;width:250px;cursor:pointer}.dropdown-container{background-color:#fff;position:fixed;z-index:999;border:1px solid #e3e3e3;box-shadow:0 0 6px #0000001f;border-radius:3px;padding:7px 0;overflow:hidden;display:flex;flex-direction:column;width:250px;max-height:300px}.dropdown-list{list-style:none;padding:0;margin:0;overflow:auto;overflow-x:hidden;z-index:9999}.search{border-bottom:1px solid #dee2e6;padding:8px 24px;display:flex;align-items:center;flex-shrink:0;height:44px}.search input{width:100%;border:none;outline:none;padding:0}.search input:focus{border:none;outline:none}.dropdown-button{font-weight:400;color:#504e4e;padding:8px 24px;background-color:#fff;cursor:pointer;font-size:1rem;display:flex;align-items:center;border:none;outline:none}.dropdown-button.focus{background-color:#f5f5f5}.dropdown-button-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.disabled{pointer-events:none;color:#959595;cursor:default}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe } });
171
+ SearchableDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SearchableDropdownComponent, selector: "valtimo-searchable-dropdown", inputs: { style: "style", items: "items", buttonText: "buttonText", searchText: "searchText", noResultsText: "noResultsText", disabled: "disabled", width: "width" }, outputs: { itemSelected: "itemSelected" }, host: { listeners: { "click": "clickInside()", "document:click": "clickout()" } }, viewQueries: [{ propertyName: "buttons", predicate: ["button"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button\n class=\"btn btn-primary btn-sm dropdown-size\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5 class=\"underline-button\" (click)=\"openDropdown()\" [style.width.px]=\"width\">\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"dropdown-container\" [style.width.px]=\"width\">\n <div class=\"dropdown-size search\" [style.width.px]=\"width\">\n <input\n #search\n [ngClass]=\"{disabled: disabled}\"\n [placeholder]=\"searchText\"\n [formControl]=\"searchTerm\"\n />\n {{ search.focus() }}\n </div>\n <div class=\"dropdown-list\" (mouseenter)=\"mouseEnterList()\" (mouseleave)=\"mouseLeaveList()\">\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container\n *ngIf=\"\n filteredItems.length > 0 && focusedItemId$ | async as focusedItemId;\n else noResults\n \"\n >\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{focus: focusedItemId === item.id, disabled: disabled}\"\n class=\"dropdown-button dropdown-size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"dropdown-button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div class=\"dropdown-button dropdown-size disabled\" [style.width.px]=\"width\">\n <span class=\"dropdown-button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div *ngIf=\"style === 'button' || !style\" class=\"dropdown-size\" [style.width.px]=\"width\"></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"underline-button\"><b>-</b></h5>\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 */.dropdown-size{width:250px;height:34px}.underline-button{text-decoration:underline;width:250px;cursor:pointer}.dropdown-container{background-color:#fff;position:fixed;z-index:999;border:1px solid #e3e3e3;box-shadow:0 0 6px #0000001f;border-radius:3px;padding:7px 0;overflow:hidden;display:flex;flex-direction:column;width:250px;max-height:300px}.dropdown-list{list-style:none;padding:0;margin:0;overflow:auto;overflow-x:hidden;z-index:9999}.search{border-bottom:1px solid #dee2e6;padding:8px 24px;display:flex;align-items:center;flex-shrink:0;height:44px}.search input{width:100%;border:none;outline:none;padding:0}.search input:focus{border:none;outline:none}.dropdown-button{font-weight:400;color:#504e4e;padding:8px 24px;background-color:#fff;cursor:pointer;font-size:1rem;display:flex;align-items:center;border:none;outline:none}.dropdown-button.focus{background-color:#f5f5f5}.dropdown-button-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.disabled{pointer-events:none;color:#959595;cursor:default}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe } });
172
172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchableDropdownComponent, decorators: [{
173
173
  type: Component,
174
- args: [{ selector: 'valtimo-searchable-dropdown', template: "<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button\n class=\"btn btn-primary btn-sm dropdown-size\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5 class=\"underline-button\" (click)=\"openDropdown()\" [style.width.px]=\"width\">\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"dropdown-container\" [style.width.px]=\"width\">\n <div class=\"dropdown-size search\" [style.width.px]=\"width\">\n <input\n #search\n [ngClass]=\"{disabled: disabled}\"\n [placeholder]=\"searchText\"\n [formControl]=\"searchTerm\"\n />\n {{ search.focus() }}\n </div>\n <div class=\"dropdown-list\" (mouseenter)=\"mouseEnterList()\" (mouseleave)=\"mouseLeaveList()\">\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container\n *ngIf=\"\n filteredItems.length > 0 && focusedItemId$ | async as focusedItemId;\n else noResults\n \"\n >\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{focus: focusedItemId === item.id, disabled: disabled}\"\n class=\"dropdown-button dropdown-size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"dropdown-button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div class=\"dropdown-button dropdown-size disabled\" [style.width.px]=\"width\">\n <span class=\"dropdown-button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div *ngIf=\"style === 'button' || !style\" class=\"dropdown-size\" [style.width.px]=\"width\"></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"underline-button\"><b>-</b></h5>\n</ng-template>\n", styles: [".dropdown-size{width:250px;height:34px}.underline-button{text-decoration:underline;width:250px;cursor:pointer}.dropdown-container{background-color:#fff;position:fixed;z-index:999;border:1px solid #e3e3e3;box-shadow:0 0 6px #0000001f;border-radius:3px;padding:7px 0;overflow:hidden;display:flex;flex-direction:column;width:250px;max-height:300px}.dropdown-list{list-style:none;padding:0;margin:0;overflow:auto;overflow-x:hidden;z-index:9999}.search{border-bottom:1px solid #dee2e6;padding:8px 24px;display:flex;align-items:center;flex-shrink:0;height:44px}.search input{width:100%;border:none;outline:none;padding:0}.search input:focus{border:none;outline:none}.dropdown-button{font-weight:400;color:#504e4e;padding:8px 24px;background-color:#fff;cursor:pointer;font-size:1rem;display:flex;align-items:center;border:none;outline:none}.dropdown-button.focus{background-color:#f5f5f5}.dropdown-button-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.disabled{pointer-events:none;color:#959595;cursor:default}\n"] }]
174
+ args: [{ selector: 'valtimo-searchable-dropdown', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button\n class=\"btn btn-primary btn-sm dropdown-size\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5 class=\"underline-button\" (click)=\"openDropdown()\" [style.width.px]=\"width\">\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"dropdown-container\" [style.width.px]=\"width\">\n <div class=\"dropdown-size search\" [style.width.px]=\"width\">\n <input\n #search\n [ngClass]=\"{disabled: disabled}\"\n [placeholder]=\"searchText\"\n [formControl]=\"searchTerm\"\n />\n {{ search.focus() }}\n </div>\n <div class=\"dropdown-list\" (mouseenter)=\"mouseEnterList()\" (mouseleave)=\"mouseLeaveList()\">\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container\n *ngIf=\"\n filteredItems.length > 0 && focusedItemId$ | async as focusedItemId;\n else noResults\n \"\n >\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{focus: focusedItemId === item.id, disabled: disabled}\"\n class=\"dropdown-button dropdown-size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"dropdown-button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div class=\"dropdown-button dropdown-size disabled\" [style.width.px]=\"width\">\n <span class=\"dropdown-button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div *ngIf=\"style === 'button' || !style\" class=\"dropdown-size\" [style.width.px]=\"width\"></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"underline-button\"><b>-</b></h5>\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 */.dropdown-size{width:250px;height:34px}.underline-button{text-decoration:underline;width:250px;cursor:pointer}.dropdown-container{background-color:#fff;position:fixed;z-index:999;border:1px solid #e3e3e3;box-shadow:0 0 6px #0000001f;border-radius:3px;padding:7px 0;overflow:hidden;display:flex;flex-direction:column;width:250px;max-height:300px}.dropdown-list{list-style:none;padding:0;margin:0;overflow:auto;overflow-x:hidden;z-index:9999}.search{border-bottom:1px solid #dee2e6;padding:8px 24px;display:flex;align-items:center;flex-shrink:0;height:44px}.search input{width:100%;border:none;outline:none;padding:0}.search input:focus{border:none;outline:none}.dropdown-button{font-weight:400;color:#504e4e;padding:8px 24px;background-color:#fff;cursor:pointer;font-size:1rem;display:flex;align-items:center;border:none;outline:none}.dropdown-button.focus{background-color:#f5f5f5}.dropdown-button-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.disabled{pointer-events:none;color:#959595;cursor:default}\n"] }]
175
175
  }], propDecorators: { style: [{
176
176
  type: Input
177
177
  }], items: [{
@@ -198,4 +198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
198
198
  type: HostListener,
199
199
  args: ['document:click']
200
200
  }] } });
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFPbEQsTUFBTSxPQUFPLDJCQUEyQjtJQUx4QztRQVlXLFVBQUssR0FBRyxHQUFHLENBQUM7UUFFWCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJM0IsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUU1QixlQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUQsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRTVDLG1C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OzZHQUEzQiwyQkFBMkIsa2RDeEN4Qyx3OUVBeUVBOzRGRGpDYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsNkJBQTZCOzhCQUs5QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRWlCLE9BQU87c0JBQTlCLFlBQVk7dUJBQUMsUUFBUTtnQkFxQnRCLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPO2dCQU1yQixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtEcm9wZG93bkJ1dHRvblN0eWxlLCBEcm9wZG93bkl0ZW19IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1zZWFyY2hhYmxlLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaGFibGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2hhYmxlLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaGFibGVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBzdHlsZTogRHJvcGRvd25CdXR0b25TdHlsZTtcbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PERyb3Bkb3duSXRlbT47XG4gIEBJbnB1dCgpIGJ1dHRvblRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBub1Jlc3VsdHNUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSB3aWR0aCA9IDI1MDtcblxuICBAT3V0cHV0KCkgaXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2J1dHRvbicpIGJ1dHRvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaElkID0gJ3NlYXJjaCc7XG5cbiAgcmVhZG9ubHkgc2VhcmNoVGVybSA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgcmVhZG9ubHkgZm9jdXNlZEl0ZW1JZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odGhpcy5zZWFyY2hJZCk7XG5cbiAgcmVhZG9ubHkgb3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBmaWx0ZXJlZEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8RHJvcGRvd25JdGVtPj4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIHdhc0luc2lkZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUga2V5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1vdXNlT25MaXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgY2xpY2tJbnNpZGUoKSB7XG4gICAgdGhpcy53YXNJbnNpZGUgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKVxuICBjbGlja291dCgpIHtcbiAgICBpZiAoIXRoaXMud2FzSW5zaWRlKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gICAgdGhpcy53YXNJbnNpZGUgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbktleXNTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5TZWFyY2hTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ2hhbmdlcyA9IGNoYW5nZXMuaXRlbXM7XG4gICAgY29uc3QgY3VycmVuSXRlbXMgPSBpdGVtQ2hhbmdlcy5jdXJyZW50VmFsdWU7XG4gICAgaWYgKGl0ZW1DaGFuZ2VzICYmICFpdGVtQ2hhbmdlcy5wcmV2aW91c1ZhbHVlICYmIGN1cnJlbkl0ZW1zKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoY3VycmVuSXRlbXMpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMua2V5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4kLm5leHQodHJ1ZSk7XG4gIH1cblxuICBob3Zlck92ZXJCdXR0b24oaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZEl0ZW1JZCQubmV4dChpZCk7XG4gIH1cblxuICBtb3VzZUVudGVyTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlT25MaXN0JC5uZXh0KHRydWUpO1xuICB9XG5cbiAgbW91c2VMZWF2ZUxpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZU9uTGlzdCQubmV4dChmYWxzZSk7XG4gIH1cblxuICByZXNldEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZEl0ZW1JZCQubmV4dCh0aGlzLnNlYXJjaElkKTtcbiAgfVxuXG4gIHN1Ym1pdChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChpZCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLnJlc2V0Rm9jdXMoKTtcbiAgICB0aGlzLm9wZW4kLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuS2V5c1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmtleVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vdXNlT25MaXN0JCwgdGhpcy5maWx0ZXJlZEl0ZW1zJCwgdGhpcy5mb2N1c2VkSXRlbUlkJF0pXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChbbW91c2VPbkxpc3QsIGl0ZW1zLCBmb2N1c2VkSWRdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmb2N1c2VkSWQpO1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IGV2ZW50LmNvZGU7XG4gICAgICAgICAgICBjb25zdCBzaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICAgICAgY29uc3QgZG93biA9ICdBcnJvd0Rvd24nO1xuICAgICAgICAgICAgY29uc3QgdGFiID0gJ1RhYic7XG4gICAgICAgICAgICBjb25zdCB1cCA9ICdBcnJvd1VwJztcbiAgICAgICAgICAgIGNvbnN0IGVudGVyID0gJ0VudGVyJztcbiAgICAgICAgICAgIGNvbnN0IGVzY2FwZSA9ICdFc2NhcGUnO1xuXG4gICAgICAgICAgICAvLyBjbG9zZSBkcm9wZG93biBvbiBwcmVzc2luZyBlc2NhcGVcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBlc2NhcGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHN1Ym1pdCBpdGVtIHdoZW4gZm9jdXMgaXMgb24gYW4gaXRlbSBpbiB0aGUgbGlzdCBhbmQgZW50ZXIgaXMgcHJlc3NlZFxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IGVudGVyICYmIGZvY3VzZWRJZCAhPT0gdGhpcy5zZWFyY2hJZCkge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pdChmb2N1c2VkSWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBvbmx5IGhhbmRsZSB0YWIgb3IgYXJyb3cga2V5cHJlc3NlcyB3aGVuIGl0ZW1zIGFyZSBzaG93biBhbmQgdGhlIG1vdXNlIGlzIG5vdCBvbiB0aGUgbGlzdFxuICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDAgJiYgIW1vdXNlT25MaXN0KSB7XG4gICAgICAgICAgICAgIC8vIGhhbmRsZSBtb3ZpbmcgZG93biBpbiB0aGUgbGlzdCB3aXRoIGFycm93IGRvd24gb3IgdGFiXG4gICAgICAgICAgICAgIGlmIChjb2RlID09PSBkb3duIHx8IChjb2RlID09PSB0YWIgJiYgIXNoaWZ0S2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCB3aGVuIGZvY3VzIGlzIG9uIHNlYXJjaCBib3hcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZElkID09PSB0aGlzLnNlYXJjaElkKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLm5leHQoaXRlbXNbMF0uaWQpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCdXR0b25JbnRvVmlldyhmb2N1c2VkSWQpO1xuICAgICAgICAgICAgICAgICAgLy8gbW92ZSBmb2N1cyB0byBuZXh0IGl0ZW0gaW4gdGhlIGxpc3QgaWYgZm9jdXMgaXMgbm90IG9uIGxhc3QgaXRlbVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluZGV4ICsgMSA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSXRlbUlkJC5uZXh0KGl0ZW1zW2ZvY3VzZWRJbmRleCArIDFdLmlkKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnV0dG9uSW50b1ZpZXcoZm9jdXNlZElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIG1vdmluZyB1cCBpbiB0aGUgbGlzdCB3aXRoIHVwIGFycm93IHVwIG9yIHNoaWZ0K3RhYlxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIChjb2RlID09PSB1cCB8fCAoY29kZSA9PT0gdGFiICYmIHNoaWZ0S2V5KSkgJiZcbiAgICAgICAgICAgICAgICBmb2N1c2VkSWQgIT09IHRoaXMuc2VhcmNoSWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbW92ZSB0byBwcmV2aW91cyBpdGVtIGlmIGZvY3VzIGlzIG5vdCBvbiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdFxuICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLm5leHQoaXRlbXNbZm9jdXNlZEluZGV4IC0gMV0uaWQpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCdXR0b25JbnRvVmlldyhmb2N1c2VkSWQpO1xuICAgICAgICAgICAgICAgICAgLy8gbW92ZSBmb2N1cyB0byBzZWFyY2ggYm94IGlmIGZvY3VzIGlzIG9uIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3RcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNlYXJjaFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoVGVybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHNlYXJjaFRlcm0gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkSXRlbUlkJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmb2N1c2VkSXRlbUlkID0+IHtcbiAgICAgICAgaWYgKCFzZWFyY2hUZXJtKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zJC5uZXh0KHRoaXMuaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgICBpdGVtLnRleHQudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dChmaWx0ZXJlZEl0ZW1zKTtcblxuICAgICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gc2VhcmNoIGJveCBpZiBmaWx0ZXJlZCBsaXN0IGxlbmd0aCBpcyAwIG9yIHByZXZpb3VzbHkgZm9jdXNlZCBpdGVtIGlzIG5vdCBpbiBmaWx0ZXJlZCBsaXN0IGFueW1vcmVcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgIWZpbHRlcmVkSXRlbXMuc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IGZvY3VzZWRJdGVtSWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtb3ZlIHNjcm9sbGluZyBidXR0b24gaW50byB2aWV3IHRvIGVuZCBvZiBxdWV1ZSwgc28gdGhhdCBET00gY2FuIGJlIHVwZGF0ZWQgZmlyc3RcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxCdXR0b25JbnRvVmlldyhmb2N1c2VkSXRlbUlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQnV0dG9uSW50b1ZpZXcoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgY29uc3QgZm9jdXNJdGVtSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBpZCk7XG4gICAgICBjb25zdCBmb2N1c2VkQnV0dG9uID0gdGhpcy5idXR0b25zLnRvQXJyYXkoKVtmb2N1c0l0ZW1JbmRleF07XG5cbiAgICAgIGlmIChmb2N1c2VkQnV0dG9uKSB7XG4gICAgICAgIGZvY3VzZWRCdXR0b24ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcid9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImJ1dHRvblRleHQgJiYgaXRlbXNcIj5cbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCIob3BlbiQgfCBhc3luYykgPyBvcGVuZWQgOiBjbG9zZWRcIj4gPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjbG9zZWQ+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZSA9PT0gJ2J1dHRvbicgfHwgIXN0eWxlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGRyb3Bkb3duLXNpemVcIlxuICAgICAgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigpXCJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiXG4gICAgPlxuICAgICAge3sgYnV0dG9uVGV4dCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlID09PSAndW5kZXJsaW5lZFRleHQnXCI+XG4gICAgPGg1IGNsYXNzPVwidW5kZXJsaW5lLWJ1dHRvblwiIChjbGljayk9XCJvcGVuRHJvcGRvd24oKVwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiPlxuICAgICAgPGI+XG4gICAgICAgIHt7IGJ1dHRvblRleHQgfX1cbiAgICAgIDwvYj5cbiAgICA8L2g1PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjb3BlbmVkPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLXNpemUgc2VhcmNoXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI3NlYXJjaFxuICAgICAgICBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IGRpc2FibGVkfVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaFRlcm1cIlxuICAgICAgLz5cbiAgICAgIHt7IHNlYXJjaC5mb2N1cygpIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWxpc3RcIiAobW91c2VlbnRlcik9XCJtb3VzZUVudGVyTGlzdCgpXCIgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZUxpc3QoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkSXRlbXMkIHwgYXN5bmMgYXMgZmlsdGVyZWRJdGVtc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGZpbHRlcmVkSXRlbXMubGVuZ3RoID4gMCAmJiBmb2N1c2VkSXRlbUlkJCB8IGFzeW5jIGFzIGZvY3VzZWRJdGVtSWQ7XG4gICAgICAgICAgICBlbHNlIG5vUmVzdWx0c1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAjYnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntmb2N1czogZm9jdXNlZEl0ZW1JZCA9PT0gaXRlbS5pZCwgZGlzYWJsZWQ6IGRpc2FibGVkfVwiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWJ1dHRvbiBkcm9wZG93bi1zaXplXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXQoaXRlbS5pZClcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJPdmVyQnV0dG9uKGl0ZW0uaWQpXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInJlc2V0Rm9jdXMoKVwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24tYnV0dG9uLXRleHRcIj5cbiAgICAgICAgICAgICAge3sgaXRlbS50ZXh0IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNwYWNlXCI+IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub1Jlc3VsdHM+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1idXR0b24gZHJvcGRvd24tc2l6ZSBkaXNhYmxlZFwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24tYnV0dG9uLXRleHRcIj57eyBub1Jlc3VsdHNUZXh0IH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3BhY2U+XG4gIDxkaXYgKm5nSWY9XCJzdHlsZSA9PT0gJ2J1dHRvbicgfHwgIXN0eWxlXCIgY2xhc3M9XCJkcm9wZG93bi1zaXplXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCI+PC9kaXY+XG4gIDxoNSAqbmdJZj1cInN0eWxlID09PSAndW5kZXJsaW5lZFRleHQnXCIgY2xhc3M9XCJ1bmRlcmxpbmUtYnV0dG9uXCI+PGI+LTwvYj48L2g1PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24vc2VhcmNoYWJsZS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFPbEQsTUFBTSxPQUFPLDJCQUEyQjtJQUx4QztRQVlXLFVBQUssR0FBRyxHQUFHLENBQUM7UUFFWCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJM0IsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUU1QixlQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUQsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRTVDLG1C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OzZHQUEzQiwyQkFBMkIsa2RDeEN4Qyx3bUdBeUZBOzRGRGpEYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsNkJBQTZCOzhCQUs5QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRWlCLE9BQU87c0JBQTlCLFlBQVk7dUJBQUMsUUFBUTtnQkFxQnRCLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPO2dCQU1yQixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtEcm9wZG93bkJ1dHRvblN0eWxlLCBEcm9wZG93bkl0ZW19IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1zZWFyY2hhYmxlLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaGFibGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2hhYmxlLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaGFibGVEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBzdHlsZTogRHJvcGRvd25CdXR0b25TdHlsZTtcbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PERyb3Bkb3duSXRlbT47XG4gIEBJbnB1dCgpIGJ1dHRvblRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBub1Jlc3VsdHNUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSB3aWR0aCA9IDI1MDtcblxuICBAT3V0cHV0KCkgaXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2J1dHRvbicpIGJ1dHRvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaElkID0gJ3NlYXJjaCc7XG5cbiAgcmVhZG9ubHkgc2VhcmNoVGVybSA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgcmVhZG9ubHkgZm9jdXNlZEl0ZW1JZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odGhpcy5zZWFyY2hJZCk7XG5cbiAgcmVhZG9ubHkgb3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBmaWx0ZXJlZEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8RHJvcGRvd25JdGVtPj4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIHdhc0luc2lkZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUga2V5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1vdXNlT25MaXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgY2xpY2tJbnNpZGUoKSB7XG4gICAgdGhpcy53YXNJbnNpZGUgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKVxuICBjbGlja291dCgpIHtcbiAgICBpZiAoIXRoaXMud2FzSW5zaWRlKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gICAgdGhpcy53YXNJbnNpZGUgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbktleXNTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5TZWFyY2hTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ2hhbmdlcyA9IGNoYW5nZXMuaXRlbXM7XG4gICAgY29uc3QgY3VycmVuSXRlbXMgPSBpdGVtQ2hhbmdlcy5jdXJyZW50VmFsdWU7XG4gICAgaWYgKGl0ZW1DaGFuZ2VzICYmICFpdGVtQ2hhbmdlcy5wcmV2aW91c1ZhbHVlICYmIGN1cnJlbkl0ZW1zKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoY3VycmVuSXRlbXMpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMua2V5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4kLm5leHQodHJ1ZSk7XG4gIH1cblxuICBob3Zlck92ZXJCdXR0b24oaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZEl0ZW1JZCQubmV4dChpZCk7XG4gIH1cblxuICBtb3VzZUVudGVyTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlT25MaXN0JC5uZXh0KHRydWUpO1xuICB9XG5cbiAgbW91c2VMZWF2ZUxpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZU9uTGlzdCQubmV4dChmYWxzZSk7XG4gIH1cblxuICByZXNldEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZEl0ZW1JZCQubmV4dCh0aGlzLnNlYXJjaElkKTtcbiAgfVxuXG4gIHN1Ym1pdChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChpZCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLnJlc2V0Rm9jdXMoKTtcbiAgICB0aGlzLm9wZW4kLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuS2V5c1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmtleVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vdXNlT25MaXN0JCwgdGhpcy5maWx0ZXJlZEl0ZW1zJCwgdGhpcy5mb2N1c2VkSXRlbUlkJF0pXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChbbW91c2VPbkxpc3QsIGl0ZW1zLCBmb2N1c2VkSWRdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmb2N1c2VkSWQpO1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IGV2ZW50LmNvZGU7XG4gICAgICAgICAgICBjb25zdCBzaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICAgICAgY29uc3QgZG93biA9ICdBcnJvd0Rvd24nO1xuICAgICAgICAgICAgY29uc3QgdGFiID0gJ1RhYic7XG4gICAgICAgICAgICBjb25zdCB1cCA9ICdBcnJvd1VwJztcbiAgICAgICAgICAgIGNvbnN0IGVudGVyID0gJ0VudGVyJztcbiAgICAgICAgICAgIGNvbnN0IGVzY2FwZSA9ICdFc2NhcGUnO1xuXG4gICAgICAgICAgICAvLyBjbG9zZSBkcm9wZG93biBvbiBwcmVzc2luZyBlc2NhcGVcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBlc2NhcGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHN1Ym1pdCBpdGVtIHdoZW4gZm9jdXMgaXMgb24gYW4gaXRlbSBpbiB0aGUgbGlzdCBhbmQgZW50ZXIgaXMgcHJlc3NlZFxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IGVudGVyICYmIGZvY3VzZWRJZCAhPT0gdGhpcy5zZWFyY2hJZCkge1xuICAgICAgICAgICAgICB0aGlzLnN1Ym1pdChmb2N1c2VkSWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBvbmx5IGhhbmRsZSB0YWIgb3IgYXJyb3cga2V5cHJlc3NlcyB3aGVuIGl0ZW1zIGFyZSBzaG93biBhbmQgdGhlIG1vdXNlIGlzIG5vdCBvbiB0aGUgbGlzdFxuICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDAgJiYgIW1vdXNlT25MaXN0KSB7XG4gICAgICAgICAgICAgIC8vIGhhbmRsZSBtb3ZpbmcgZG93biBpbiB0aGUgbGlzdCB3aXRoIGFycm93IGRvd24gb3IgdGFiXG4gICAgICAgICAgICAgIGlmIChjb2RlID09PSBkb3duIHx8IChjb2RlID09PSB0YWIgJiYgIXNoaWZ0S2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCB3aGVuIGZvY3VzIGlzIG9uIHNlYXJjaCBib3hcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZElkID09PSB0aGlzLnNlYXJjaElkKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLm5leHQoaXRlbXNbMF0uaWQpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCdXR0b25JbnRvVmlldyhmb2N1c2VkSWQpO1xuICAgICAgICAgICAgICAgICAgLy8gbW92ZSBmb2N1cyB0byBuZXh0IGl0ZW0gaW4gdGhlIGxpc3QgaWYgZm9jdXMgaXMgbm90IG9uIGxhc3QgaXRlbVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluZGV4ICsgMSA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSXRlbUlkJC5uZXh0KGl0ZW1zW2ZvY3VzZWRJbmRleCArIDFdLmlkKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnV0dG9uSW50b1ZpZXcoZm9jdXNlZElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIG1vdmluZyB1cCBpbiB0aGUgbGlzdCB3aXRoIHVwIGFycm93IHVwIG9yIHNoaWZ0K3RhYlxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIChjb2RlID09PSB1cCB8fCAoY29kZSA9PT0gdGFiICYmIHNoaWZ0S2V5KSkgJiZcbiAgICAgICAgICAgICAgICBmb2N1c2VkSWQgIT09IHRoaXMuc2VhcmNoSWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbW92ZSB0byBwcmV2aW91cyBpdGVtIGlmIGZvY3VzIGlzIG5vdCBvbiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdFxuICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtSWQkLm5leHQoaXRlbXNbZm9jdXNlZEluZGV4IC0gMV0uaWQpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCdXR0b25JbnRvVmlldyhmb2N1c2VkSWQpO1xuICAgICAgICAgICAgICAgICAgLy8gbW92ZSBmb2N1cyB0byBzZWFyY2ggYm94IGlmIGZvY3VzIGlzIG9uIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3RcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNlYXJjaFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoVGVybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHNlYXJjaFRlcm0gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkSXRlbUlkJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmb2N1c2VkSXRlbUlkID0+IHtcbiAgICAgICAgaWYgKCFzZWFyY2hUZXJtKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zJC5uZXh0KHRoaXMuaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+XG4gICAgICAgICAgICBpdGVtLnRleHQudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dChmaWx0ZXJlZEl0ZW1zKTtcblxuICAgICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gc2VhcmNoIGJveCBpZiBmaWx0ZXJlZCBsaXN0IGxlbmd0aCBpcyAwIG9yIHByZXZpb3VzbHkgZm9jdXNlZCBpdGVtIGlzIG5vdCBpbiBmaWx0ZXJlZCBsaXN0IGFueW1vcmVcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgIWZpbHRlcmVkSXRlbXMuc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IGZvY3VzZWRJdGVtSWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtb3ZlIHNjcm9sbGluZyBidXR0b24gaW50byB2aWV3IHRvIGVuZCBvZiBxdWV1ZSwgc28gdGhhdCBET00gY2FuIGJlIHVwZGF0ZWQgZmlyc3RcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxCdXR0b25JbnRvVmlldyhmb2N1c2VkSXRlbUlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQnV0dG9uSW50b1ZpZXcoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgY29uc3QgZm9jdXNJdGVtSW5kZXggPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBpZCk7XG4gICAgICBjb25zdCBmb2N1c2VkQnV0dG9uID0gdGhpcy5idXR0b25zLnRvQXJyYXkoKVtmb2N1c0l0ZW1JbmRleF07XG5cbiAgICAgIGlmIChmb2N1c2VkQnV0dG9uKSB7XG4gICAgICAgIGZvY3VzZWRCdXR0b24ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcid9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uVGV4dCAmJiBpdGVtc1wiPlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIihvcGVuJCB8IGFzeW5jKSA/IG9wZW5lZCA6IGNsb3NlZFwiPiA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2Nsb3NlZD5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlID09PSAnYnV0dG9uJyB8fCAhc3R5bGVcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gZHJvcGRvd24tc2l6ZVwiXG4gICAgICAoY2xpY2spPVwib3BlbkRyb3Bkb3duKClcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCJcbiAgICA+XG4gICAgICB7eyBidXR0b25UZXh0IH19XG4gICAgPC9idXR0b24+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGUgPT09ICd1bmRlcmxpbmVkVGV4dCdcIj5cbiAgICA8aDUgY2xhc3M9XCJ1bmRlcmxpbmUtYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigpXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCI+XG4gICAgICA8Yj5cbiAgICAgICAge3sgYnV0dG9uVGV4dCB9fVxuICAgICAgPC9iPlxuICAgIDwvaDU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNvcGVuZWQ+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250YWluZXJcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tc2l6ZSBzZWFyY2hcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjc2VhcmNoXG4gICAgICAgIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogZGlzYWJsZWR9XCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRleHRcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoVGVybVwiXG4gICAgICAvPlxuICAgICAge3sgc2VhcmNoLmZvY3VzKCkgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbGlzdFwiIChtb3VzZWVudGVyKT1cIm1vdXNlRW50ZXJMaXN0KClcIiAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlTGlzdCgpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRJdGVtcyQgfCBhc3luYyBhcyBmaWx0ZXJlZEl0ZW1zXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgZmlsdGVyZWRJdGVtcy5sZW5ndGggPiAwICYmIGZvY3VzZWRJdGVtSWQkIHwgYXN5bmMgYXMgZm9jdXNlZEl0ZW1JZDtcbiAgICAgICAgICAgIGVsc2Ugbm9SZXN1bHRzXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICNidXR0b25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkSXRlbXNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie2ZvY3VzOiBmb2N1c2VkSXRlbUlkID09PSBpdGVtLmlkLCBkaXNhYmxlZDogZGlzYWJsZWR9XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tYnV0dG9uIGRyb3Bkb3duLXNpemVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdChpdGVtLmlkKVwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJob3Zlck92ZXJCdXR0b24oaXRlbS5pZClcIlxuICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwicmVzZXRGb2N1cygpXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1idXR0b24tdGV4dFwiPlxuICAgICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3BhY2VcIj4gPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vUmVzdWx0cz5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWJ1dHRvbiBkcm9wZG93bi1zaXplIGRpc2FibGVkXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1idXR0b24tdGV4dFwiPnt7IG5vUmVzdWx0c1RleHQgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzcGFjZT5cbiAgPGRpdiAqbmdJZj1cInN0eWxlID09PSAnYnV0dG9uJyB8fCAhc3R5bGVcIiBjbGFzcz1cImRyb3Bkb3duLXNpemVcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIj48L2Rpdj5cbiAgPGg1ICpuZ0lmPVwic3R5bGUgPT09ICd1bmRlcmxpbmVkVGV4dCdcIiBjbGFzcz1cInVuZGVybGluZS1idXR0b25cIj48Yj4tPC9iPjwvaDU+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -31,10 +31,10 @@ export class SearchableDropdownSelectComponent {
31
31
  }
32
32
  }
33
33
  SearchableDropdownSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchableDropdownSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
- SearchableDropdownSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SearchableDropdownSelectComponent, selector: "valtimo-searchable-dropdown-select", inputs: { style: "style", items: "items", buttonText: "buttonText", searchText: "searchText", noResultsText: "noResultsText", disabled: "disabled", selectedText: "selectedText", selectedTextValue: "selectedTextValue", clearSelectionButtonTitle: "clearSelectionButtonTitle", hasSelection: "hasSelection", width: "width" }, outputs: { itemSelected: "itemSelected", clearSelection: "clearSelection" }, ngImport: i0, template: "<valtimo-searchable-dropdown\n *ngIf=\"!hasSelection; else selection\"\n [style]=\"style\"\n [items]=\"items\"\n [buttonText]=\"buttonText\"\n [searchText]=\"searchText\"\n [noResultsText]=\"noResultsText\"\n [disabled]=\"disabled\"\n [width]=\"width\"\n (itemSelected)=\"onSelect($event)\"\n>\n</valtimo-searchable-dropdown>\n\n<ng-template #selection>\n <div\n class=\"d-flex flex-row align-items-center\"\n [style.height.px]=\"style === 'button' ? 34 : null\"\n >\n <h5 class=\"selected-text\">\n {{ selectedText }} <b>{{ selectedTextValue }}</b>\n </h5>\n <button\n type=\"button\"\n class=\"close p-0 m-0 ml-2 d-flex text-danger\"\n aria-label=\"Close\"\n (click)=\"onClearSelection()\"\n [title]=\"clearSelectionButtonTitle\"\n >\n <i class=\"clear-icon mdi mdi-close text-danger\"></i>\n </button>\n </div>\n</ng-template>\n", styles: [".selected-text{margin:0}.clear-icon{font-size:16px}\n"], components: [{ type: i1.SearchableDropdownComponent, selector: "valtimo-searchable-dropdown", inputs: ["style", "items", "buttonText", "searchText", "noResultsText", "disabled", "width"], outputs: ["itemSelected"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
34
+ SearchableDropdownSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SearchableDropdownSelectComponent, selector: "valtimo-searchable-dropdown-select", inputs: { style: "style", items: "items", buttonText: "buttonText", searchText: "searchText", noResultsText: "noResultsText", disabled: "disabled", selectedText: "selectedText", selectedTextValue: "selectedTextValue", clearSelectionButtonTitle: "clearSelectionButtonTitle", hasSelection: "hasSelection", width: "width" }, outputs: { itemSelected: "itemSelected", clearSelection: "clearSelection" }, 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<valtimo-searchable-dropdown\n *ngIf=\"!hasSelection; else selection\"\n [style]=\"style\"\n [items]=\"items\"\n [buttonText]=\"buttonText\"\n [searchText]=\"searchText\"\n [noResultsText]=\"noResultsText\"\n [disabled]=\"disabled\"\n [width]=\"width\"\n (itemSelected)=\"onSelect($event)\"\n>\n</valtimo-searchable-dropdown>\n\n<ng-template #selection>\n <div\n class=\"d-flex flex-row align-items-center\"\n [style.height.px]=\"style === 'button' ? 34 : null\"\n >\n <h5 class=\"selected-text\">\n {{ selectedText }} <b>{{ selectedTextValue }}</b>\n </h5>\n <button\n type=\"button\"\n class=\"close p-0 m-0 ml-2 d-flex text-danger\"\n aria-label=\"Close\"\n (click)=\"onClearSelection()\"\n [title]=\"clearSelectionButtonTitle\"\n >\n <i class=\"clear-icon mdi mdi-close text-danger\"></i>\n </button>\n </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 */.selected-text{margin:0}.clear-icon{font-size:16px}\n"], components: [{ type: i1.SearchableDropdownComponent, selector: "valtimo-searchable-dropdown", inputs: ["style", "items", "buttonText", "searchText", "noResultsText", "disabled", "width"], outputs: ["itemSelected"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
35
35
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchableDropdownSelectComponent, decorators: [{
36
36
  type: Component,
37
- args: [{ selector: 'valtimo-searchable-dropdown-select', template: "<valtimo-searchable-dropdown\n *ngIf=\"!hasSelection; else selection\"\n [style]=\"style\"\n [items]=\"items\"\n [buttonText]=\"buttonText\"\n [searchText]=\"searchText\"\n [noResultsText]=\"noResultsText\"\n [disabled]=\"disabled\"\n [width]=\"width\"\n (itemSelected)=\"onSelect($event)\"\n>\n</valtimo-searchable-dropdown>\n\n<ng-template #selection>\n <div\n class=\"d-flex flex-row align-items-center\"\n [style.height.px]=\"style === 'button' ? 34 : null\"\n >\n <h5 class=\"selected-text\">\n {{ selectedText }} <b>{{ selectedTextValue }}</b>\n </h5>\n <button\n type=\"button\"\n class=\"close p-0 m-0 ml-2 d-flex text-danger\"\n aria-label=\"Close\"\n (click)=\"onClearSelection()\"\n [title]=\"clearSelectionButtonTitle\"\n >\n <i class=\"clear-icon mdi mdi-close text-danger\"></i>\n </button>\n </div>\n</ng-template>\n", styles: [".selected-text{margin:0}.clear-icon{font-size:16px}\n"] }]
37
+ args: [{ selector: 'valtimo-searchable-dropdown-select', 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<valtimo-searchable-dropdown\n *ngIf=\"!hasSelection; else selection\"\n [style]=\"style\"\n [items]=\"items\"\n [buttonText]=\"buttonText\"\n [searchText]=\"searchText\"\n [noResultsText]=\"noResultsText\"\n [disabled]=\"disabled\"\n [width]=\"width\"\n (itemSelected)=\"onSelect($event)\"\n>\n</valtimo-searchable-dropdown>\n\n<ng-template #selection>\n <div\n class=\"d-flex flex-row align-items-center\"\n [style.height.px]=\"style === 'button' ? 34 : null\"\n >\n <h5 class=\"selected-text\">\n {{ selectedText }} <b>{{ selectedTextValue }}</b>\n </h5>\n <button\n type=\"button\"\n class=\"close p-0 m-0 ml-2 d-flex text-danger\"\n aria-label=\"Close\"\n (click)=\"onClearSelection()\"\n [title]=\"clearSelectionButtonTitle\"\n >\n <i class=\"clear-icon mdi mdi-close text-danger\"></i>\n </button>\n </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 */.selected-text{margin:0}.clear-icon{font-size:16px}\n"] }]
38
38
  }], propDecorators: { style: [{
39
39
  type: Input
40
40
  }], items: [{
@@ -62,4 +62,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
62
62
  }], clearSelection: [{
63
63
  type: Output
64
64
  }] } });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hhYmxlLWRyb3Bkb3duLXNlbGVjdC9zZWFyY2hhYmxlLWRyb3Bkb3duLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24tc2VsZWN0L3NlYXJjaGFibGUtZHJvcGRvd24tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7OztBQVFyRSxNQUFNLE9BQU8saUNBQWlDO0lBTDlDO1FBZ0JXLFVBQUssR0FBRyxHQUFHLENBQUM7UUFFWCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBUy9DO0lBUEMsUUFBUSxDQUFDLEVBQVU7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs7K0hBdEJVLGlDQUFpQzttSEFBakMsaUNBQWlDLHlkQ3hCOUMscTRCQWdDQTs0RkRSYSxpQ0FBaUM7a0JBTDdDLFNBQVM7K0JBQ0Usb0NBQW9DOzhCQUtyQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEcm9wZG93bkJ1dHRvblN0eWxlLCBEcm9wZG93bkl0ZW19IGZyb20gJy4uLy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2hhYmxlLWRyb3Bkb3duLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hhYmxlRHJvcGRvd25TZWxlY3RDb21wb25lbnQge1xuICBASW5wdXQoKSBzdHlsZTogRHJvcGRvd25CdXR0b25TdHlsZTtcbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PERyb3Bkb3duSXRlbT47XG4gIEBJbnB1dCgpIGJ1dHRvblRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBub1Jlc3VsdHNUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RlZFRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgc2VsZWN0ZWRUZXh0VmFsdWU6IHN0cmluZztcbiAgQElucHV0KCkgY2xlYXJTZWxlY3Rpb25CdXR0b25UaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBoYXNTZWxlY3Rpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIHdpZHRoID0gMjUwO1xuXG4gIEBPdXRwdXQoKSBpdGVtU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbGVhclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBvblNlbGVjdChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChpZCk7XG4gIH1cblxuICBvbkNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24uZW1pdCgpO1xuICB9XG59XG4iLCI8dmFsdGltby1zZWFyY2hhYmxlLWRyb3Bkb3duXG4gICpuZ0lmPVwiIWhhc1NlbGVjdGlvbjsgZWxzZSBzZWxlY3Rpb25cIlxuICBbc3R5bGVdPVwic3R5bGVcIlxuICBbaXRlbXNdPVwiaXRlbXNcIlxuICBbYnV0dG9uVGV4dF09XCJidXR0b25UZXh0XCJcbiAgW3NlYXJjaFRleHRdPVwic2VhcmNoVGV4dFwiXG4gIFtub1Jlc3VsdHNUZXh0XT1cIm5vUmVzdWx0c1RleHRcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbd2lkdGhdPVwid2lkdGhcIlxuICAoaXRlbVNlbGVjdGVkKT1cIm9uU2VsZWN0KCRldmVudClcIlxuPlxuPC92YWx0aW1vLXNlYXJjaGFibGUtZHJvcGRvd24+XG5cbjxuZy10ZW1wbGF0ZSAjc2VsZWN0aW9uPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInN0eWxlID09PSAnYnV0dG9uJyA/IDM0IDogbnVsbFwiXG4gID5cbiAgICA8aDUgY2xhc3M9XCJzZWxlY3RlZC10ZXh0XCI+XG4gICAgICB7eyBzZWxlY3RlZFRleHQgfX0gPGI+e3sgc2VsZWN0ZWRUZXh0VmFsdWUgfX08L2I+XG4gICAgPC9oNT5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2xvc2UgcC0wIG0tMCBtbC0yIGQtZmxleCB0ZXh0LWRhbmdlclwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJTZWxlY3Rpb24oKVwiXG4gICAgICBbdGl0bGVdPVwiY2xlYXJTZWxlY3Rpb25CdXR0b25UaXRsZVwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJjbGVhci1pY29uIG1kaSBtZGktY2xvc2UgdGV4dC1kYW5nZXJcIj48L2k+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hhYmxlLWRyb3Bkb3duLXNlbGVjdC9zZWFyY2hhYmxlLWRyb3Bkb3duLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaGFibGUtZHJvcGRvd24tc2VsZWN0L3NlYXJjaGFibGUtZHJvcGRvd24tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7OztBQVFyRSxNQUFNLE9BQU8saUNBQWlDO0lBTDlDO1FBZ0JXLFVBQUssR0FBRyxHQUFHLENBQUM7UUFFWCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBUy9DO0lBUEMsUUFBUSxDQUFDLEVBQVU7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs7K0hBdEJVLGlDQUFpQzttSEFBakMsaUNBQWlDLHlkQ3hCOUMscWhEQWdEQTs0RkR4QmEsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLG9DQUFvQzs4QkFLckMsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RHJvcGRvd25CdXR0b25TdHlsZSwgRHJvcGRvd25JdGVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXNlYXJjaGFibGUtZHJvcGRvd24tc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaGFibGUtZHJvcGRvd24tc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZURyb3Bkb3duU2VsZWN0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgc3R5bGU6IERyb3Bkb3duQnV0dG9uU3R5bGU7XG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxEcm9wZG93bkl0ZW0+O1xuICBASW5wdXQoKSBidXR0b25UZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgbm9SZXN1bHRzVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0ZWRUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVGV4dFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsZWFyU2VsZWN0aW9uQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgaGFzU2VsZWN0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSB3aWR0aCA9IDI1MDtcblxuICBAT3V0cHV0KCkgaXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2xlYXJTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgb25TZWxlY3QoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoaWQpO1xuICB9XG5cbiAgb25DbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uLmVtaXQoKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48dmFsdGltby1zZWFyY2hhYmxlLWRyb3Bkb3duXG4gICpuZ0lmPVwiIWhhc1NlbGVjdGlvbjsgZWxzZSBzZWxlY3Rpb25cIlxuICBbc3R5bGVdPVwic3R5bGVcIlxuICBbaXRlbXNdPVwiaXRlbXNcIlxuICBbYnV0dG9uVGV4dF09XCJidXR0b25UZXh0XCJcbiAgW3NlYXJjaFRleHRdPVwic2VhcmNoVGV4dFwiXG4gIFtub1Jlc3VsdHNUZXh0XT1cIm5vUmVzdWx0c1RleHRcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbd2lkdGhdPVwid2lkdGhcIlxuICAoaXRlbVNlbGVjdGVkKT1cIm9uU2VsZWN0KCRldmVudClcIlxuPlxuPC92YWx0aW1vLXNlYXJjaGFibGUtZHJvcGRvd24+XG5cbjxuZy10ZW1wbGF0ZSAjc2VsZWN0aW9uPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInN0eWxlID09PSAnYnV0dG9uJyA/IDM0IDogbnVsbFwiXG4gID5cbiAgICA8aDUgY2xhc3M9XCJzZWxlY3RlZC10ZXh0XCI+XG4gICAgICB7eyBzZWxlY3RlZFRleHQgfX0gPGI+e3sgc2VsZWN0ZWRUZXh0VmFsdWUgfX08L2I+XG4gICAgPC9oNT5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2xvc2UgcC0wIG0tMCBtbC0yIGQtZmxleCB0ZXh0LWRhbmdlclwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJTZWxlY3Rpb24oKVwiXG4gICAgICBbdGl0bGVdPVwiY2xlYXJTZWxlY3Rpb25CdXR0b25UaXRsZVwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJjbGVhci1pY29uIG1kaSBtZGktY2xvc2UgdGV4dC1kYW5nZXJcIj48L2k+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==