@valtimo/components 10.3.0 → 10.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/assets/css/carbon-beagle-compatibility.scss +1 -1
  2. package/assets/css/carbon.scss +37 -5
  3. package/assets/css/ng-multiselect-dropdown.theme.scss +1 -1
  4. package/esm2020/lib/components/alert/alert.component.mjs +4 -4
  5. package/esm2020/lib/components/alert/alert.module.mjs +2 -2
  6. package/esm2020/lib/components/alert/alert.service.mjs +2 -2
  7. package/esm2020/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.mjs +4 -4
  8. package/esm2020/lib/components/bpmn-js-diagram/bpmn-js-diagram.module.mjs +2 -2
  9. package/esm2020/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +4 -4
  10. package/esm2020/lib/components/breadcrumb-navigation/breadcrumb-navigation.module.mjs +2 -2
  11. package/esm2020/lib/components/camunda/form/camunda-form.components.mjs +4 -4
  12. package/esm2020/lib/components/camunda/form/camunda-form.module.mjs +2 -2
  13. package/esm2020/lib/components/camunda/form/custom/camunda-custom-form.component.mjs +4 -4
  14. package/esm2020/lib/components/camunda/form/custom/camunda-custom-form.module.mjs +2 -2
  15. package/esm2020/lib/components/camunda/form/generated/camunda-generated-form.component.mjs +4 -4
  16. package/esm2020/lib/components/camunda/form/generated/camunda-generated-form.module.mjs +2 -2
  17. package/esm2020/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.mjs +4 -4
  18. package/esm2020/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.mjs +2 -2
  19. package/esm2020/lib/components/camunda/form/generated/formfield/camunda-formfield.service.mjs +2 -2
  20. package/esm2020/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.mjs +4 -4
  21. package/esm2020/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.mjs +4 -4
  22. package/esm2020/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.mjs +4 -4
  23. package/esm2020/lib/components/camunda/form/generated/formfield/formfield.model.mjs +2 -2
  24. package/esm2020/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.mjs +4 -4
  25. package/esm2020/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.mjs +4 -4
  26. package/esm2020/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.mjs +4 -4
  27. package/esm2020/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.mjs +4 -4
  28. package/esm2020/lib/components/camunda/form/generated/formfield/validation/date.validators.mjs +2 -2
  29. package/esm2020/lib/components/card/card.component.mjs +4 -4
  30. package/esm2020/lib/components/card/card.module.mjs +2 -2
  31. package/esm2020/lib/components/components.module.mjs +2 -2
  32. package/esm2020/lib/components/confirmation-modal/confirmation-modal.component.mjs +4 -4
  33. package/esm2020/lib/components/confirmation-modal/confirmation-modal.module.mjs +2 -2
  34. package/esm2020/lib/components/data-list/data-list.component.mjs +4 -4
  35. package/esm2020/lib/components/data-list/data-list.module.mjs +2 -2
  36. package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +7 -5
  37. package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +2 -2
  38. package/esm2020/lib/components/dropzone/dropzone.component.mjs +4 -4
  39. package/esm2020/lib/components/dropzone/dropzone.module.mjs +2 -2
  40. package/esm2020/lib/components/expansion-panel/expansion-panel.component.mjs +41 -0
  41. package/esm2020/lib/components/expansion-panel/expansion-panel.module.mjs +35 -0
  42. package/esm2020/lib/components/field-auto-focus/field-auto-focus.directive.mjs +2 -2
  43. package/esm2020/lib/components/field-auto-focus/field-auto-focus.module.mjs +2 -2
  44. package/esm2020/lib/components/file-size/file-size.module.mjs +2 -2
  45. package/esm2020/lib/components/file-size/file-size.pipe.mjs +2 -2
  46. package/esm2020/lib/components/filter-sidebar/filter-sidebar.component.mjs +4 -4
  47. package/esm2020/lib/components/filter-sidebar/filter-sidebar.module.mjs +2 -2
  48. package/esm2020/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +2 -2
  49. package/esm2020/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.mjs +4 -4
  50. package/esm2020/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.mjs +2 -2
  51. package/esm2020/lib/components/form-io/form-io-builder.component.mjs +29 -8
  52. package/esm2020/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +2 -2
  53. package/esm2020/lib/components/form-io/form-io-current-user/form-io-current-user.component.mjs +2 -2
  54. package/esm2020/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +2 -2
  55. package/esm2020/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +2 -2
  56. package/esm2020/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +2 -2
  57. package/esm2020/lib/components/form-io/form-io-uploader/form-io-uploader.component.mjs +4 -4
  58. package/esm2020/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +6 -3
  59. package/esm2020/lib/components/form-io/form-io.component.mjs +23 -10
  60. package/esm2020/lib/components/form-io/form-io.module.mjs +2 -2
  61. package/esm2020/lib/components/form-io/formio-config.mjs +2 -2
  62. package/esm2020/lib/components/form-io/services/form-io-dom.service.mjs +2 -2
  63. package/esm2020/lib/components/form-io/services/form-io-state.service.mjs +19 -2
  64. package/esm2020/lib/components/left-sidebar/left-sidebar.component.mjs +4 -4
  65. package/esm2020/lib/components/left-sidebar/left-sidebar.module.mjs +2 -2
  66. package/esm2020/lib/components/list/ListFilterPipe.directive.mjs +2 -2
  67. package/esm2020/lib/components/list/list.component.mjs +9 -7
  68. package/esm2020/lib/components/list/list.module.mjs +2 -2
  69. package/esm2020/lib/components/menu/menu-item-text.component.mjs +4 -4
  70. package/esm2020/lib/components/menu/menu-routing.module.mjs +2 -2
  71. package/esm2020/lib/components/menu/menu.init.mjs +2 -2
  72. package/esm2020/lib/components/menu/menu.module.mjs +2 -2
  73. package/esm2020/lib/components/menu/menu.service.mjs +56 -12
  74. package/esm2020/lib/components/modal/modal.component.mjs +4 -4
  75. package/esm2020/lib/components/modal/modal.module.mjs +2 -2
  76. package/esm2020/lib/components/multi-input/carbon-multi-input.component.mjs +10 -4
  77. package/esm2020/lib/components/multi-input/carbon-multi-input.module.mjs +2 -2
  78. package/esm2020/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +4 -4
  79. package/esm2020/lib/components/multiselect-dropdown/multiselect-dropdown.module.mjs +2 -2
  80. package/esm2020/lib/components/page-header/page-header.component.mjs +4 -4
  81. package/esm2020/lib/components/page-header/page-header.module.mjs +2 -2
  82. package/esm2020/lib/components/page-title/page-title.component.mjs +4 -4
  83. package/esm2020/lib/components/page-title/page-title.module.mjs +2 -2
  84. package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +4 -4
  85. package/esm2020/lib/components/progress-bar/progress-bar.module.mjs +2 -2
  86. package/esm2020/lib/components/right-sidebar/right-sidebar.component.mjs +5 -3
  87. package/esm2020/lib/components/right-sidebar/right-sidebar.module.mjs +2 -2
  88. package/esm2020/lib/components/search-fields/search-fields.component.mjs +4 -4
  89. package/esm2020/lib/components/search-fields/search-fields.module.mjs +2 -2
  90. package/esm2020/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +4 -4
  91. package/esm2020/lib/components/searchable-dropdown/searchable-dropdown.module.mjs +2 -2
  92. package/esm2020/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +4 -4
  93. package/esm2020/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.mjs +2 -2
  94. package/esm2020/lib/components/spinner/spinner.component.mjs +4 -4
  95. package/esm2020/lib/components/spinner/spinner.module.mjs +2 -2
  96. package/esm2020/lib/components/timeline/timeline.component.mjs +4 -4
  97. package/esm2020/lib/components/timeline/timeline.module.mjs +2 -2
  98. package/esm2020/lib/components/topbar/topbar.component.mjs +4 -4
  99. package/esm2020/lib/components/topbar/topbar.module.mjs +2 -2
  100. package/esm2020/lib/components/uploader/uploader-drag-drop.directive.mjs +2 -2
  101. package/esm2020/lib/components/uploader/uploader.component.mjs +4 -4
  102. package/esm2020/lib/components/uploader/uploader.module.mjs +2 -2
  103. package/esm2020/lib/components/version/version.service.mjs +2 -2
  104. package/esm2020/lib/components/view-content/type-converters/booleanTypeConverter.mjs +2 -2
  105. package/esm2020/lib/components/view-content/type-converters/dateTypeConverter.mjs +2 -2
  106. package/esm2020/lib/components/view-content/type-converters/enumTypeConverter.mjs +2 -2
  107. package/esm2020/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +2 -2
  108. package/esm2020/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +2 -2
  109. package/esm2020/lib/components/view-content/type-converters/stringTypeConverter.mjs +2 -2
  110. package/esm2020/lib/components/view-content/type-converters/type-converters.model.mjs +2 -2
  111. package/esm2020/lib/components/view-content/view-content.service.mjs +2 -2
  112. package/esm2020/lib/components/webcam/webcam.component.mjs +4 -4
  113. package/esm2020/lib/components/webcam/webcam.module.mjs +2 -2
  114. package/esm2020/lib/components/widget/widget.component.mjs +4 -4
  115. package/esm2020/lib/components/widget/widget.module.mjs +2 -2
  116. package/esm2020/lib/models/alert.model.mjs +2 -2
  117. package/esm2020/lib/models/documenten-api-metadata.model.mjs +2 -2
  118. package/esm2020/lib/models/form-io.model.mjs +2 -2
  119. package/esm2020/lib/models/index.mjs +2 -2
  120. package/esm2020/lib/models/list.model.mjs +2 -2
  121. package/esm2020/lib/models/pagination.model.mjs +2 -2
  122. package/esm2020/lib/models/searchable-dropdown.model.mjs +2 -2
  123. package/esm2020/lib/models/timeline.model.mjs +2 -2
  124. package/esm2020/lib/models/version.model.mjs +2 -2
  125. package/esm2020/lib/pipes/case-count.pipe.mjs +16 -1
  126. package/esm2020/lib/pipes/components-pipes.module.mjs +16 -1
  127. package/esm2020/lib/pipes/index.mjs +16 -1
  128. package/esm2020/lib/pipes/menu-item-translation.pipe.mjs +16 -1
  129. package/esm2020/lib/services/shell.service.mjs +24 -3
  130. package/esm2020/lib/services/valtimo-modal.service.mjs +16 -1
  131. package/esm2020/public_api.mjs +4 -2
  132. package/fesm2015/valtimo-components.mjs +503 -240
  133. package/fesm2015/valtimo-components.mjs.map +1 -1
  134. package/fesm2020/valtimo-components.mjs +511 -245
  135. package/fesm2020/valtimo-components.mjs.map +1 -1
  136. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  137. package/lib/components/expansion-panel/expansion-panel.component.d.ts +10 -0
  138. package/lib/components/expansion-panel/expansion-panel.component.d.ts.map +1 -0
  139. package/lib/components/expansion-panel/expansion-panel.module.d.ts +11 -0
  140. package/lib/components/expansion-panel/expansion-panel.module.d.ts.map +1 -0
  141. package/lib/components/form-io/form-io-builder.component.d.ts +10 -1
  142. package/lib/components/form-io/form-io-builder.component.d.ts.map +1 -1
  143. package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts +2 -3
  144. package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts.map +1 -1
  145. package/lib/components/form-io/form-io-uploader/form-io-uploader.formio.d.ts.map +1 -1
  146. package/lib/components/form-io/form-io.component.d.ts +3 -2
  147. package/lib/components/form-io/form-io.component.d.ts.map +1 -1
  148. package/lib/components/form-io/services/form-io-state.service.d.ts +1 -0
  149. package/lib/components/form-io/services/form-io-state.service.d.ts.map +1 -1
  150. package/lib/components/list/list.component.d.ts.map +1 -1
  151. package/lib/components/menu/menu.service.d.ts +7 -2
  152. package/lib/components/menu/menu.service.d.ts.map +1 -1
  153. package/lib/components/multi-input/carbon-multi-input.component.d.ts +3 -1
  154. package/lib/components/multi-input/carbon-multi-input.component.d.ts.map +1 -1
  155. package/lib/components/right-sidebar/right-sidebar.component.d.ts +2 -1
  156. package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
  157. package/lib/models/form-io.model.d.ts +1 -0
  158. package/lib/models/form-io.model.d.ts.map +1 -1
  159. package/lib/pipes/case-count.pipe.d.ts.map +1 -1
  160. package/lib/pipes/components-pipes.module.d.ts.map +1 -1
  161. package/lib/pipes/index.d.ts.map +1 -1
  162. package/lib/pipes/menu-item-translation.pipe.d.ts.map +1 -1
  163. package/lib/services/shell.service.d.ts.map +1 -1
  164. package/lib/services/valtimo-modal.service.d.ts.map +1 -1
  165. package/package.json +1 -1
  166. package/public_api.d.ts +2 -0
  167. package/public_api.d.ts.map +1 -1
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2015-2020 Ritense BV, the Netherlands.
2
+ * Copyright 2015-2023 Ritense BV, the Netherlands.
3
3
  *
4
4
  * Licensed under EUPL, Version 1.2 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -183,10 +183,10 @@ export class SearchFieldsComponent {
183
183
  }
184
184
  }
185
185
  SearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
186
- SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$" }, outputs: { doSearch: "doSearch" }, 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=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i5.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i6.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "component", type: i6.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "component", type: i6.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
186
+ SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i5.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i6.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "component", type: i6.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "component", type: i6.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin"], outputs: ["selectedChange", "clear"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
187
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SearchFieldsComponent, decorators: [{
188
188
  type: Component,
189
- args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"] }]
189
+ args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"] }]
190
190
  }], ctorParameters: function () { return [{ type: i1.DocumentService }, { type: i2.TranslateService }]; }, propDecorators: { loading: [{
191
191
  type: Input
192
192
  }], searchFields: [{
@@ -198,4 +198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
198
198
  }], doSearch: [{
199
199
  type: Output
200
200
  }] } });
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQWdCLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFVbEcsTUFBTSxPQUFPLHFCQUFxQjtJQXdEaEMsWUFDbUIsZUFBZ0MsRUFDaEMsZ0JBQWtDO1FBRGxDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBN0MzQyxhQUFRLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRW5GLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTFELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBRTVELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFFckQsb0JBQWUsR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLE1BQU0sU0FBUyxHQUFHLENB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QyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7bUhBOU1VLHFCQUFxQjt1R0FBckIscUJBQXFCLHdQQzVCbEMsaWhrQkFrbUJBOzRGRHRrQmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHVCQUF1QjtxSUFLeEIsT0FBTztzQkFBZixLQUFLO2dCQUNPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBR08sc0JBQXNCO3NCQUFsQyxLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTZWFyY2hGaWVsZCwgU2VhcmNoRmllbGRCb29sZWFuLCBTZWFyY2hGaWVsZFZhbHVlc30gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NlbGVjdEl0ZW19IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBzZXQgc2VhcmNoRmllbGRzKGZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XG4gICAgdGhpcy5zZWFyY2hGaWVsZHMkLm5leHQoZmllbGRzKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgZG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGN1cnJlbnREb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIGlmIChjdXJyZW50RG9jdW1lbnREZWZpbml0aW9uTmFtZSAhPT0gZG9jdW1lbnREZWZpbml0aW9uTmFtZSkge1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLm5leHQoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgQElucHV0KCkgc2V0VmFsdWVzU3ViamVjdCQ6IE9ic2VydmFibGU8U2VhcmNoRmllbGRWYWx1ZXM+O1xuICBAT3V0cHV0KCkgZG9TZWFyY2g6IEV2ZW50RW1pdHRlcjxTZWFyY2hGaWVsZFZhbHVlcz4gPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkVmFsdWVzPigpO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICByZWFkb25seSBzZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxTZWFyY2hGaWVsZD4+KFtdKTtcblxuICByZWFkb25seSB2YWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZFZhbHVlcz4oe30pO1xuXG4gIHJlYWRvbmx5IGhhc1ZhbGlkVmFsdWVzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMudmFsdWVzJC5waXBlKFxuICAgIG1hcCh2YWx1ZXMgPT4ge1xuICAgICAgY29uc3QgaGFzVmFsdWVzID0gKE9iamVjdC5rZXlzKHZhbHVlcykgfHwgW10pLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCByYW5nZVZhbHVlcyA9XG4gICAgICAgIChoYXNWYWx1ZXMgJiYgT2JqZWN0LnZhbHVlcyh2YWx1ZXMpPy5maWx0ZXIodmFsdWUgPT4gKHZhbHVlIGFzIGFueSkuc3RhcnQpKSB8fCBbXTtcbiAgICAgIGNvbnN0IHZhbGlkUmFuZ2VWYWx1ZXMgPSByYW5nZVZhbHVlcz8uZmlsdGVyKFxuICAgICAgICB2YWx1ZSA9PiAodmFsdWUgYXMgYW55KS5zdGFydCA8ICh2YWx1ZSBhcyBhbnkpLmVuZFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuICEhKGhhc1ZhbHVlcyAmJiByYW5nZVZhbHVlcy5sZW5ndGggPT09IHZhbGlkUmFuZ2VWYWx1ZXMubGVuZ3RoKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGV4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGVhciQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuXG4gIHByaXZhdGUgZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkcm9wZG93blN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQk9PTEVBTl9QT1NJVElWRTogU2VhcmNoRmllbGRCb29sZWFuID0gJ2Jvb2xlYW5Qb3NpdGl2ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgQk9PTEVBTl9ORUdBVElWRTogU2VhcmNoRmllbGRCb29sZWFuID0gJ2Jvb2xlYW5OZWdhdGl2ZSc7XG5cbiAgcmVhZG9ubHkgQk9PTEVBTlRZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEJvb2xlYW4+ID0gW3RoaXMuQk9PTEVBTl9QT1NJVElWRSwgdGhpcy5CT09MRUFOX05FR0FUSVZFXTtcbiAgcmVhZG9ubHkgYm9vbGVhbkl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5CT09MRUFOVFlQRVMubWFwKHR5cGUgPT4gKHtcbiAgICAgICAgaWQ6IHR5cGUsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHt0eXBlfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGRyb3Bkb3duU2VsZWN0SXRlbXNNYXA6IE1hcDxzdHJpbmcsIEFycmF5PFNlbGVjdEl0ZW0+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlblZhbHVlc1N1YmplY3RTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRyb3Bkb3duU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGRLZXk6IHN0cmluZywgdmFsdWU6IGFueSwgaXNEYXRlVGltZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIGlmICh2YWx1ZSB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh7Li4udmFsdWVzLCBbc2VhcmNoRmllbGRLZXldOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLCBpc0RhdGVUaW1lKX0pO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyh2YWx1ZXMpLmluY2x1ZGVzKHNlYXJjaEZpZWxkS2V5KSkge1xuICAgICAgICBjb25zdCB2YWx1ZXNDb3B5ID0gey4uLnZhbHVlc307XG4gICAgICAgIGRlbGV0ZSB2YWx1ZXNDb3B5W3NlYXJjaEZpZWxkS2V5XTtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQodmFsdWVzQ29weSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzRGF0ZVRpbWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWUuc3RhcnQgJiYgdmFsdWUuZW5kKSB7XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHtcbiAgICAgICAgICAuLi52YWx1ZXMsXG4gICAgICAgICAgW3NlYXJjaEZpZWxkS2V5XToge1xuICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2V0U2luZ2xlVmFsdWUodmFsdWUuc3RhcnQsIGlzRGF0ZVRpbWUpLFxuICAgICAgICAgICAgZW5kOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLmVuZCwgaXNEYXRlVGltZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQoe1xuICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICBbc2VhcmNoRmllbGRLZXldOiB2YWx1ZS5tYXAodiA9PiB0aGlzLmdldFNpbmdsZVZhbHVlKHYsIGlzRGF0ZVRpbWUpKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlc1tzZWFyY2hGaWVsZEtleV0pIHtcbiAgICAgICAgY29uc3QgdmFsdWVzQ29weSA9IHsuLi52YWx1ZXN9O1xuICAgICAgICBkZWxldGUgdmFsdWVzQ29weVtzZWFyY2hGaWVsZEtleV07XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlc0NvcHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZXhwYW5kZWQgPT4ge1xuICAgICAgdGhpcy5leHBhbmRlZCQubmV4dCghZXhwYW5kZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgc2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy5kb1NlYXJjaC5lbWl0KHZhbHVlcyk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuZG9TZWFyY2guZW1pdCh7fSk7XG4gIH1cblxuICBnZXREZWZhdWx0Qm9vbGVhblNlbGVjdGlvbklkKHZhbHVlczogU2VhcmNoRmllbGRWYWx1ZXMsIHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZFZhbHVlID0gdmFsdWVzW3NlYXJjaEZpZWxkS2V5XTtcblxuICAgIGlmIChzZWFyY2hGaWVsZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5CT09MRUFOX1BPU0lUSVZFO1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoRmllbGRWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fTkVHQVRJVkU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaW5nbGVWYWx1ZSh2YWx1ZTogYW55LCBpc0RhdGVUaW1lPzogYm9vbGVhbik6IGFueSB7XG4gICAgaWYgKGlzRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLkJPT0xFQU5fUE9TSVRJVkUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuQk9PTEVBTl9ORUdBVElWRSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXRWYWx1ZXNTdWJqZWN0JCkge1xuICAgICAgdGhpcy52YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXRWYWx1ZXNTdWJqZWN0JC5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgICAgICB0aGlzLmV4cGFuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCwgdGhpcy5zZWFyY2hGaWVsZHMkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHNdKSA9PlxuICAgICAgICAgIHNlYXJjaEZpZWxkc1xuICAgICAgICAgICAgPy5maWx0ZXIoc2VhcmNoRmllbGQgPT4gc2VhcmNoRmllbGQuZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgICAgICAgICAubWFwKHNlYXJjaEZpZWxkID0+XG4gICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRyb3Bkb3duRGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZHJvcGRvd25EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gT2JqZWN0LmtleXMoZHJvcGRvd25EYXRhKS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25GaWVsZEtleSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRyb3Bkb3duRmllbGRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkcm9wZG93bkRhdGFbZHJvcGRvd25GaWVsZEtleV0sXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gW107XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQkLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGRpdiBjbGFzcz1cInNlYXJjaCBmaWVsZHNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nVGVtcGxhdGU+XG4gIDx2YWx0aW1vLXNwaW5uZXI+PC92YWx0aW1vLXNwaW5uZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaEZpZWxkc1RlbXBsYXRlPlxuICA8dmFsdGltby13aWRnZXQ+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uQWNjb3JkaW9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJvdyBwLTNcIlxuICAgICAgW25nQ2xhc3NdPVwieydyb3ctLWhpZGRlbic6IChleHBhbmRlZCQgfCBhc3luYykgPT09IGZhbHNlfVwiXG4gICAgICAqbmdJZj1cInNlYXJjaEZpZWxkcyQgfCBhc3luYyBhcyBzZWFyY2hGaWVsZHNcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlYXJjaEZpZWxkIG9mIHNlYXJjaEZpZWxkczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHtzZWFyY2hGaWVsZDogc2VhcmNoRmllbGR9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cIihpICsgMSkgJSAzID09PSAwXCI+PC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBidXR0b25zVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7bm9TZWFyY2hGaWVsZHM6ICFzZWFyY2hGaWVsZHMgfHwgc2VhcmNoRmllbGRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC92YWx0aW1vLXdpZGdldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRUZW1wbGF0ZSBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJ7XG4gICAgICB2YWx1ZXM6IHZhbHVlcyQgfCBhc3luYyxcbiAgICAgIHRvb2x0aXBLZXk6ICdzZWFyY2hGaWVsZHNUb29sdGlwcy4nICsgc2VhcmNoRmllbGQua2V5LFxuICAgICAgdG9vbHRpcDogJ3NlYXJjaEZpZWxkc1Rvb2x0aXBzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGUsXG4gICAgICBzZWFyY2hGaWVsZCxcbiAgICAgIHRpdGxlOlxuICAgICAgICBzZWFyY2hGaWVsZC50aXRsZSB8fFxuICAgICAgICAoJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5ICE9PSAoJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlKVxuICAgICAgICAgID8gKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6IHNlYXJjaEZpZWxkLmtleSlcbiAgICB9IGFzIHZhcnNcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZVRleHQ7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXI7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlQm9vbGVhbjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVUaW1lO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyUmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVUZXh0UmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlUmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlU2luZ2xlU2VsZWN0RHJvcGRvd247XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVNdWx0aVNlbGVjdERyb3Bkb3duO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVUZXh0XG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtaW5wdXRcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgPlxuICA8L3YtaW5wdXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8di1pbnB1dFxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdudW1iZXInICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIFtoaWRlTnVtYmVyU3BpbkJveF09XCJ0cnVlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICA+XG4gIDwvdi1pbnB1dD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8di1kYXRlLXBpY2tlclxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICA+PC92LWRhdGUtcGlja2VyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgPlxuICAgICAgPC92LWlucHV0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtaW5wdXRcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgPlxuICAgICAgPC92LWlucHV0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtaW5wdXRcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlUmFuZ2VcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5zdGFydFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgID48L3YtZGF0ZS1waWNrZXI+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlQm9vbGVhblxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtc2VsZWN0XG4gICAgICAqbmdJZj1cImJvb2xlYW5JdGVtcyQgfCBhc3luYyBhcyBib29sZWFuSXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cImJvb2xlYW5JdGVtc1wiXG4gICAgICBbbWFyZ2luXT1cImZhbHNlXCJcbiAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgICAgW2NsZWFyU2VsZWN0aW9uU3ViamVjdCRdPVwiY2xlYXIkXCJcbiAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwiZ2V0RGVmYXVsdEJvb2xlYW5TZWxlY3Rpb25JZCh2YWx1ZXMsIHNlYXJjaEZpZWxkLmtleSlcIlxuICAgID48L3Ytc2VsZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVUaW1lXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtZGF0ZS1waWNrZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudCwgdHJ1ZSlcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtlbmFibGVUaW1lXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gID48L3YtZGF0ZS1waWNrZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50LCB0cnVlKVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1kYXRlLXBpY2tlclxuICAgICAgICBuYW1lPVwic3RhcnRcIlxuICAgICAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAgICAgW2VuYWJsZVRpbWVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5zdGFydFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbZW5hYmxlVGltZV09XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgIDwvdi1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZVNpbmdsZVNlbGVjdERyb3Bkb3duXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJ1wiXG4gID5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1zZWxlY3RcbiAgICAgICpuZ0lmPVwiZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldIGFzIHNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cInNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVNdWx0aVNlbGVjdERyb3Bkb3duXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdtdWx0aS1zZWxlY3QtZHJvcGRvd24nXCJcbiAgPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LXNlbGVjdFxuICAgICAgKm5nSWY9XCJkcm9wZG93blNlbGVjdEl0ZW1zTWFwW3NlYXJjaEZpZWxkLmtleV0gYXMgc2VhcmNoRmllbGRTZWxlY3RJdGVtc1wiXG4gICAgICBbaXRlbXNdPVwic2VhcmNoRmllbGRTZWxlY3RJdGVtc1wiXG4gICAgICBbbWFyZ2luXT1cImZhbHNlXCJcbiAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgICAgW2NsZWFyU2VsZWN0aW9uU3ViamVjdCRdPVwiY2xlYXIkXCJcbiAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZHNdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICAgID48L3Ytc2VsZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdG9UZXh0PlxuICA8ZGl2IGNsYXNzPVwidG8tdGV4dFwiPlxuICAgIDx2LXBhcmFncmFwaD57eyAnc2VhcmNoRmllbGRzLnRvJyB8IHRyYW5zbGF0ZSB9fTwvdi1wYXJhZ3JhcGg+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zVGVtcGxhdGUgbGV0LW5vU2VhcmNoRmllbGRzPVwibm9TZWFyY2hGaWVsZHNcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9TZWFyY2hGaWVsZHNUZW1wbGF0ZTsgY29udGV4dDoge25vU2VhcmNoRmllbGRzOiBub1NlYXJjaEZpZWxkc31cIlxuICA+PC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiICpuZ0lmPVwie2V4cGFuZGVkOiBleHBhbmRlZCQgfCBhc3luY30gYXMgb2JzXCI+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0LWJ1dHRvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBub1NlYXJjaEZpZWxkc1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXNlY29uZGFyeVwiXG4gICAgICAgICpuZ0lmPVwib2JzLmV4cGFuZGVkXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkcy5jbGVhckJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgbm9TZWFyY2hGaWVsZHMgfHwgKGhhc1ZhbGlkVmFsdWVzJCB8IGFzeW5jKSA9PT0gZmFsc2VcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgKm5nSWY9XCJvYnMuZXhwYW5kZWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2VhcmNoRmllbGRzLnNlYXJjaEJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vU2VhcmNoRmllbGRzVGVtcGxhdGUgbGV0LW5vU2VhcmNoRmllbGRzPVwibm9TZWFyY2hGaWVsZHNcIj5cbiAgPGRpdiBjbGFzcz1cInctMTAwIG1iLTNcIiAqbmdJZj1cIm5vU2VhcmNoRmllbGRzXCI+XG4gICAgPHYtcGFyYWdyYXBoIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFtjZW50ZXJdPVwidHJ1ZVwiPnt7XG4gICAgICAnc2VhcmNoRmllbGRzLm5vbmVDb25maWd1cmVkJyB8IHRyYW5zbGF0ZVxuICAgIH19PC92LXBhcmFncmFwaD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbkFjY29yZGlvbj5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCIgKm5nSWY9XCJ7ZXhwYW5kZWQ6IGV4cGFuZGVkJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoKVwiXG4gICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgb2JzLmV4cGFuZGVkID8gJ21kaSBtZGktY2hldnJvbi1yaWdodCBhY2NvcmRpb24tYnV0dG9uLS1hY3RpdmUnIDogJ21kaSBtZGktY2hldnJvbi1kb3duJ1xuICAgICAgXCJcbiAgICA+XG4gICAgICB7eyAnc2VhcmNoRmllbGRzLnNlYXJjaEJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQWdCLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFVbEcsTUFBTSxPQUFPLHFCQUFxQjtJQXdEaEMsWUFDbUIsZUFBZ0MsRUFDaEMsZ0JBQWtDO1FBRGxDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBN0MzQyxhQUFRLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRW5GLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTFELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBRTVELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFFckQsb0JBQWUsR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sV0FBVyxHQUNmLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUUsS0FBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BGLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxFQUFFLE1BQU0sQ0FDMUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFhLENBQUMsS0FBSyxHQUFJLEtBQWEsQ0FBQyxHQUFHLENBQ25ELENBQUM7WUFFRixPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFTyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEQsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFNckIscUJBQWdCLEdBQXVCLGlCQUFpQixDQUFDO1FBQ3pELHFCQUFnQixHQUF1QixpQkFBaUIsQ0FBQztRQUVqRSxpQkFBWSxHQUE4QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RixrQkFBYSxHQUFrQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDOUYsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixFQUFFLEVBQUUsSUFBSTtZQUNSLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztTQUM1RCxDQUFDLENBQUMsQ0FDSixDQUNGLENBQUM7UUFFTywyQkFBc0IsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUt6RSxDQUFDO0lBekRKLElBQWEsWUFBWSxDQUFDLE1BQTBCO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFhLHNCQUFzQixDQUFDLHNCQUE4QjtRQUNoRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO1lBQ25GLElBQUksNkJBQTZCLEtBQUssc0JBQXNCLEVBQUU7Z0JBQzVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUMzRDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWtERCxRQUFRO1FBQ04sSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsa0NBQWtDLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsY0FBc0IsRUFBRSxLQUFVLEVBQUUsVUFBb0I7UUFDeEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVDLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBQyxDQUFDLENBQUM7YUFDMUY7aUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDdkQsTUFBTSxVQUFVLEdBQUcsRUFBQyxHQUFHLE1BQU0sRUFBQyxDQUFDO2dCQUMvQixPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDL0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxjQUFzQixFQUFFLEtBQVUsRUFBRSxVQUFvQjtRQUMxRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNoQixHQUFHLE1BQU07b0JBQ1QsQ0FBQyxjQUFjLENBQUMsRUFBRTt3QkFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7d0JBQ25ELEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO3FCQUNoRDtpQkFDRixDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNoQixHQUFHLE1BQU07b0JBQ1QsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7aUJBQ3JFLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLFVBQVUsR0FBRyxFQUFDLEdBQUcsTUFBTSxFQUFDLENBQUM7Z0JBQy9CLE9BQU8sVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsNEJBQTRCLENBQUMsTUFBeUIsRUFBRSxjQUFzQjtRQUM1RSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVoRCxJQUFJLGdCQUFnQixLQUFLLElBQUksRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUM5QjthQUFNLElBQUksZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQzlCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQVUsRUFBRSxVQUFvQjtRQUNyRCxJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7UUFDRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sc0NBQXNDO1FBQzVDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNwRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN6RSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUNmO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDMUYsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUM3QyxZQUFZO1lBQ1YsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7YUFDeEQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQ2pCLElBQUksQ0FBQyxlQUFlO2FBQ2pCLGVBQWUsQ0FDZCxXQUFXLENBQUMsb0JBQW9CLEVBQ2hDLHNCQUFzQixFQUN0QixXQUFXLENBQUMsR0FBRyxDQUNoQjthQUNBLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN4QixJQUFJLFlBQVksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FDMUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25CLEVBQUUsRUFBRSxnQkFBZ0I7b0JBQ3BCLElBQUksRUFBRSxZQUFZLENBQUMsZ0JBQWdCLENBQUM7aUJBQ3JDLENBQUMsQ0FDSCxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDbkQ7UUFDSCxDQUFDLENBQUMsQ0FDTCxDQUNKLENBQ0Y7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7bUhBOU1VLHFCQUFxQjt1R0FBckIscUJBQXFCLHdQQzVCbEMsaWhrQkFrbUJBOzRGRHRrQmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHVCQUF1QjtxSUFLeEIsT0FBTztzQkFBZixLQUFLO2dCQUNPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBR08sc0JBQXNCO3NCQUFsQyxLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTZWFyY2hGaWVsZCwgU2VhcmNoRmllbGRCb29sZWFuLCBTZWFyY2hGaWVsZFZhbHVlc30gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NlbGVjdEl0ZW19IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBzZXQgc2VhcmNoRmllbGRzKGZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XG4gICAgdGhpcy5zZWFyY2hGaWVsZHMkLm5leHQoZmllbGRzKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgZG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGN1cnJlbnREb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIGlmIChjdXJyZW50RG9jdW1lbnREZWZpbml0aW9uTmFtZSAhPT0gZG9jdW1lbnREZWZpbml0aW9uTmFtZSkge1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLm5leHQoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgQElucHV0KCkgc2V0VmFsdWVzU3ViamVjdCQ6IE9ic2VydmFibGU8U2VhcmNoRmllbGRWYWx1ZXM+O1xuICBAT3V0cHV0KCkgZG9TZWFyY2g6IEV2ZW50RW1pdHRlcjxTZWFyY2hGaWVsZFZhbHVlcz4gPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkVmFsdWVzPigpO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICByZWFkb25seSBzZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxTZWFyY2hGaWVsZD4+KFtdKTtcblxuICByZWFkb25seSB2YWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZFZhbHVlcz4oe30pO1xuXG4gIHJlYWRvbmx5IGhhc1ZhbGlkVmFsdWVzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMudmFsdWVzJC5waXBlKFxuICAgIG1hcCh2YWx1ZXMgPT4ge1xuICAgICAgY29uc3QgaGFzVmFsdWVzID0gKE9iamVjdC5rZXlzKHZhbHVlcykgfHwgW10pLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCByYW5nZVZhbHVlcyA9XG4gICAgICAgIChoYXNWYWx1ZXMgJiYgT2JqZWN0LnZhbHVlcyh2YWx1ZXMpPy5maWx0ZXIodmFsdWUgPT4gKHZhbHVlIGFzIGFueSkuc3RhcnQpKSB8fCBbXTtcbiAgICAgIGNvbnN0IHZhbGlkUmFuZ2VWYWx1ZXMgPSByYW5nZVZhbHVlcz8uZmlsdGVyKFxuICAgICAgICB2YWx1ZSA9PiAodmFsdWUgYXMgYW55KS5zdGFydCA8ICh2YWx1ZSBhcyBhbnkpLmVuZFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuICEhKGhhc1ZhbHVlcyAmJiByYW5nZVZhbHVlcy5sZW5ndGggPT09IHZhbGlkUmFuZ2VWYWx1ZXMubGVuZ3RoKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGV4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGVhciQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuXG4gIHByaXZhdGUgZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkcm9wZG93blN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQk9PTEVBTl9QT1NJVElWRTogU2VhcmNoRmllbGRCb29sZWFuID0gJ2Jvb2xlYW5Qb3NpdGl2ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgQk9PTEVBTl9ORUdBVElWRTogU2VhcmNoRmllbGRCb29sZWFuID0gJ2Jvb2xlYW5OZWdhdGl2ZSc7XG5cbiAgcmVhZG9ubHkgQk9PTEVBTlRZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEJvb2xlYW4+ID0gW3RoaXMuQk9PTEVBTl9QT1NJVElWRSwgdGhpcy5CT09MRUFOX05FR0FUSVZFXTtcbiAgcmVhZG9ubHkgYm9vbGVhbkl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5CT09MRUFOVFlQRVMubWFwKHR5cGUgPT4gKHtcbiAgICAgICAgaWQ6IHR5cGUsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHt0eXBlfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGRyb3Bkb3duU2VsZWN0SXRlbXNNYXA6IE1hcDxzdHJpbmcsIEFycmF5PFNlbGVjdEl0ZW0+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlblZhbHVlc1N1YmplY3RTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRyb3Bkb3duU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGRLZXk6IHN0cmluZywgdmFsdWU6IGFueSwgaXNEYXRlVGltZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIGlmICh2YWx1ZSB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh7Li4udmFsdWVzLCBbc2VhcmNoRmllbGRLZXldOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLCBpc0RhdGVUaW1lKX0pO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyh2YWx1ZXMpLmluY2x1ZGVzKHNlYXJjaEZpZWxkS2V5KSkge1xuICAgICAgICBjb25zdCB2YWx1ZXNDb3B5ID0gey4uLnZhbHVlc307XG4gICAgICAgIGRlbGV0ZSB2YWx1ZXNDb3B5W3NlYXJjaEZpZWxkS2V5XTtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQodmFsdWVzQ29weSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzRGF0ZVRpbWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWUuc3RhcnQgJiYgdmFsdWUuZW5kKSB7XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHtcbiAgICAgICAgICAuLi52YWx1ZXMsXG4gICAgICAgICAgW3NlYXJjaEZpZWxkS2V5XToge1xuICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2V0U2luZ2xlVmFsdWUodmFsdWUuc3RhcnQsIGlzRGF0ZVRpbWUpLFxuICAgICAgICAgICAgZW5kOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLmVuZCwgaXNEYXRlVGltZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQoe1xuICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICBbc2VhcmNoRmllbGRLZXldOiB2YWx1ZS5tYXAodiA9PiB0aGlzLmdldFNpbmdsZVZhbHVlKHYsIGlzRGF0ZVRpbWUpKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlc1tzZWFyY2hGaWVsZEtleV0pIHtcbiAgICAgICAgY29uc3QgdmFsdWVzQ29weSA9IHsuLi52YWx1ZXN9O1xuICAgICAgICBkZWxldGUgdmFsdWVzQ29weVtzZWFyY2hGaWVsZEtleV07XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlc0NvcHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZXhwYW5kZWQgPT4ge1xuICAgICAgdGhpcy5leHBhbmRlZCQubmV4dCghZXhwYW5kZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgc2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy5kb1NlYXJjaC5lbWl0KHZhbHVlcyk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuZG9TZWFyY2guZW1pdCh7fSk7XG4gIH1cblxuICBnZXREZWZhdWx0Qm9vbGVhblNlbGVjdGlvbklkKHZhbHVlczogU2VhcmNoRmllbGRWYWx1ZXMsIHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZFZhbHVlID0gdmFsdWVzW3NlYXJjaEZpZWxkS2V5XTtcblxuICAgIGlmIChzZWFyY2hGaWVsZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5CT09MRUFOX1BPU0lUSVZFO1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoRmllbGRWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fTkVHQVRJVkU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaW5nbGVWYWx1ZSh2YWx1ZTogYW55LCBpc0RhdGVUaW1lPzogYm9vbGVhbik6IGFueSB7XG4gICAgaWYgKGlzRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLkJPT0xFQU5fUE9TSVRJVkUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuQk9PTEVBTl9ORUdBVElWRSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXRWYWx1ZXNTdWJqZWN0JCkge1xuICAgICAgdGhpcy52YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXRWYWx1ZXNTdWJqZWN0JC5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgICAgICB0aGlzLmV4cGFuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCwgdGhpcy5zZWFyY2hGaWVsZHMkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHNdKSA9PlxuICAgICAgICAgIHNlYXJjaEZpZWxkc1xuICAgICAgICAgICAgPy5maWx0ZXIoc2VhcmNoRmllbGQgPT4gc2VhcmNoRmllbGQuZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgICAgICAgICAubWFwKHNlYXJjaEZpZWxkID0+XG4gICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRyb3Bkb3duRGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZHJvcGRvd25EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gT2JqZWN0LmtleXMoZHJvcGRvd25EYXRhKS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25GaWVsZEtleSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRyb3Bkb3duRmllbGRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkcm9wZG93bkRhdGFbZHJvcGRvd25GaWVsZEtleV0sXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gW107XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQkLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGRpdiBjbGFzcz1cInNlYXJjaCBmaWVsZHNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nVGVtcGxhdGU+XG4gIDx2YWx0aW1vLXNwaW5uZXI+PC92YWx0aW1vLXNwaW5uZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaEZpZWxkc1RlbXBsYXRlPlxuICA8dmFsdGltby13aWRnZXQ+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uQWNjb3JkaW9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJvdyBwLTNcIlxuICAgICAgW25nQ2xhc3NdPVwieydyb3ctLWhpZGRlbic6IChleHBhbmRlZCQgfCBhc3luYykgPT09IGZhbHNlfVwiXG4gICAgICAqbmdJZj1cInNlYXJjaEZpZWxkcyQgfCBhc3luYyBhcyBzZWFyY2hGaWVsZHNcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlYXJjaEZpZWxkIG9mIHNlYXJjaEZpZWxkczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHtzZWFyY2hGaWVsZDogc2VhcmNoRmllbGR9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cIihpICsgMSkgJSAzID09PSAwXCI+PC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBidXR0b25zVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7bm9TZWFyY2hGaWVsZHM6ICFzZWFyY2hGaWVsZHMgfHwgc2VhcmNoRmllbGRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC92YWx0aW1vLXdpZGdldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRUZW1wbGF0ZSBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJ7XG4gICAgICB2YWx1ZXM6IHZhbHVlcyQgfCBhc3luYyxcbiAgICAgIHRvb2x0aXBLZXk6ICdzZWFyY2hGaWVsZHNUb29sdGlwcy4nICsgc2VhcmNoRmllbGQua2V5LFxuICAgICAgdG9vbHRpcDogJ3NlYXJjaEZpZWxkc1Rvb2x0aXBzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGUsXG4gICAgICBzZWFyY2hGaWVsZCxcbiAgICAgIHRpdGxlOlxuICAgICAgICBzZWFyY2hGaWVsZC50aXRsZSB8fFxuICAgICAgICAoJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5ICE9PSAoJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlKVxuICAgICAgICAgID8gKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6IHNlYXJjaEZpZWxkLmtleSlcbiAgICB9IGFzIHZhcnNcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZVRleHQ7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXI7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlQm9vbGVhbjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVUaW1lO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyUmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVUZXh0UmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlUmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlU2luZ2xlU2VsZWN0RHJvcGRvd247XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVNdWx0aVNlbGVjdERyb3Bkb3duO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVUZXh0XG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtaW5wdXRcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgPlxuICA8L3YtaW5wdXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8di1pbnB1dFxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdudW1iZXInICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIFtoaWRlTnVtYmVyU3BpbkJveF09XCJ0cnVlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICA+XG4gIDwvdi1pbnB1dD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8di1kYXRlLXBpY2tlclxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICA+PC92LWRhdGUtcGlja2VyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgPlxuICAgICAgPC92LWlucHV0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtaW5wdXRcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgPlxuICAgICAgPC92LWlucHV0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtaW5wdXRcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlUmFuZ2VcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5zdGFydFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgID48L3YtZGF0ZS1waWNrZXI+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlQm9vbGVhblxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtc2VsZWN0XG4gICAgICAqbmdJZj1cImJvb2xlYW5JdGVtcyQgfCBhc3luYyBhcyBib29sZWFuSXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cImJvb2xlYW5JdGVtc1wiXG4gICAgICBbbWFyZ2luXT1cImZhbHNlXCJcbiAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgICAgW2NsZWFyU2VsZWN0aW9uU3ViamVjdCRdPVwiY2xlYXIkXCJcbiAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwiZ2V0RGVmYXVsdEJvb2xlYW5TZWxlY3Rpb25JZCh2YWx1ZXMsIHNlYXJjaEZpZWxkLmtleSlcIlxuICAgID48L3Ytc2VsZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVUaW1lXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtZGF0ZS1waWNrZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudCwgdHJ1ZSlcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtlbmFibGVUaW1lXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gID48L3YtZGF0ZS1waWNrZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50LCB0cnVlKVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1kYXRlLXBpY2tlclxuICAgICAgICBuYW1lPVwic3RhcnRcIlxuICAgICAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAgICAgW2VuYWJsZVRpbWVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5zdGFydFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbZW5hYmxlVGltZV09XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgIDwvdi1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZVNpbmdsZVNlbGVjdERyb3Bkb3duXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJ1wiXG4gID5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1zZWxlY3RcbiAgICAgICpuZ0lmPVwiZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldIGFzIHNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cInNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVNdWx0aVNlbGVjdERyb3Bkb3duXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdtdWx0aS1zZWxlY3QtZHJvcGRvd24nXCJcbiAgPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LXNlbGVjdFxuICAgICAgKm5nSWY9XCJkcm9wZG93blNlbGVjdEl0ZW1zTWFwW3NlYXJjaEZpZWxkLmtleV0gYXMgc2VhcmNoRmllbGRTZWxlY3RJdGVtc1wiXG4gICAgICBbaXRlbXNdPVwic2VhcmNoRmllbGRTZWxlY3RJdGVtc1wiXG4gICAgICBbbWFyZ2luXT1cImZhbHNlXCJcbiAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICBbd2lkdGhJblB4XT1cIjIwMFwiXG4gICAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgICAgW2NsZWFyU2VsZWN0aW9uU3ViamVjdCRdPVwiY2xlYXIkXCJcbiAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZHNdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICAgID48L3Ytc2VsZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdG9UZXh0PlxuICA8ZGl2IGNsYXNzPVwidG8tdGV4dFwiPlxuICAgIDx2LXBhcmFncmFwaD57eyAnc2VhcmNoRmllbGRzLnRvJyB8IHRyYW5zbGF0ZSB9fTwvdi1wYXJhZ3JhcGg+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zVGVtcGxhdGUgbGV0LW5vU2VhcmNoRmllbGRzPVwibm9TZWFyY2hGaWVsZHNcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9TZWFyY2hGaWVsZHNUZW1wbGF0ZTsgY29udGV4dDoge25vU2VhcmNoRmllbGRzOiBub1NlYXJjaEZpZWxkc31cIlxuICA+PC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiICpuZ0lmPVwie2V4cGFuZGVkOiBleHBhbmRlZCQgfCBhc3luY30gYXMgb2JzXCI+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0LWJ1dHRvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBub1NlYXJjaEZpZWxkc1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXNlY29uZGFyeVwiXG4gICAgICAgICpuZ0lmPVwib2JzLmV4cGFuZGVkXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkcy5jbGVhckJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgbm9TZWFyY2hGaWVsZHMgfHwgKGhhc1ZhbGlkVmFsdWVzJCB8IGFzeW5jKSA9PT0gZmFsc2VcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgKm5nSWY9XCJvYnMuZXhwYW5kZWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2VhcmNoRmllbGRzLnNlYXJjaEJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vU2VhcmNoRmllbGRzVGVtcGxhdGUgbGV0LW5vU2VhcmNoRmllbGRzPVwibm9TZWFyY2hGaWVsZHNcIj5cbiAgPGRpdiBjbGFzcz1cInctMTAwIG1iLTNcIiAqbmdJZj1cIm5vU2VhcmNoRmllbGRzXCI+XG4gICAgPHYtcGFyYWdyYXBoIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFtjZW50ZXJdPVwidHJ1ZVwiPnt7XG4gICAgICAnc2VhcmNoRmllbGRzLm5vbmVDb25maWd1cmVkJyB8IHRyYW5zbGF0ZVxuICAgIH19PC92LXBhcmFncmFwaD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbkFjY29yZGlvbj5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCIgKm5nSWY9XCJ7ZXhwYW5kZWQ6IGV4cGFuZGVkJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoKVwiXG4gICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgb2JzLmV4cGFuZGVkID8gJ21kaSBtZGktY2hldnJvbi1yaWdodCBhY2NvcmRpb24tYnV0dG9uLS1hY3RpdmUnIDogJ21kaSBtZGktY2hldnJvbi1kb3duJ1xuICAgICAgXCJcbiAgICA+XG4gICAgICB7eyAnc2VhcmNoRmllbGRzLnNlYXJjaEJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2015-2020 Ritense BV, the Netherlands.
2
+ * Copyright 2015-2023 Ritense BV, the Netherlands.
3
3
  *
4
4
  * Licensed under EUPL, Version 1.2 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -66,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
66
66
  exports: [SearchFieldsComponent],
67
67
  }]
68
68
  }] });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0seUJBQXlCLENBQUM7O0FBbUJqQyxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBaEJkLHFCQUFxQixhQUVsQyxZQUFZO1FBQ1osYUFBYTtRQUNiLFlBQVk7UUFDWixlQUFlO1FBQ2YsV0FBVztRQUNYLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixZQUFZO1FBQ1osWUFBWSxhQUVKLHFCQUFxQjtpSEFFcEIsa0JBQWtCLFlBZDNCLFlBQVk7UUFDWixhQUFhO1FBQ2IsWUFBWTtRQUNaLGVBQWU7UUFDZixXQUFXO1FBQ1gsVUFBVTtRQUNWLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLFlBQVk7UUFDWixZQUFZOzRGQUlILGtCQUFrQjtrQkFqQjlCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7U2VhcmNoRmllbGRzQ29tcG9uZW50fSBmcm9tICcuL3NlYXJjaC1maWVsZHMuY29tcG9uZW50JztcbmltcG9ydCB7U3Bpbm5lck1vZHVsZX0gZnJvbSAnLi4vc3Bpbm5lci9zcGlubmVyLm1vZHVsZSc7XG5pbXBvcnQge1dpZGdldE1vZHVsZX0gZnJvbSAnLi4vd2lkZ2V0L3dpZGdldC5tb2R1bGUnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQnV0dG9uTW9kdWxlLFxuICBEYXRlUGlja2VyTW9kdWxlLFxuICBGb3JtTW9kdWxlLFxuICBJbnB1dExhYmVsTW9kdWxlLFxuICBJbnB1dE1vZHVsZSxcbiAgUGFyYWdyYXBoTW9kdWxlLFxuICBTZWxlY3RNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbU2VhcmNoRmllbGRzQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTcGlubmVyTW9kdWxlLFxuICAgIFdpZGdldE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgRm9ybU1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIElucHV0TGFiZWxNb2R1bGUsXG4gICAgUGFyYWdyYXBoTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBTZWxlY3RNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtTZWFyY2hGaWVsZHNDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hGaWVsZHNNb2R1bGUge31cbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0seUJBQXlCLENBQUM7O0FBbUJqQyxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBaEJkLHFCQUFxQixhQUVsQyxZQUFZO1FBQ1osYUFBYTtRQUNiLFlBQVk7UUFDWixlQUFlO1FBQ2YsV0FBVztRQUNYLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixZQUFZO1FBQ1osWUFBWSxhQUVKLHFCQUFxQjtpSEFFcEIsa0JBQWtCLFlBZDNCLFlBQVk7UUFDWixhQUFhO1FBQ2IsWUFBWTtRQUNaLGVBQWU7UUFDZixXQUFXO1FBQ1gsVUFBVTtRQUNWLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLFlBQVk7UUFDWixZQUFZOzRGQUlILGtCQUFrQjtrQkFqQjlCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7U2VhcmNoRmllbGRzQ29tcG9uZW50fSBmcm9tICcuL3NlYXJjaC1maWVsZHMuY29tcG9uZW50JztcbmltcG9ydCB7U3Bpbm5lck1vZHVsZX0gZnJvbSAnLi4vc3Bpbm5lci9zcGlubmVyLm1vZHVsZSc7XG5pbXBvcnQge1dpZGdldE1vZHVsZX0gZnJvbSAnLi4vd2lkZ2V0L3dpZGdldC5tb2R1bGUnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQnV0dG9uTW9kdWxlLFxuICBEYXRlUGlja2VyTW9kdWxlLFxuICBGb3JtTW9kdWxlLFxuICBJbnB1dExhYmVsTW9kdWxlLFxuICBJbnB1dE1vZHVsZSxcbiAgUGFyYWdyYXBoTW9kdWxlLFxuICBTZWxlY3RNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbU2VhcmNoRmllbGRzQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTcGlubmVyTW9kdWxlLFxuICAgIFdpZGdldE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgRm9ybU1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIElucHV0TGFiZWxNb2R1bGUsXG4gICAgUGFyYWdyYXBoTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBTZWxlY3RNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtTZWFyY2hGaWVsZHNDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hGaWVsZHNNb2R1bGUge31cbiJdfQ==