barsa-develop-components 2.2.2 → 2.2.4

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 (75) hide show
  1. package/esm2022/barsa-develop-components.mjs +5 -0
  2. package/esm2022/lib/accept-reject/accept-reject.component.mjs +68 -0
  3. package/esm2022/lib/avatar/avatar.component.mjs +29 -0
  4. package/esm2022/lib/barcode-format-pipe.mjs +25 -0
  5. package/esm2022/lib/barcode-reader/barcode-reader.component.mjs +62 -0
  6. package/esm2022/lib/barcode-reader-dialog/barcode-reader-dialog.component.mjs +82 -0
  7. package/esm2022/lib/barcode-reader-video/barcode-reader-video.component.mjs +66 -0
  8. package/esm2022/lib/barcode.service.mjs +330 -0
  9. package/esm2022/lib/barsa-develop-components.module.mjs +292 -0
  10. package/esm2022/lib/barsa-document-list-item/barsa-document-list-item.component.mjs +104 -0
  11. package/esm2022/lib/barsa-documents/barsa-documents.component.mjs +159 -0
  12. package/esm2022/lib/barsa-geographic-location/barsa-geographic-location.component.mjs +173 -0
  13. package/esm2022/lib/card-content-image-and-title/card-content-image-and-title.component.mjs +50 -0
  14. package/esm2022/lib/card-content-line-chart/card-content-line-chart.component.mjs +36 -0
  15. package/esm2022/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.mjs +19 -0
  16. package/esm2022/lib/card-header-kpi/card-header-kpi.component.mjs +40 -0
  17. package/esm2022/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.mjs +45 -0
  18. package/esm2022/lib/checkbox-button/checkbox-button.component.mjs +23 -0
  19. package/esm2022/lib/column-chip/column-chip.component.mjs +44 -0
  20. package/esm2022/lib/column-form-viewer/column-form-viewer.component.mjs +88 -0
  21. package/esm2022/lib/column-progressbar/column-progressbar.component.mjs +87 -0
  22. package/esm2022/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.mjs +18 -0
  23. package/esm2022/lib/footer/footer.component.mjs +43 -0
  24. package/esm2022/lib/form-card/form-card.component.mjs +17 -0
  25. package/esm2022/lib/form-chart-content/form-chart-content.component.mjs +36 -0
  26. package/esm2022/lib/form-content-quick-view/form-content-quick-view.component.mjs +102 -0
  27. package/esm2022/lib/form-report-view/form-report-view.component.mjs +25 -0
  28. package/esm2022/lib/form-report-view-item/form-report-view-item.component.mjs +45 -0
  29. package/esm2022/lib/g4b-details/g4b-details.component.mjs +28 -0
  30. package/esm2022/lib/g4b-estelam/g4b-estelam.component.mjs +30 -0
  31. package/esm2022/lib/geographic-location/geographic-location.component.mjs +88 -0
  32. package/esm2022/lib/login-form/login-form.component.mjs +55 -0
  33. package/esm2022/lib/login-social-conncetions/login-social-conncetions.component.mjs +30 -0
  34. package/esm2022/lib/master-detail-card-form/master-detail-card-form.component.mjs +17 -0
  35. package/esm2022/lib/media-file-uploader/media-file-uploader.component.mjs +238 -0
  36. package/esm2022/lib/micro-proccess-flow/micro-proccess-flow.component.mjs +52 -0
  37. package/esm2022/lib/micro-process-flow-view/micro-process-flow-view.component.mjs +24 -0
  38. package/esm2022/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.mjs +23 -0
  39. package/esm2022/lib/models/document-item.mjs +2 -0
  40. package/esm2022/lib/models/documents-setting.mjs +2 -0
  41. package/esm2022/lib/models/form-report-view-setting.mjs +2 -0
  42. package/esm2022/lib/models/index.mjs +8 -0
  43. package/esm2022/lib/models/micro-process-flow-view-setting.mjs +2 -0
  44. package/esm2022/lib/models/person.mjs +2 -0
  45. package/esm2022/lib/models/service-desk-view-of-services-setting.mjs +2 -0
  46. package/esm2022/lib/models/tab-process-view-setting.mjs +2 -0
  47. package/esm2022/lib/pipes/datasource-to-flow-item.mjs +23 -0
  48. package/esm2022/lib/pipes/index.mjs +3 -0
  49. package/esm2022/lib/pipes/mo-list-to-flow-item.pipe.mjs +23 -0
  50. package/esm2022/lib/query-string-form-observable/query-string-form-observable.component.mjs +37 -0
  51. package/esm2022/lib/query-string-observable/query-string-observable.component.mjs +22 -0
  52. package/esm2022/lib/report-button-view/report-button-view.component.mjs +37 -0
  53. package/esm2022/lib/report-line-chart-view/report-line-chart-view.component.mjs +12 -0
  54. package/esm2022/lib/report-tab-view/report-tab-view.component.mjs +27 -0
  55. package/esm2022/lib/resend-verification-code/resend-verification-code.component.mjs +62 -0
  56. package/esm2022/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.mjs +28 -0
  57. package/esm2022/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.mjs +110 -0
  58. package/esm2022/lib/service-desk-header/service-desk-header.component.mjs +238 -0
  59. package/esm2022/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.mjs +142 -0
  60. package/esm2022/lib/service-desk-view-of-services/service-desk-view-of-services.component.mjs +37 -0
  61. package/esm2022/lib/setting-form/setting-form.component.mjs +64 -0
  62. package/esm2022/lib/subform-in-row-report/subform-in-row-report.component.mjs +73 -0
  63. package/esm2022/lib/tab-process-view/tab-process-view.component.mjs +48 -0
  64. package/esm2022/lib/table-view-vertical-columns/table-view-vertical-columns.component.mjs +16 -0
  65. package/esm2022/lib/timer-count-down/timer-count-down.component.mjs +104 -0
  66. package/esm2022/lib/token-report-view/token-report-view.component.mjs +27 -0
  67. package/esm2022/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.mjs +25 -0
  68. package/esm2022/lib/ui-num-rate/ui-num-rate.component.mjs +29 -0
  69. package/esm2022/lib/ui-person/ui-person.component.mjs +160 -0
  70. package/esm2022/lib/ui-person/ui-person.pipe.mjs +41 -0
  71. package/esm2022/lib/ui-pictures-carousel/ui-pictures-carousel.component.mjs +17 -0
  72. package/esm2022/lib/ui-text-field-search/ui-text-field-search.component.mjs +42 -0
  73. package/esm2022/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.mjs +69 -0
  74. package/esm2022/public-api.mjs +64 -0
  75. package/package.json +3 -1
@@ -0,0 +1,110 @@
1
+ import { Component, ChangeDetectionStrategy, ViewChild, ViewChildren, ElementRef } from '@angular/core';
2
+ import { BarsaApi, FormPropsBaseComponent } from 'barsa-novin-ray-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@fundamental-ngx/core/icon";
6
+ import * as i3 from "@fundamental-ngx/core/layout-grid";
7
+ import * as i4 from "@fundamental-ngx/core/table";
8
+ export class ServiceDeskFormLayoutContentMojavezComponent extends FormPropsBaseComponent {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.fieldsCaption = [];
12
+ }
13
+ ngOnInit() {
14
+ super.ngOnInit();
15
+ let fieldDict = [];
16
+ if (this.fieldDict) {
17
+ fieldDict = Object.keys(this.fieldDict);
18
+ }
19
+ if (fieldDict) {
20
+ fieldDict.forEach((key) => {
21
+ if (this.fieldDict) {
22
+ const fieldName = this.fieldDict[key];
23
+ const item = { caption: key, fieldName, value: '' };
24
+ const customFiledUi = this._controlUiPipe.transform(key, this.layout94);
25
+ item.value = this.mo[fieldName];
26
+ const originalXtype = customFiledUi?.FieldUi?.originalXtype;
27
+ if (key === 'آدرس سایت') {
28
+ item.type = 'Link';
29
+ }
30
+ if (this.mo[fieldName + '$Caption']) {
31
+ item.type = 'Caption';
32
+ item.value = this.mo[fieldName + '$Caption'];
33
+ }
34
+ else if (typeof item.value === 'object') {
35
+ if (item.value.$Type === 'Common.MetaObjectListWeb') {
36
+ item.type = 'MoList';
37
+ }
38
+ else if (item.value.Ext) {
39
+ item.type = 'Image';
40
+ }
41
+ else if (originalXtype === 'Ui.FileLinearListBox') {
42
+ item.type = 'Files';
43
+ }
44
+ else {
45
+ item.type = 'Relation';
46
+ }
47
+ if (key === 'خدمات قابل انجام') {
48
+ item.type = 'MoList2';
49
+ }
50
+ }
51
+ this.fieldsCaption.push(item);
52
+ }
53
+ });
54
+ }
55
+ this.fieldsCaption = this.fieldsCaption.filter((c) => c.caption !== 'عنوان مجوز' && c.caption !== 'نقش اشخاص در مجوز' && c.caption !== 'فرزند');
56
+ const controlCount = this.fieldsCaption.length;
57
+ const controlCountMiddle = Math.ceil(this.fieldsCaption.length / 2);
58
+ this.firstArray = this.fieldsCaption.slice(0, controlCountMiddle);
59
+ this.secondArray = this.fieldsCaption.slice(controlCountMiddle, controlCount);
60
+ this.isOdd = controlCount % 2 === 0;
61
+ }
62
+ ngAfterViewInit() {
63
+ super.ngAfterViewInit();
64
+ this.alignTablesTr();
65
+ }
66
+ onLink(item) {
67
+ if (item.F34) {
68
+ window.open(item.F42);
69
+ }
70
+ else {
71
+ BarsaApi.Bw.Msg.Info('سامانه ای تعریف نشده است');
72
+ }
73
+ }
74
+ onDownload(item) {
75
+ BarsaApi.Common.File.DownloadFileId(item.Id);
76
+ }
77
+ alignTablesTr() {
78
+ setTimeout(() => {
79
+ const tablesRef = this.tablesRef.toArray();
80
+ const firstTableEl = tablesRef[0].nativeElement;
81
+ const secondTableEl = tablesRef[1].nativeElement;
82
+ const trFirstTable = firstTableEl.querySelectorAll('tr');
83
+ const trSecondTable = secondTableEl.querySelectorAll('tr');
84
+ trFirstTable.forEach((tr, index) => {
85
+ if (index < trSecondTable.length) {
86
+ const trSecond = trSecondTable[index];
87
+ if (tr.offsetHeight > trSecond.offsetHeight) {
88
+ trSecond.style.height = `${tr.offsetHeight}px`;
89
+ }
90
+ else {
91
+ tr.style.height = `${trSecond.offsetHeight}px`;
92
+ }
93
+ }
94
+ });
95
+ }, 0);
96
+ }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceDeskFormLayoutContentMojavezComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
98
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ServiceDeskFormLayoutContentMojavezComponent, selector: "bdc-service-desk-form-layout-content-mojavez", viewQueries: [{ propertyName: "tabContainerRef", first: true, predicate: ["tabContainerRef"], descendants: true }, { propertyName: "tablesRef", predicate: ["tablesRef"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<fd-layout-grid>\r\n <div [fdLayoutGridCol]=\"6\" style=\"padding: 0\">\r\n <ng-container *ngTemplateOutlet=\"renderTable; context: { $implicit: firstArray, classNames: 'firstTable' }\">\r\n </ng-container>\r\n </div>\r\n <div [fdLayoutGridCol]=\"6\" style=\"padding: 0\">\r\n <ng-container *ngTemplateOutlet=\"renderTable; context: { $implicit: secondArray, classNames: 'secondTable' }\">\r\n </ng-container>\r\n </div>\r\n</fd-layout-grid>\r\n\r\n<ng-template #renderTable let-array let-classNames=\"classNames\">\r\n <table fd-table #tablesRef class=\"table-grid\" [ngClass]=\"classNames\">\r\n @for (controlItem of array; track controlItem) {\r\n <tr fd-table-row>\r\n <th fd-tabel-cell>{{ controlItem.caption }}</th>\r\n <td fd-tabel-cell>\r\n @switch (controlItem.type) { @case ('Link') {\r\n <a target=\"_blank\" [href]=\"controlItem.value\">{{ controlItem.value }}</a>\r\n } @case ('Relation') {\r\n {{ controlItem.value.$Caption }}\r\n } @case ('MoList') { @for (item of controlItem.value.MoDataList; track item) {\r\n <div class=\"links\">\r\n <fd-icon class=\"fd-icon-link\" [glyph]=\"'pdf-attachment'\"></fd-icon>\r\n <a (click)=\"onDownload(item)\">{{ item.$Caption }}</a>\r\n </div>\r\n } } @case ('MoList2') { @for (item of controlItem.value.MoDataList; track item) {\r\n <div class=\"links\">\r\n <fd-icon class=\"fd-icon-link\" [glyph]=\"'chain-link'\"></fd-icon>\r\n <a (click)=\"onLink(item)\">{{ item.$Caption }}</a>\r\n </div>\r\n } } @case ('Caption') {\r\n {{ controlItem.value }}\r\n } @case ('Image') {\r\n {{ controlItem.value.Ext }}\r\n } @case ('Files') { @for (item of controlItem.value.Files; track item) {\r\n <div class=\"links\">\r\n <fd-icon class=\"fd-icon-link\" [glyph]=\"'pdf-attachment'\"></fd-icon>\r\n <a (click)=\"onDownload(item)\">{{ item.FileName }}</a>\r\n </div>\r\n } } @default {\r\n {{ controlItem.value }}\r\n } }\r\n </td>\r\n </tr>\r\n }\r\n </table>\r\n</ng-template>\r\n", styles: [".cell{font-size:14px}.bod{border-bottom:1px solid gray;border-right:1px solid gray;height:30px;line-height:30px}.bod :first{border-right:0;border-bottom:0}.anwser{line-height:30px;padding:10px;text-align:justify}.box{padding:0 40px 10px 10px;line-height:30px;display:flex;flex-direction:column;column-count:2;flex-wrap:wrap;height:180px;overflow:hidden}.faq-item-link{font-size:16px;padding-right:25px;cursor:pointer;color:gray}.faq-item-link a{color:gray;cursor:pointer}.faq-item-link a:hover{text-decoration:underline!important}.law-page-header{background:#fff;color:#0854a0;font-size:1.3rem;font-weight:500;padding:5px 15px}.wrapper{border-bottom:.0625rem solid var(--sapGroup_TitleBorderColor, #d9d9d9)}table.table-grid{border-collapse:collapse;width:100%;direction:rtl;background-color:#fff}.table-grid td,.table-grid th{border:1px solid grey;text-align:left;padding:12px 8px;text-align:right}.table-grid th{background-color:#e2e2e2;font-size:.825rem;font-weight:500;vertical-align:middle;width:200px}.table-grid td{font-size:.825rem;vertical-align:middle}@media only screen and (max-width: 992px){.secondTable tr:first-child td,.secondTable tr:first-child th{border-top:0}}@media only screen and (min-width: 992px){.secondTable th{border-right:0}}.fd-icon{font-size:2rem;color:#0854a0;padding-left:10px}.links a{line-height:25px;cursor:pointer;display:inline;color:#32363a;vertical-align:top}.links a:hover{text-decoration:underline!important;color:#0012af}.fd-icon-link{font-size:1rem;padding-left:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i3.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i3.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: i4.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i4.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceDeskFormLayoutContentMojavezComponent, decorators: [{
101
+ type: Component,
102
+ args: [{ selector: 'bdc-service-desk-form-layout-content-mojavez', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-layout-grid>\r\n <div [fdLayoutGridCol]=\"6\" style=\"padding: 0\">\r\n <ng-container *ngTemplateOutlet=\"renderTable; context: { $implicit: firstArray, classNames: 'firstTable' }\">\r\n </ng-container>\r\n </div>\r\n <div [fdLayoutGridCol]=\"6\" style=\"padding: 0\">\r\n <ng-container *ngTemplateOutlet=\"renderTable; context: { $implicit: secondArray, classNames: 'secondTable' }\">\r\n </ng-container>\r\n </div>\r\n</fd-layout-grid>\r\n\r\n<ng-template #renderTable let-array let-classNames=\"classNames\">\r\n <table fd-table #tablesRef class=\"table-grid\" [ngClass]=\"classNames\">\r\n @for (controlItem of array; track controlItem) {\r\n <tr fd-table-row>\r\n <th fd-tabel-cell>{{ controlItem.caption }}</th>\r\n <td fd-tabel-cell>\r\n @switch (controlItem.type) { @case ('Link') {\r\n <a target=\"_blank\" [href]=\"controlItem.value\">{{ controlItem.value }}</a>\r\n } @case ('Relation') {\r\n {{ controlItem.value.$Caption }}\r\n } @case ('MoList') { @for (item of controlItem.value.MoDataList; track item) {\r\n <div class=\"links\">\r\n <fd-icon class=\"fd-icon-link\" [glyph]=\"'pdf-attachment'\"></fd-icon>\r\n <a (click)=\"onDownload(item)\">{{ item.$Caption }}</a>\r\n </div>\r\n } } @case ('MoList2') { @for (item of controlItem.value.MoDataList; track item) {\r\n <div class=\"links\">\r\n <fd-icon class=\"fd-icon-link\" [glyph]=\"'chain-link'\"></fd-icon>\r\n <a (click)=\"onLink(item)\">{{ item.$Caption }}</a>\r\n </div>\r\n } } @case ('Caption') {\r\n {{ controlItem.value }}\r\n } @case ('Image') {\r\n {{ controlItem.value.Ext }}\r\n } @case ('Files') { @for (item of controlItem.value.Files; track item) {\r\n <div class=\"links\">\r\n <fd-icon class=\"fd-icon-link\" [glyph]=\"'pdf-attachment'\"></fd-icon>\r\n <a (click)=\"onDownload(item)\">{{ item.FileName }}</a>\r\n </div>\r\n } } @default {\r\n {{ controlItem.value }}\r\n } }\r\n </td>\r\n </tr>\r\n }\r\n </table>\r\n</ng-template>\r\n", styles: [".cell{font-size:14px}.bod{border-bottom:1px solid gray;border-right:1px solid gray;height:30px;line-height:30px}.bod :first{border-right:0;border-bottom:0}.anwser{line-height:30px;padding:10px;text-align:justify}.box{padding:0 40px 10px 10px;line-height:30px;display:flex;flex-direction:column;column-count:2;flex-wrap:wrap;height:180px;overflow:hidden}.faq-item-link{font-size:16px;padding-right:25px;cursor:pointer;color:gray}.faq-item-link a{color:gray;cursor:pointer}.faq-item-link a:hover{text-decoration:underline!important}.law-page-header{background:#fff;color:#0854a0;font-size:1.3rem;font-weight:500;padding:5px 15px}.wrapper{border-bottom:.0625rem solid var(--sapGroup_TitleBorderColor, #d9d9d9)}table.table-grid{border-collapse:collapse;width:100%;direction:rtl;background-color:#fff}.table-grid td,.table-grid th{border:1px solid grey;text-align:left;padding:12px 8px;text-align:right}.table-grid th{background-color:#e2e2e2;font-size:.825rem;font-weight:500;vertical-align:middle;width:200px}.table-grid td{font-size:.825rem;vertical-align:middle}@media only screen and (max-width: 992px){.secondTable tr:first-child td,.secondTable tr:first-child th{border-top:0}}@media only screen and (min-width: 992px){.secondTable th{border-right:0}}.fd-icon{font-size:2rem;color:#0854a0;padding-left:10px}.links a{line-height:25px;cursor:pointer;display:inline;color:#32363a;vertical-align:top}.links a:hover{text-decoration:underline!important;color:#0012af}.fd-icon-link{font-size:1rem;padding-left:5px}\n"] }]
103
+ }], propDecorators: { tabContainerRef: [{
104
+ type: ViewChild,
105
+ args: ['tabContainerRef']
106
+ }], tablesRef: [{
107
+ type: ViewChildren,
108
+ args: ['tablesRef', { read: ElementRef }]
109
+ }] } });
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1kZXNrLWZvcm0tbGF5b3V0LWNvbnRlbnQtbW9qYXZlei5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1kZXZlbG9wLWNvbXBvbmVudHMvc3JjL2xpYi9zZXJ2aWNlLWRlc2stZm9ybS1sYXlvdXQtY29udGVudC1tb2phdmV6L3NlcnZpY2UtZGVzay1mb3JtLWxheW91dC1jb250ZW50LW1vamF2ZXouY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZS1kZXNrLWZvcm0tbGF5b3V0LWNvbnRlbnQtbW9qYXZlei9zZXJ2aWNlLWRlc2stZm9ybS1sYXlvdXQtY29udGVudC1tb2phdmV6LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBRVosVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQVM3RixNQUFNLE9BQU8sNENBQTZDLFNBQVEsc0JBQXNCO0lBUHhGOztRQVdJLGtCQUFhLEdBQWlCLEVBQUUsQ0FBQztLQThGcEM7SUF2RkcsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixJQUFJLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFB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QVksRUFBRSxDQUFDO3dCQUMxQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLElBQUksQ0FBQztvQkFDbkQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksSUFBSSxDQUFDO29CQUNuRCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7K0dBakdRLDRDQUE0QzttR0FBNUMsNENBQTRDLCtQQUVsQixVQUFVLG9EQ3BCakQsZzVFQWdEQTs7NEZEOUJhLDRDQUE0QztrQkFQeEQsU0FBUzsrQkFDSSw4Q0FBOEMsbUJBR3ZDLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSzs4QkFHYSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDcUIsU0FBUztzQkFBekQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uSW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NoaWxkcmVuLFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgRWxlbWVudFJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXJzYUFwaSwgRm9ybVByb3BzQmFzZUNvbXBvbmVudCwgTWV0YW9iamVjdERhdGFNb2RlbCB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiZGMtc2VydmljZS1kZXNrLWZvcm0tbGF5b3V0LWNvbnRlbnQtbW9qYXZleicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VydmljZS1kZXNrLWZvcm0tbGF5b3V0LWNvbnRlbnQtbW9qYXZlei5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zZXJ2aWNlLWRlc2stZm9ybS1sYXlvdXQtY29udGVudC1tb2phdmV6LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlRGVza0Zvcm1MYXlvdXRDb250ZW50TW9qYXZlekNvbXBvbmVudCBleHRlbmRzIEZvcm1Qcm9wc0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZCgndGFiQ29udGFpbmVyUmVmJykgdGFiQ29udGFpbmVyUmVmOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZHJlbigndGFibGVzUmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHRhYmxlc1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICAgIGZpZWxkc0NhcHRpb246IEZpZWxkc0luZm9bXSA9IFtdO1xyXG4gICAgTW9qYXZlejogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xyXG5cclxuICAgIGZpcnN0QXJyYXk6IEZpZWxkc0luZm9bXTtcclxuICAgIHNlY29uZEFycmF5OiBGaWVsZHNJbmZvW107XHJcbiAgICBpc09kZDogYm9vbGVhbjtcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgICAgICBsZXQgZmllbGREaWN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkRGljdCkge1xyXG4gICAgICAgICAgICBmaWVsZERpY3QgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkRGljdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWVsZERpY3QpIHtcclxuICAgICAgICAgICAgZmllbGREaWN0LmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGREaWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5maWVsZERpY3Rba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtOiBGaWVsZHNJbmZvID0geyBjYXB0aW9uOiBrZXksIGZpZWxkTmFtZSwgdmFsdWU6ICcnIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tRmlsZWRVaSA9IHRoaXMuX2NvbnRyb2xVaVBpcGUudHJhbnNmb3JtKGtleSwgdGhpcy5sYXlvdXQ5NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMubW9bZmllbGROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFh0eXBlID0gY3VzdG9tRmlsZWRVaT8uRmllbGRVaT8ub3JpZ2luYWxYdHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAn2KLYr9ix2LMg2LPYp9uM2KonKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udHlwZSA9ICdMaW5rJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9bZmllbGROYW1lICsgJyRDYXB0aW9uJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50eXBlID0gJ0NhcHRpb24nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5tb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLnZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZS4kVHlwZSA9PT0gJ0NvbW1vbi5NZXRhT2JqZWN0TGlzdFdlYicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udHlwZSA9ICdNb0xpc3QnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmFsdWUuRXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnR5cGUgPSAnSW1hZ2UnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbmFsWHR5cGUgPT09ICdVaS5GaWxlTGluZWFyTGlzdEJveCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udHlwZSA9ICdGaWxlcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnR5cGUgPSAnUmVsYXRpb24nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICfYrtiv2YXYp9iqINmC2KfYqNmEINin2YbYrNin2YUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnR5cGUgPSAnTW9MaXN0Mic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZHNDYXB0aW9uLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWVsZHNDYXB0aW9uID0gdGhpcy5maWVsZHNDYXB0aW9uLmZpbHRlcihcclxuICAgICAgICAgICAgKGMpID0+IGMuY2FwdGlvbiAhPT0gJ9i52YbZiNin2YYg2YXYrNmI2LInICYmIGMuY2FwdGlvbiAhPT0gJ9mG2YLYtCDYp9i02K7Yp9i1INiv2LEg2YXYrNmI2LInICYmIGMuY2FwdGlvbiAhPT0gJ9mB2LHYstmG2K8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjb250cm9sQ291bnQgPSB0aGlzLmZpZWxkc0NhcHRpb24ubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xDb3VudE1pZGRsZSA9IE1hdGguY2VpbCh0aGlzLmZpZWxkc0NhcHRpb24ubGVuZ3RoIC8gMik7XHJcblxyXG4gICAgICAgIHRoaXMuZmlyc3RBcnJheSA9IHRoaXMuZmllbGRzQ2FwdGlvbi5zbGljZSgwLCBjb250cm9sQ291bnRNaWRkbGUpO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kQXJyYXkgPSB0aGlzLmZpZWxkc0NhcHRpb24uc2xpY2UoY29udHJvbENvdW50TWlkZGxlLCBjb250cm9sQ291bnQpO1xyXG5cclxuICAgICAgICB0aGlzLmlzT2RkID0gY29udHJvbENvdW50ICUgMiA9PT0gMDtcclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICB0aGlzLmFsaWduVGFibGVzVHIoKTtcclxuICAgIH1cclxuICAgIG9uTGluayhpdGVtKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW0uRjM0KSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGl0ZW0uRjQyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5Cdy5Nc2cuSW5mbygn2LPYp9mF2KfZhtmHINin24wg2KrYudix24zZgSDZhti02K/ZhyDYp9iz2KonKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Eb3dubG9hZChpdGVtKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkZpbGUuRG93bmxvYWRGaWxlSWQoaXRlbS5JZCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGFsaWduVGFibGVzVHIoKTogdm9pZCB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlc1JlZiA9IHRoaXMudGFibGVzUmVmLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RUYWJsZUVsID0gdGFibGVzUmVmWzBdLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZFRhYmxlRWwgPSB0YWJsZXNSZWZbMV0ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRyRmlyc3RUYWJsZSA9IGZpcnN0VGFibGVFbC5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xyXG4gICAgICAgICAgICBjb25zdCB0clNlY29uZFRhYmxlID0gc2Vjb25kVGFibGVFbC5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xyXG5cclxuICAgICAgICAgICAgdHJGaXJzdFRhYmxlLmZvckVhY2goKHRyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgdHJTZWNvbmRUYWJsZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0clNlY29uZCA9IHRyU2Vjb25kVGFibGVbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ci5vZmZzZXRIZWlnaHQgPiB0clNlY29uZC5vZmZzZXRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJTZWNvbmQuc3R5bGUuaGVpZ2h0ID0gYCR7dHIub2Zmc2V0SGVpZ2h0fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ci5zdHlsZS5oZWlnaHQgPSBgJHt0clNlY29uZC5vZmZzZXRIZWlnaHR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbn1cclxuaW50ZXJmYWNlIEZpZWxkc0luZm8ge1xyXG4gICAgdHlwZT86IHN0cmluZztcclxuICAgIGNhcHRpb246IHN0cmluZztcclxuICAgIGZpZWxkTmFtZTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IGFueTtcclxufVxyXG4iLCI8ZmQtbGF5b3V0LWdyaWQ+XHJcbiAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiNlwiIHN0eWxlPVwicGFkZGluZzogMFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXJUYWJsZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZpcnN0QXJyYXksIGNsYXNzTmFtZXM6ICdmaXJzdFRhYmxlJyB9XCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgW2ZkTGF5b3V0R3JpZENvbF09XCI2XCIgc3R5bGU9XCJwYWRkaW5nOiAwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlbmRlclRhYmxlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc2Vjb25kQXJyYXksIGNsYXNzTmFtZXM6ICdzZWNvbmRUYWJsZScgfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZmQtbGF5b3V0LWdyaWQ+XHJcblxyXG48bmctdGVtcGxhdGUgI3JlbmRlclRhYmxlIGxldC1hcnJheSBsZXQtY2xhc3NOYW1lcz1cImNsYXNzTmFtZXNcIj5cclxuICAgIDx0YWJsZSBmZC10YWJsZSAjdGFibGVzUmVmIGNsYXNzPVwidGFibGUtZ3JpZFwiIFtuZ0NsYXNzXT1cImNsYXNzTmFtZXNcIj5cclxuICAgICAgICBAZm9yIChjb250cm9sSXRlbSBvZiBhcnJheTsgdHJhY2sgY29udHJvbEl0ZW0pIHtcclxuICAgICAgICA8dHIgZmQtdGFibGUtcm93PlxyXG4gICAgICAgICAgICA8dGggZmQtdGFiZWwtY2VsbD57eyBjb250cm9sSXRlbS5jYXB0aW9uIH19PC90aD5cclxuICAgICAgICAgICAgPHRkIGZkLXRhYmVsLWNlbGw+XHJcbiAgICAgICAgICAgICAgICBAc3dpdGNoIChjb250cm9sSXRlbS50eXBlKSB7IEBjYXNlICgnTGluaycpIHtcclxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImNvbnRyb2xJdGVtLnZhbHVlXCI+e3sgY29udHJvbEl0ZW0udmFsdWUgfX08L2E+XHJcbiAgICAgICAgICAgICAgICB9IEBjYXNlICgnUmVsYXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB7eyBjb250cm9sSXRlbS52YWx1ZS4kQ2FwdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgfSBAY2FzZSAoJ01vTGlzdCcpIHsgQGZvciAoaXRlbSBvZiBjb250cm9sSXRlbS52YWx1ZS5Nb0RhdGFMaXN0OyB0cmFjayBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlua3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cImZkLWljb24tbGlua1wiIFtnbHlwaF09XCIncGRmLWF0dGFjaG1lbnQnXCI+PC9mZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvbkRvd25sb2FkKGl0ZW0pXCI+e3sgaXRlbS4kQ2FwdGlvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfSB9IEBjYXNlICgnTW9MaXN0MicpIHsgQGZvciAoaXRlbSBvZiBjb250cm9sSXRlbS52YWx1ZS5Nb0RhdGFMaXN0OyB0cmFjayBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlua3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cImZkLWljb24tbGlua1wiIFtnbHlwaF09XCInY2hhaW4tbGluaydcIj48L2ZkLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9uTGluayhpdGVtKVwiPnt7IGl0ZW0uJENhcHRpb24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH0gfSBAY2FzZSAoJ0NhcHRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB7eyBjb250cm9sSXRlbS52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgfSBAY2FzZSAoJ0ltYWdlJykge1xyXG4gICAgICAgICAgICAgICAge3sgY29udHJvbEl0ZW0udmFsdWUuRXh0IH19XHJcbiAgICAgICAgICAgICAgICB9IEBjYXNlICgnRmlsZXMnKSB7IEBmb3IgKGl0ZW0gb2YgY29udHJvbEl0ZW0udmFsdWUuRmlsZXM7IHRyYWNrIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGNsYXNzPVwiZmQtaWNvbi1saW5rXCIgW2dseXBoXT1cIidwZGYtYXR0YWNobWVudCdcIj48L2ZkLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9uRG93bmxvYWQoaXRlbSlcIj57eyBpdGVtLkZpbGVOYW1lIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9IH0gQGRlZmF1bHQge1xyXG4gICAgICAgICAgICAgICAge3sgY29udHJvbEl0ZW0udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgIH0gfVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgfVxyXG4gICAgPC90YWJsZT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -0,0 +1,238 @@
1
+ import { Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, ViewChild, ViewChildren, RendererStyleFlags2, Input } from '@angular/core';
2
+ import { takeUntil } from 'rxjs';
3
+ import { TabPanelComponent } from '@fundamental-ngx/core';
4
+ import { TilesViewerContainerComponent, TilesViewerService, TilesViewerGroupComponent } from 'barsa-tiles';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "barsa-novin-ray-core";
7
+ import * as i2 from "barsa-tiles";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "@angular/forms";
10
+ import * as i5 from "@fundamental-ngx/core/input-group";
11
+ import * as i6 from "@fundamental-ngx/core/tabs";
12
+ import * as i7 from "@fundamental-ngx/core/toolbar";
13
+ export class ServiceDeskHeaderComponent extends TilesViewerContainerComponent {
14
+ constructor(_portalService, _tilesService, _tilesViewerService, _renderer, _viewportScroller, _cdr) {
15
+ super(_portalService, _tilesService, _tilesViewerService);
16
+ this._portalService = _portalService;
17
+ this._tilesService = _tilesService;
18
+ this._tilesViewerService = _tilesViewerService;
19
+ this._renderer = _renderer;
20
+ this._viewportScroller = _viewportScroller;
21
+ this._cdr = _cdr;
22
+ this.selectedTabIndex = 0;
23
+ this.heightOfSpaceHolder = 88;
24
+ this.searchTerm = '';
25
+ this._enableScroll = false;
26
+ this._stickyTopPosition = 66;
27
+ this.observerList = [];
28
+ this.appGroups = [];
29
+ const root = document.documentElement;
30
+ root.style.setProperty('--absolute-page-top', this._stickyTopPosition + 'px');
31
+ }
32
+ ngOnInit() {
33
+ super.ngOnInit();
34
+ this._portalService.searchTerm$.pipe(takeUntil(this._onDestroy$)).subscribe((term) => {
35
+ this.searchTerm = term;
36
+ this._cdr.detectChanges();
37
+ });
38
+ this.appTileGroups$.subscribe((appTileGroups) => {
39
+ appTileGroups.forEach((c) => this._tilesViewerService.loadAppGroup(c));
40
+ this.appGroups = appTileGroups;
41
+ });
42
+ this._renderer.setStyle(this.navHolder.nativeElement, 'top', this._stickyTopPosition + 'px');
43
+ this.setGridTemplateRows(this.heightOfSpaceHolder);
44
+ this.deviceSize$ = this._portalService.deviceSize$;
45
+ this._portalService.deviceSize$.subscribe((c) => {
46
+ let newHeight = this.heightOfSpaceHolder;
47
+ this.tabSize = c;
48
+ if (c === 's') {
49
+ newHeight = 88;
50
+ }
51
+ else if (c === 'm') {
52
+ newHeight = 220;
53
+ }
54
+ else if (c === 'l') {
55
+ newHeight = 250;
56
+ }
57
+ else {
58
+ newHeight = 325;
59
+ }
60
+ newHeight = 88;
61
+ if (this.heightOfSpaceHolder !== newHeight) {
62
+ this.heightOfSpaceHolder = newHeight;
63
+ this.setGridTemplateRows(newHeight);
64
+ }
65
+ });
66
+ }
67
+ ngAfterViewInit() {
68
+ const deviceSize = this._portalService.deviceSize;
69
+ let stickyTopPosition = 20;
70
+ if (deviceSize === 's') {
71
+ stickyTopPosition = 60;
72
+ }
73
+ this._stickyDom(this.aboveSearch.nativeElement, this.searchHolder.nativeElement, -stickyTopPosition, 'sticky');
74
+ this._stickyDom(this.aboveContent.nativeElement, this.navHolder.nativeElement, -this._stickyTopPosition, 'sticky');
75
+ this._stickyDom(this.aboveContent.nativeElement, this.bgOuterHolder.nativeElement, -this._stickyTopPosition, 'sticky', () => {
76
+ this._renderer.setStyle(this.bgOuterHolder.nativeElement, 'height', this._stickyTopPosition + 'px');
77
+ }, () => {
78
+ this._renderer.setStyle(this.bgOuterHolder.nativeElement, 'height', '100%');
79
+ });
80
+ this._stickyDom(this.aboveSearch.nativeElement, this.contentAndNav.nativeElement, -stickyTopPosition, 'navAndContent_tb', () => {
81
+ this._renderer.removeAttribute(this.contentAndNav.nativeElement, 'first');
82
+ }, () => {
83
+ this._renderer.setAttribute(this.contentAndNav.nativeElement, 'first', 'true');
84
+ });
85
+ setTimeout(() => {
86
+ this._enableScroll = true;
87
+ }, 1000);
88
+ this._portalService.navigationStart$.pipe(takeUntil(this._onDestroy$)).subscribe((event) => {
89
+ this._lastScrollPos = window.scrollY;
90
+ if (event === null) {
91
+ return;
92
+ }
93
+ if (event?.url !== '/servicedesk' && event?.url !== '/' && !this._disableIntersection) {
94
+ this.prepareForm();
95
+ }
96
+ });
97
+ this._portalService.navigationEnd$.pipe(takeUntil(this._onDestroy$)).subscribe((event) => {
98
+ if (event !== null &&
99
+ (event?.url === '/servicedesk' || event?.url === '/' || event.urlAfterRedirects === '/servicedesk')) {
100
+ this.unPrepareForm();
101
+ }
102
+ });
103
+ }
104
+ onSearchSubmit() {
105
+ this._router.navigateByUrl('servicedesk/search?term=' + this.searchTerm);
106
+ // var searchMo = BarsaApi.Bw.RunBlMethod('GetSearchMo', this.searchTerm);
107
+ // BarsaApi.Bw.Form.Show({ Mo: searchMo });
108
+ }
109
+ prepareForm() {
110
+ this._disableIntersection = true;
111
+ this._cdr.detach();
112
+ this.disconnectIntersctionObserverList();
113
+ this._renderer.addClass(this.searchHolder.nativeElement, 'sticky');
114
+ this._renderer.addClass(this.contentAndNav.nativeElement, 'hide');
115
+ this.visibleContent(false);
116
+ const flags = RendererStyleFlags2.Important;
117
+ this._renderer.setStyle(document.body, 'overflow', 'hidden', flags);
118
+ this.scrollToTop();
119
+ }
120
+ unPrepareForm() {
121
+ // this.setHeightSearchHolder(this.heightOfSpaceHolder);
122
+ this.visibleContent(true);
123
+ // this._renderer.removeClass(this.searchHolder.nativeElement, 'sticky');
124
+ this._renderer.removeClass(this.searchHolder.nativeElement, 'hide');
125
+ this._renderer.removeClass(this.contentAndNav.nativeElement, 'hide');
126
+ const flags = RendererStyleFlags2.Important;
127
+ this._renderer.setStyle(document.body, 'overflow', 'auto', flags);
128
+ this.scrollToTop();
129
+ this._cdr.markForCheck();
130
+ this._cdr.reattach();
131
+ this._disableIntersection = false;
132
+ this.connectIntersctionObserverList();
133
+ }
134
+ setHeightSearchHolder(height) {
135
+ this._renderer.setStyle(this.headerSpaceHolder.nativeElement, 'height', `${height}px`);
136
+ }
137
+ visibleContent(visible) {
138
+ this._renderer.setStyle(this.contentAndNav.nativeElement, 'display', visible ? 'flex' : 'none');
139
+ }
140
+ setGridTemplateRows(height) {
141
+ this._renderer.setStyle(this.headerGrid.nativeElement, 'grid-template-rows', `minmax(78px, 15%) 46px 32px 1fr auto 12%; height:${height}px`);
142
+ // this._renderer.setStyle(this.headerGrid.nativeElement, 'background-color', `red`);
143
+ this._renderer.setStyle(this.headerSpaceHolder.nativeElement, 'height', `${height}px`);
144
+ }
145
+ onSelectedTabChange3(selectedTab) {
146
+ const tablistCmp = selectedTab._tabsComponent;
147
+ if (tablistCmp) {
148
+ tablistCmp._disableScrollSpy = true;
149
+ }
150
+ this.scrollToTop();
151
+ if (selectedTab.id === '0') {
152
+ return;
153
+ }
154
+ const elementRefOfselectedTileGroup = this.tilesViewerGroupElList.get(Number(selectedTab.id))?.nativeElement;
155
+ elementRefOfselectedTileGroup.scrollIntoView({
156
+ block: 'start'
157
+ });
158
+ }
159
+ scrollToLastPos() {
160
+ this._viewportScroller.scrollToPosition([0, this._lastScrollPos]);
161
+ }
162
+ scrollToTop() {
163
+ if (this._enableScroll) {
164
+ this._viewportScroller.scrollToPosition([0, this.heightOfSpaceHolder - this._stickyTopPosition]);
165
+ }
166
+ }
167
+ disconnectIntersctionObserverList() {
168
+ this.observerList.forEach((c) => c.observer.disconnect());
169
+ }
170
+ connectIntersctionObserverList() {
171
+ this.observerList.forEach((c) => c.observer.observe(c.el));
172
+ }
173
+ _stickyDom(above, holder, marginTop, className, visibleCallback, hiddenCallBack) {
174
+ const handler = (entries) => {
175
+ if (this._disableIntersection) {
176
+ return;
177
+ }
178
+ if (!entries[0].isIntersecting) {
179
+ this._renderer.addClass(holder, className);
180
+ if (typeof visibleCallback === 'function') {
181
+ visibleCallback();
182
+ }
183
+ }
184
+ else {
185
+ this._renderer.removeClass(holder, className);
186
+ if (typeof hiddenCallBack === 'function') {
187
+ hiddenCallBack();
188
+ }
189
+ }
190
+ };
191
+ const options = {
192
+ rootMargin: `${marginTop}px 0px 0px 0px`,
193
+ threshold: 0.1
194
+ };
195
+ const observer = new window.IntersectionObserver(handler, options);
196
+ observer.observe(above);
197
+ this.observerList.push({ el: above, observer });
198
+ }
199
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceDeskHeaderComponent, deps: [{ token: i1.PortalService }, { token: i2.TilesService }, { token: i2.TilesViewerService }, { token: i0.Renderer2 }, { token: i3.ViewportScroller }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ServiceDeskHeaderComponent, selector: "bdc-service-desk-header", inputs: { settings: "settings" }, providers: [TilesViewerService], viewQueries: [{ propertyName: "headerSpaceHolder", first: true, predicate: ["headerSpaceHolder"], descendants: true, static: true }, { propertyName: "headerGrid", first: true, predicate: ["headerGrid"], descendants: true, static: true }, { propertyName: "aboveSearch", first: true, predicate: ["aboveSearch"], descendants: true, static: true }, { propertyName: "searchHolder", first: true, predicate: ["searchHolder"], descendants: true, static: true }, { propertyName: "navHolder", first: true, predicate: ["navHolder"], descendants: true, static: true }, { propertyName: "aboveContent", first: true, predicate: ["aboveContent"], descendants: true, static: true }, { propertyName: "bgOuterHolder", first: true, predicate: ["bgOuterHolder"], descendants: true, static: true }, { propertyName: "contentAndNav", first: true, predicate: ["contentAndNav"], descendants: true, static: true }, { propertyName: "tilesViewerGroupElList", predicate: TilesViewerGroupComponent, descendants: true, read: ElementRef }, { propertyName: "tabPanelComponents", predicate: TabPanelComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div id=\"headerGrid\" style=\"grid-template-rows: minmax(1px, 15%) 48px 32px 1fr auto 12%; height: 148px\" #headerGrid>\r\n <div class=\"companyLogoHolder_aboveSearch\" #aboveSearch></div>\r\n <div id=\"searchHolder\" style=\"grid-row: 2\" #searchHolder>\r\n <fd-input-group\r\n [style.display]=\"settings?.HideSearch ? 'none' : null\"\r\n class=\"input-search\"\r\n contentDensity=\"cozy\"\r\n fd-toolbar-item\r\n type=\"search\"\r\n glyph=\"search\"\r\n [glyphAriaLabel]=\"'Search' | bbbTranslate\"\r\n [placeholder]=\"'Search' | bbbTranslate\"\r\n [button]=\"true\"\r\n [disabled]=\"false\"\r\n [(ngModel)]=\"searchTerm\"\r\n (addOnButtonClicked)=\"onSearchSubmit()\"\r\n >\r\n </fd-input-group>\r\n </div>\r\n</div>\r\n<div id=\"headerSpaceHolder\" #headerSpaceHolder>\r\n <div id=\"bgOuterHolder\" #bgOuterHolder>\r\n <div id=\"bgInnerHolder\" style=\"height: 100vh\">\r\n <div class=\"backgroundImage\" id=\"backgroundImage\">\r\n <img class=\"picture\" src=\"/assets/back.jpg\" loading=\"lazy\" />\r\n <span id=\"backgroundImageOverlay\" class=\"overlay\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div id=\"contentHolderAndNav\" first=\"true\" #contentAndNav fillEmptySpace [setMinHeight]=\"true\">\r\n <div class=\"aboveContent\" #aboveContent></div>\r\n <div id=\"contentHolder\">\r\n <div class=\"nav\" #navHolder>\r\n <div class=\"nav-container\">\r\n <ng-container\r\n *ngTemplateOutlet=\"renderTabs; context: { $implicit: (appTileGroups$ | async)!! }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"nav_surrogate\" style=\"height: 10px\"></div>\r\n <div class=\"content-feed\">\r\n <ng-container\r\n *ngTemplateOutlet=\"renderGroups; context: { $implicit: (appTileGroups$ | async)!! }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #renderTabs let-appTileGroups>\r\n <fd-tab-list\r\n [size]=\"tabSize\"\r\n [collapseOverflow]=\"tabSize === 's' || appTileGroups.length > 5\"\r\n [expandOverflowText]=\"'More' | bbbTranslate\"\r\n (selectedTabChange)=\"onSelectedTabChange3($event)\"\r\n >\r\n @for (appTileGroup of appTileGroups; track appTileGroup; let i = $index) {\r\n <fd-tab [id]=\"'' + i\" [title]=\"appTileGroup.navigatorTitle\"> </fd-tab>\r\n }\r\n </fd-tab-list>\r\n</ng-template>\r\n<ng-template #renderGroups let-appTileGroups>\r\n @for (appTileGroup of appTileGroups; track appTileGroup; let i = $index) {\r\n <bt-tiles-viewer-group\r\n [class]=\"deviceSize$ | async\"\r\n [attr.index]=\"i\"\r\n [appTileGroup]=\"appTileGroup\"\r\n [edit]=\"false\"\r\n [stackContent]=\"true\"\r\n [isAppTileSubGroup]=\"false\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n ></bt-tiles-viewer-group>\r\n }\r\n</ng-template>\r\n", styles: ["html{scroll-behavior:smooth}body{overflow-y:auto!important;overflow-x:hidden!important}bt-shellbar{position:fixed!important;top:10px;width:100%;z-index:6}bt-shellbar .fd-shellbar{background:transparent;box-shadow:none}bt-shellbar .fd-shellbar__product{display:none}bt-shellbar button{background-color:transparent}bdc-service-desk-header{display:block}bdc-service-desk-header #headerGrid{display:grid;justify-items:center;position:absolute;top:0;width:100%}bdc-service-desk-header #headerSpaceHolder{transition:height .3s ease-out 0s;width:100%}bdc-service-desk-header #searchHolder{z-index:302}bdc-service-desk-header #searchHolder.sticky{position:fixed;top:15px;will-change:transform}bdc-service-desk-header #contentHolderAndNav{align-items:center;background:#00000051;display:flex;flex-direction:column;position:relative;transition:background-color .3s ease-out 0s}bdc-service-desk-header #contentHolderAndNav fd-tab-list{background-color:transparent!important;transition:background-color .3s ease-out 0s}bdc-service-desk-header #contentHolderAndNav fd-tab-list fd-tab,bdc-service-desk-header #contentHolderAndNav fd-tab-list .fd-tabs{background-color:transparent!important;box-shadow:none!important;transition:background-color .3s ease-out 0s}bdc-service-desk-header #contentHolderAndNav[first=true] span.fd-tabs__tag{color:#fff!important}bdc-service-desk-header #contentHolderAndNav[first=true] .fd-tabs__link.is-selected>span.fd-tabs__tag:after{background-color:#fff!important}bdc-service-desk-header #contentHolderAndNav[first=true] .fd-layout-panel__head .fd-title{color:#fff!important}bdc-service-desk-header #contentHolderAndNav.navAndContent_tb{background:#f7f7f7}bdc-service-desk-header #contentHolder{align-items:center;display:flex;flex-direction:column}bdc-service-desk-header .nav-container{align-items:center;display:flex;gap:5px;width:100%}bdc-service-desk-header .nav-container fd-tab-list{width:100%}bdc-service-desk-header .nav_surrogate{height:1px}bdc-service-desk-header .nav{display:flex;height:50px;justify-content:center;z-index:500;width:100%}bdc-service-desk-header .nav ul{height:auto;overflow:hidden;list-style:none;padding-inline:0px 15px;margin:0;display:inline-flex;align-items:center}bdc-service-desk-header .nav ul li{display:inline;list-style:none;padding:0 16px;color:#fff}bdc-service-desk-header .nav.sticky{background:#f7f7f7;position:fixed;will-change:transform}bt-tiles-viewer-group:first-child fd-layout-panel-header{display:none!important}bt-tiles-viewer-group:first-child .fd-panel__content{border-bottom:none}.content-feed{padding:0}.input-search{display:block}@media (max-width: 480px){.nav-container,.content-feed{width:100%}.nav-container .fd-tabs,.content-feed .fd-tabs{padding:0}#searchHolder.sticky{display:none}#searchHolder .input-search{width:250px}}@media (min-width: 481px) and (max-width: 935px){#searchHolder .input-search{width:360px}}@media (min-width: 936px) and (max-width: 1250px){#searchHolder .input-search{width:480px}}@media (min-width: 1251px){#searchHolder .input-search{width:690px}}@media (max-width: 1180){div#searchHolder.sticky .input-search{width:280px!important}}@media (min-width: 480px) and (max-width: 935px){.nav-container,.content-feed{width:860px}}@media (min-width: 1244px){.nav-container,.content-feed{width:1250px}#searchHolder.sticky .input-search{width:690px}}\n"], dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight"], exportAs: ["fillEmptySpace"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.TilesViewerGroupComponent, selector: "bt-tiles-viewer-group", inputs: ["appTileGroup", "stackContent", "edit", "rtl", "isAppTileSubGroup", "deviceSize"], outputs: ["tilesDropped", "hideAppTileClick", "renameAppTileClick", "toggleGroup", "resetGroup", "deleteGroup"] }, { kind: "component", type: i5.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i6.TabListComponent, selector: "fd-tab-list", inputs: ["size", "mode", "collapseOverflow", "maxVisibleTabs", "stackContent", "maxContentHeight", "collapsibleTabs", "defaultTab", "selectDefaultOnTabsChange", "focusFirstFocusableElement"], outputs: ["selectedTabChange", "selectedTabIndexChange", "visibleItemsCount", "hiddenItemsCount"] }, { kind: "component", type: i6.TabPanelComponent, selector: "fd-tab", inputs: ["id", "ariaLabel", "ariaLabelledBy", "title", "count", "glyph", "header", "disabled", "tabState"], outputs: ["opened", "closed"] }, { kind: "directive", type: i7.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
201
+ }
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceDeskHeaderComponent, decorators: [{
203
+ type: Component,
204
+ args: [{ selector: 'bdc-service-desk-header', providers: [TilesViewerService], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: false, template: "<div id=\"headerGrid\" style=\"grid-template-rows: minmax(1px, 15%) 48px 32px 1fr auto 12%; height: 148px\" #headerGrid>\r\n <div class=\"companyLogoHolder_aboveSearch\" #aboveSearch></div>\r\n <div id=\"searchHolder\" style=\"grid-row: 2\" #searchHolder>\r\n <fd-input-group\r\n [style.display]=\"settings?.HideSearch ? 'none' : null\"\r\n class=\"input-search\"\r\n contentDensity=\"cozy\"\r\n fd-toolbar-item\r\n type=\"search\"\r\n glyph=\"search\"\r\n [glyphAriaLabel]=\"'Search' | bbbTranslate\"\r\n [placeholder]=\"'Search' | bbbTranslate\"\r\n [button]=\"true\"\r\n [disabled]=\"false\"\r\n [(ngModel)]=\"searchTerm\"\r\n (addOnButtonClicked)=\"onSearchSubmit()\"\r\n >\r\n </fd-input-group>\r\n </div>\r\n</div>\r\n<div id=\"headerSpaceHolder\" #headerSpaceHolder>\r\n <div id=\"bgOuterHolder\" #bgOuterHolder>\r\n <div id=\"bgInnerHolder\" style=\"height: 100vh\">\r\n <div class=\"backgroundImage\" id=\"backgroundImage\">\r\n <img class=\"picture\" src=\"/assets/back.jpg\" loading=\"lazy\" />\r\n <span id=\"backgroundImageOverlay\" class=\"overlay\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div id=\"contentHolderAndNav\" first=\"true\" #contentAndNav fillEmptySpace [setMinHeight]=\"true\">\r\n <div class=\"aboveContent\" #aboveContent></div>\r\n <div id=\"contentHolder\">\r\n <div class=\"nav\" #navHolder>\r\n <div class=\"nav-container\">\r\n <ng-container\r\n *ngTemplateOutlet=\"renderTabs; context: { $implicit: (appTileGroups$ | async)!! }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"nav_surrogate\" style=\"height: 10px\"></div>\r\n <div class=\"content-feed\">\r\n <ng-container\r\n *ngTemplateOutlet=\"renderGroups; context: { $implicit: (appTileGroups$ | async)!! }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #renderTabs let-appTileGroups>\r\n <fd-tab-list\r\n [size]=\"tabSize\"\r\n [collapseOverflow]=\"tabSize === 's' || appTileGroups.length > 5\"\r\n [expandOverflowText]=\"'More' | bbbTranslate\"\r\n (selectedTabChange)=\"onSelectedTabChange3($event)\"\r\n >\r\n @for (appTileGroup of appTileGroups; track appTileGroup; let i = $index) {\r\n <fd-tab [id]=\"'' + i\" [title]=\"appTileGroup.navigatorTitle\"> </fd-tab>\r\n }\r\n </fd-tab-list>\r\n</ng-template>\r\n<ng-template #renderGroups let-appTileGroups>\r\n @for (appTileGroup of appTileGroups; track appTileGroup; let i = $index) {\r\n <bt-tiles-viewer-group\r\n [class]=\"deviceSize$ | async\"\r\n [attr.index]=\"i\"\r\n [appTileGroup]=\"appTileGroup\"\r\n [edit]=\"false\"\r\n [stackContent]=\"true\"\r\n [isAppTileSubGroup]=\"false\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n ></bt-tiles-viewer-group>\r\n }\r\n</ng-template>\r\n", styles: ["html{scroll-behavior:smooth}body{overflow-y:auto!important;overflow-x:hidden!important}bt-shellbar{position:fixed!important;top:10px;width:100%;z-index:6}bt-shellbar .fd-shellbar{background:transparent;box-shadow:none}bt-shellbar .fd-shellbar__product{display:none}bt-shellbar button{background-color:transparent}bdc-service-desk-header{display:block}bdc-service-desk-header #headerGrid{display:grid;justify-items:center;position:absolute;top:0;width:100%}bdc-service-desk-header #headerSpaceHolder{transition:height .3s ease-out 0s;width:100%}bdc-service-desk-header #searchHolder{z-index:302}bdc-service-desk-header #searchHolder.sticky{position:fixed;top:15px;will-change:transform}bdc-service-desk-header #contentHolderAndNav{align-items:center;background:#00000051;display:flex;flex-direction:column;position:relative;transition:background-color .3s ease-out 0s}bdc-service-desk-header #contentHolderAndNav fd-tab-list{background-color:transparent!important;transition:background-color .3s ease-out 0s}bdc-service-desk-header #contentHolderAndNav fd-tab-list fd-tab,bdc-service-desk-header #contentHolderAndNav fd-tab-list .fd-tabs{background-color:transparent!important;box-shadow:none!important;transition:background-color .3s ease-out 0s}bdc-service-desk-header #contentHolderAndNav[first=true] span.fd-tabs__tag{color:#fff!important}bdc-service-desk-header #contentHolderAndNav[first=true] .fd-tabs__link.is-selected>span.fd-tabs__tag:after{background-color:#fff!important}bdc-service-desk-header #contentHolderAndNav[first=true] .fd-layout-panel__head .fd-title{color:#fff!important}bdc-service-desk-header #contentHolderAndNav.navAndContent_tb{background:#f7f7f7}bdc-service-desk-header #contentHolder{align-items:center;display:flex;flex-direction:column}bdc-service-desk-header .nav-container{align-items:center;display:flex;gap:5px;width:100%}bdc-service-desk-header .nav-container fd-tab-list{width:100%}bdc-service-desk-header .nav_surrogate{height:1px}bdc-service-desk-header .nav{display:flex;height:50px;justify-content:center;z-index:500;width:100%}bdc-service-desk-header .nav ul{height:auto;overflow:hidden;list-style:none;padding-inline:0px 15px;margin:0;display:inline-flex;align-items:center}bdc-service-desk-header .nav ul li{display:inline;list-style:none;padding:0 16px;color:#fff}bdc-service-desk-header .nav.sticky{background:#f7f7f7;position:fixed;will-change:transform}bt-tiles-viewer-group:first-child fd-layout-panel-header{display:none!important}bt-tiles-viewer-group:first-child .fd-panel__content{border-bottom:none}.content-feed{padding:0}.input-search{display:block}@media (max-width: 480px){.nav-container,.content-feed{width:100%}.nav-container .fd-tabs,.content-feed .fd-tabs{padding:0}#searchHolder.sticky{display:none}#searchHolder .input-search{width:250px}}@media (min-width: 481px) and (max-width: 935px){#searchHolder .input-search{width:360px}}@media (min-width: 936px) and (max-width: 1250px){#searchHolder .input-search{width:480px}}@media (min-width: 1251px){#searchHolder .input-search{width:690px}}@media (max-width: 1180){div#searchHolder.sticky .input-search{width:280px!important}}@media (min-width: 480px) and (max-width: 935px){.nav-container,.content-feed{width:860px}}@media (min-width: 1244px){.nav-container,.content-feed{width:1250px}#searchHolder.sticky .input-search{width:690px}}\n"] }]
205
+ }], ctorParameters: () => [{ type: i1.PortalService }, { type: i2.TilesService }, { type: i2.TilesViewerService }, { type: i0.Renderer2 }, { type: i3.ViewportScroller }, { type: i0.ChangeDetectorRef }], propDecorators: { headerSpaceHolder: [{
206
+ type: ViewChild,
207
+ args: ['headerSpaceHolder', { static: true }]
208
+ }], headerGrid: [{
209
+ type: ViewChild,
210
+ args: ['headerGrid', { static: true }]
211
+ }], aboveSearch: [{
212
+ type: ViewChild,
213
+ args: ['aboveSearch', { static: true }]
214
+ }], searchHolder: [{
215
+ type: ViewChild,
216
+ args: ['searchHolder', { static: true }]
217
+ }], navHolder: [{
218
+ type: ViewChild,
219
+ args: ['navHolder', { static: true }]
220
+ }], aboveContent: [{
221
+ type: ViewChild,
222
+ args: ['aboveContent', { static: true }]
223
+ }], bgOuterHolder: [{
224
+ type: ViewChild,
225
+ args: ['bgOuterHolder', { static: true }]
226
+ }], contentAndNav: [{
227
+ type: ViewChild,
228
+ args: ['contentAndNav', { static: true }]
229
+ }], tilesViewerGroupElList: [{
230
+ type: ViewChildren,
231
+ args: [TilesViewerGroupComponent, { read: ElementRef }]
232
+ }], tabPanelComponents: [{
233
+ type: ViewChildren,
234
+ args: [TabPanelComponent]
235
+ }], settings: [{
236
+ type: Input
237
+ }] } });
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1kZXNrLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1kZXZlbG9wLWNvbXBvbmVudHMvc3JjL2xpYi9zZXJ2aWNlLWRlc2staGVhZGVyL3NlcnZpY2UtZGVzay1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZS1kZXNrLWhlYWRlci9zZXJ2aWNlLWRlc2staGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUVqQixVQUFVLEVBQ1YsU0FBUyxFQUVULFlBQVksRUFHWixtQkFBbUIsRUFDbkIsS0FBSyxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFZLE1BQU0sdUJBQXVCLENBQUM7QUFFcEUsT0FBTyxFQUNILDZCQUE2QixFQUM3QixrQkFBa0IsRUFFbEIseUJBQXlCLEVBQzVCLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7QUFXckIsTUFBTSxPQUFPLDBCQUEyQixTQUFRLDZCQUE2QjtJQTRCekUsWUFDYyxjQUE2QixFQUM3QixhQUEyQixFQUMzQixtQkFBdUMsRUFDdkMsU0FBb0IsRUFDdEIsaUJBQW1DLEVBQ25DLElBQXVCO1FBRS9CLEtBQUssQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFQaEQsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3RC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bmVudCxcclxuICAgIE9uSW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIFJlbmRlcmVyMixcclxuICAgIFZpZXdDaGlsZHJlbixcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgUmVuZGVyZXJTdHlsZUZsYWdzMixcclxuICAgIElucHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZpZXdwb3J0U2Nyb2xsZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVGFiUGFuZWxDb21wb25lbnQsIFRhYlNpemVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcclxuaW1wb3J0IHsgTWV0YW9iamVjdERhdGFNb2RlbCwgUG9ydGFsU2VydmljZSwgQWJicmV2YXRpb25EZXZpY2VTaXplIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgVGlsZXNWaWV3ZXJDb250YWluZXJDb21wb25lbnQsXHJcbiAgICBUaWxlc1ZpZXdlclNlcnZpY2UsXHJcbiAgICBUaWxlc1NlcnZpY2UsXHJcbiAgICBUaWxlc1ZpZXdlckdyb3VwQ29tcG9uZW50XHJcbn0gZnJvbSAnYmFyc2EtdGlsZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1zZXJ2aWNlLWRlc2staGVhZGVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZXJ2aWNlLWRlc2staGVhZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NlcnZpY2UtZGVzay1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1RpbGVzVmlld2VyU2VydmljZV0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VydmljZURlc2tIZWFkZXJDb21wb25lbnQgZXh0ZW5kcyBUaWxlc1ZpZXdlckNvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdoZWFkZXJTcGFjZUhvbGRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGhlYWRlclNwYWNlSG9sZGVyOiBFbGVtZW50UmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkKCdoZWFkZXJHcmlkJywgeyBzdGF0aWM6IHRydWUgfSkgaGVhZGVyR3JpZDogRWxlbWVudFJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnYWJvdmVTZWFyY2gnLCB7IHN0YXRpYzogdHJ1ZSB9KSBhYm92ZVNlYXJjaDogRWxlbWVudFJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoSG9sZGVyJywgeyBzdGF0aWM6IHRydWUgfSkgc2VhcmNoSG9sZGVyOiBFbGVtZW50UmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkKCduYXZIb2xkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBuYXZIb2xkZXI6IEVsZW1lbnRSZWY8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ2Fib3ZlQ29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pIGFib3ZlQ29udGVudDogRWxlbWVudFJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnYmdPdXRlckhvbGRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGJnT3V0ZXJIb2xkZXI6IEVsZW1lbnRSZWY8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnRBbmROYXYnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50QW5kTmF2OiBFbGVtZW50UmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkcmVuKFRpbGVzVmlld2VyR3JvdXBDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSB0aWxlc1ZpZXdlckdyb3VwRWxMaXN0OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgICAvLyBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhZ2UtY29udGVudCcpIHBhZ2VDb250ZW50Q2xhc3MgPSB0cnVlO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oVGFiUGFuZWxDb21wb25lbnQpIHRhYlBhbmVsQ29tcG9uZW50czogUXVlcnlMaXN0PFRhYlBhbmVsQ29tcG9uZW50PjtcclxuICAgIEBJbnB1dCgpIHNldHRpbmdzOiBTZXJ2aWNlRGVza0hlYWRlclNldHRpbmc7XHJcbiAgICBzZWxlY3RlZFRhYkluZGV4ID0gMDtcclxuICAgIGhlaWdodE9mU3BhY2VIb2xkZXIgPSA4ODtcclxuICAgIHRhYlNpemU6IFRhYlNpemVzO1xyXG4gICAgc2VhcmNoVGVybSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIHNlYXJjaFRlcm0gPSAnJztcclxuICAgIGRldmljZVNpemUkOiBPYnNlcnZhYmxlPEFiYnJldmF0aW9uRGV2aWNlU2l6ZT47XHJcbiAgICBwcml2YXRlIF9lbmFibGVTY3JvbGwgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2Rpc2FibGVJbnRlcnNlY3Rpb246IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9pc0Zvcm1PcGVuZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9zdGlja3lUb3BQb3NpdGlvbiA9IDY2O1xyXG4gICAgcHJpdmF0ZSBvYnNlcnZlckxpc3Q6IHsgZWw6IGFueTsgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIH1bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfbGFzdFNjcm9sbFBvczogbnVtYmVyO1xyXG4gICAgYXBwR3JvdXBzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3RpbGVzU2VydmljZTogVGlsZXNTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfdGlsZXNWaWV3ZXJTZXJ2aWNlOiBUaWxlc1ZpZXdlclNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgX3ZpZXdwb3J0U2Nyb2xsZXI6IFZpZXdwb3J0U2Nyb2xsZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX3BvcnRhbFNlcnZpY2UsIF90aWxlc1NlcnZpY2UsIF90aWxlc1ZpZXdlclNlcnZpY2UpO1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hYnNvbHV0ZS1wYWdlLXRvcCcsIHRoaXMuX3N0aWNreVRvcFBvc2l0aW9uICsgJ3B4Jyk7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2Uuc2VhcmNoVGVybSQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgodGVybSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSB0ZXJtO1xyXG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYXBwVGlsZUdyb3VwcyQuc3Vic2NyaWJlKChhcHBUaWxlR3JvdXBzKSA9PiB7XHJcbiAgICAgICAgICAgIGFwcFRpbGVHcm91cHMuZm9yRWFjaCgoYykgPT4gdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLmxvYWRBcHBHcm91cChjKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwR3JvdXBzID0gYXBwVGlsZUdyb3VwcztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm5hdkhvbGRlci5uYXRpdmVFbGVtZW50LCAndG9wJywgdGhpcy5fc3RpY2t5VG9wUG9zaXRpb24gKyAncHgnKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRHcmlkVGVtcGxhdGVSb3dzKHRoaXMuaGVpZ2h0T2ZTcGFjZUhvbGRlcik7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VTaXplJCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UuZGV2aWNlU2l6ZSQ7XHJcbiAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZS5kZXZpY2VTaXplJC5zdWJzY3JpYmUoKGMpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0hlaWdodCA9IHRoaXMuaGVpZ2h0T2ZTcGFjZUhvbGRlcjtcclxuICAgICAgICAgICAgdGhpcy50YWJTaXplID0gYztcclxuICAgICAgICAgICAgaWYgKGMgPT09ICdzJykge1xyXG4gICAgICAgICAgICAgICAgbmV3SGVpZ2h0ID0gODg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ20nKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdIZWlnaHQgPSAyMjA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2wnKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdIZWlnaHQgPSAyNTA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdIZWlnaHQgPSAzMjU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV3SGVpZ2h0ID0gODg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhlaWdodE9mU3BhY2VIb2xkZXIgIT09IG5ld0hlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHRPZlNwYWNlSG9sZGVyID0gbmV3SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHcmlkVGVtcGxhdGVSb3dzKG5ld0hlaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkZXZpY2VTaXplID0gdGhpcy5fcG9ydGFsU2VydmljZS5kZXZpY2VTaXplO1xyXG4gICAgICAgIGxldCBzdGlja3lUb3BQb3NpdGlvbiA9IDIwO1xyXG4gICAgICAgIGlmIChkZXZpY2VTaXplID09PSAncycpIHtcclxuICAgICAgICAgICAgc3RpY2t5VG9wUG9zaXRpb24gPSA2MDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc3RpY2t5RG9tKHRoaXMuYWJvdmVTZWFyY2gubmF0aXZlRWxlbWVudCwgdGhpcy5zZWFyY2hIb2xkZXIubmF0aXZlRWxlbWVudCwgLXN0aWNreVRvcFBvc2l0aW9uLCAnc3RpY2t5Jyk7XHJcbiAgICAgICAgdGhpcy5fc3RpY2t5RG9tKFxyXG4gICAgICAgICAgICB0aGlzLmFib3ZlQ29udGVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICB0aGlzLm5hdkhvbGRlci5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAtdGhpcy5fc3RpY2t5VG9wUG9zaXRpb24sXHJcbiAgICAgICAgICAgICdzdGlja3knXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9zdGlja3lEb20oXHJcbiAgICAgICAgICAgIHRoaXMuYWJvdmVDb250ZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuYmdPdXRlckhvbGRlci5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAtdGhpcy5fc3RpY2t5VG9wUG9zaXRpb24sXHJcbiAgICAgICAgICAgICdzdGlja3knLFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmJnT3V0ZXJIb2xkZXIubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIHRoaXMuX3N0aWNreVRvcFBvc2l0aW9uICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuYmdPdXRlckhvbGRlci5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0JywgJzEwMCUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fc3RpY2t5RG9tKFxyXG4gICAgICAgICAgICB0aGlzLmFib3ZlU2VhcmNoLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudEFuZE5hdi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAtc3RpY2t5VG9wUG9zaXRpb24sXHJcbiAgICAgICAgICAgICduYXZBbmRDb250ZW50X3RiJyxcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuY29udGVudEFuZE5hdi5uYXRpdmVFbGVtZW50LCAnZmlyc3QnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuY29udGVudEFuZE5hdi5uYXRpdmVFbGVtZW50LCAnZmlyc3QnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fZW5hYmxlU2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLm5hdmlnYXRpb25TdGFydCQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbGFzdFNjcm9sbFBvcyA9IHdpbmRvdy5zY3JvbGxZO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnQ/LnVybCAhPT0gJy9zZXJ2aWNlZGVzaycgJiYgZXZlbnQ/LnVybCAhPT0gJy8nICYmICF0aGlzLl9kaXNhYmxlSW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVGb3JtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLm5hdmlnYXRpb25FbmQkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGV2ZW50ICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQ/LnVybCA9PT0gJy9zZXJ2aWNlZGVzaycgfHwgZXZlbnQ/LnVybCA9PT0gJy8nIHx8IGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzID09PSAnL3NlcnZpY2VkZXNrJylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVuUHJlcGFyZUZvcm0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25TZWFyY2hTdWJtaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ3NlcnZpY2VkZXNrL3NlYXJjaD90ZXJtPScgKyB0aGlzLnNlYXJjaFRlcm0pO1xyXG4gICAgICAgIC8vIHZhciBzZWFyY2hNbyA9IEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kKCdHZXRTZWFyY2hNbycsIHRoaXMuc2VhcmNoVGVybSk7XHJcbiAgICAgICAgLy8gQmFyc2FBcGkuQncuRm9ybS5TaG93KHsgTW86IHNlYXJjaE1vIH0pO1xyXG4gICAgfVxyXG4gICAgcHJlcGFyZUZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZUludGVyc2VjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fY2RyLmRldGFjaCgpO1xyXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdEludGVyc2N0aW9uT2JzZXJ2ZXJMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5zZWFyY2hIb2xkZXIubmF0aXZlRWxlbWVudCwgJ3N0aWNreScpO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuY29udGVudEFuZE5hdi5uYXRpdmVFbGVtZW50LCAnaGlkZScpO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNvbnRlbnQoZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IGZsYWdzID0gUmVuZGVyZXJTdHlsZUZsYWdzMi5JbXBvcnRhbnQ7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93JywgJ2hpZGRlbicsIGZsYWdzKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XHJcbiAgICB9XHJcbiAgICB1blByZXBhcmVGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuc2V0SGVpZ2h0U2VhcmNoSG9sZGVyKHRoaXMuaGVpZ2h0T2ZTcGFjZUhvbGRlcik7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlQ29udGVudCh0cnVlKTtcclxuICAgICAgICAvLyB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnNlYXJjaEhvbGRlci5uYXRpdmVFbGVtZW50LCAnc3RpY2t5Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuc2VhcmNoSG9sZGVyLm5hdGl2ZUVsZW1lbnQsICdoaWRlJyk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5jb250ZW50QW5kTmF2Lm5hdGl2ZUVsZW1lbnQsICdoaWRlJyk7XHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudDtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnLCAnYXV0bycsIGZsYWdzKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XHJcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIHRoaXMuX2Nkci5yZWF0dGFjaCgpO1xyXG4gICAgICAgIHRoaXMuX2Rpc2FibGVJbnRlcnNlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RJbnRlcnNjdGlvbk9ic2VydmVyTGlzdCgpO1xyXG4gICAgfVxyXG4gICAgc2V0SGVpZ2h0U2VhcmNoSG9sZGVyKGhlaWdodCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuaGVhZGVyU3BhY2VIb2xkZXIubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xyXG4gICAgfVxyXG4gICAgdmlzaWJsZUNvbnRlbnQodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuY29udGVudEFuZE5hdi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsIHZpc2libGUgPyAnZmxleCcgOiAnbm9uZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEdyaWRUZW1wbGF0ZVJvd3MoaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXJHcmlkLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgICdncmlkLXRlbXBsYXRlLXJvd3MnLFxyXG4gICAgICAgICAgICBgbWlubWF4KDc4cHgsIDE1JSkgNDZweCAzMnB4IDFmciBhdXRvIDEyJTsgaGVpZ2h0OiR7aGVpZ2h0fXB4YFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5oZWFkZXJHcmlkLm5hdGl2ZUVsZW1lbnQsICdiYWNrZ3JvdW5kLWNvbG9yJywgYHJlZGApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuaGVhZGVyU3BhY2VIb2xkZXIubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xyXG4gICAgfVxyXG4gICAgb25TZWxlY3RlZFRhYkNoYW5nZTMoc2VsZWN0ZWRUYWI6IFRhYlBhbmVsQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGFibGlzdENtcCA9IChzZWxlY3RlZFRhYiBhcyBhbnkpLl90YWJzQ29tcG9uZW50O1xyXG4gICAgICAgIGlmICh0YWJsaXN0Q21wKSB7XHJcbiAgICAgICAgICAgIHRhYmxpc3RDbXAuX2Rpc2FibGVTY3JvbGxTcHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkVGFiLmlkID09PSAnMCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbGVtZW50UmVmT2ZzZWxlY3RlZFRpbGVHcm91cDogSFRNTEVsZW1lbnQgPSB0aGlzLnRpbGVzVmlld2VyR3JvdXBFbExpc3QuZ2V0KFxyXG4gICAgICAgICAgICBOdW1iZXIoc2VsZWN0ZWRUYWIuaWQpXHJcbiAgICAgICAgKT8ubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgZWxlbWVudFJlZk9mc2VsZWN0ZWRUaWxlR3JvdXAuc2Nyb2xsSW50b1ZpZXcoe1xyXG4gICAgICAgICAgICBibG9jazogJ3N0YXJ0J1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzY3JvbGxUb0xhc3RQb3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLCB0aGlzLl9sYXN0U2Nyb2xsUG9zXSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNjcm9sbFRvVG9wKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9lbmFibGVTY3JvbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLCB0aGlzLmhlaWdodE9mU3BhY2VIb2xkZXIgLSB0aGlzLl9zdGlja3lUb3BQb3NpdGlvbl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZGlzY29ubmVjdEludGVyc2N0aW9uT2JzZXJ2ZXJMaXN0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXJMaXN0LmZvckVhY2goKGMpID0+IGMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY29ubmVjdEludGVyc2N0aW9uT2JzZXJ2ZXJMaXN0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXJMaXN0LmZvckVhY2goKGMpID0+IGMub2JzZXJ2ZXIub2JzZXJ2ZShjLmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc3RpY2t5RG9tKFxyXG4gICAgICAgIGFib3ZlLFxyXG4gICAgICAgIGhvbGRlcixcclxuICAgICAgICBtYXJnaW5Ub3AsXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICAgIHZpc2libGVDYWxsYmFjaz86ICgpID0+IHZvaWQsXHJcbiAgICAgICAgaGlkZGVuQ2FsbEJhY2s/OiAoKSA9PiB2b2lkXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBoYW5kbGVyID0gKGVudHJpZXMpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVJbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWVudHJpZXNbMF0uaXNJbnRlcnNlY3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKGhvbGRlciwgY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmlzaWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZUNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhob2xkZXIsIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGhpZGRlbkNhbGxCYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2FsbEJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgcm9vdE1hcmdpbjogYCR7bWFyZ2luVG9wfXB4IDBweCAwcHggMHB4YCxcclxuICAgICAgICAgICAgdGhyZXNob2xkOiAwLjFcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVyLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShhYm92ZSk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlckxpc3QucHVzaCh7IGVsOiBhYm92ZSwgb2JzZXJ2ZXIgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBTZXJ2aWNlRGVza0hlYWRlclNldHRpbmcgZXh0ZW5kcyBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcclxuICAgIEhpZGVTZWFyY2g6IGJvb2xlYW47XHJcbiAgICBIaWRlVGFiczogYm9vbGVhbjtcclxufVxyXG4iLCI8ZGl2IGlkPVwiaGVhZGVyR3JpZFwiIHN0eWxlPVwiZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW5tYXgoMXB4LCAxNSUpIDQ4cHggMzJweCAxZnIgYXV0byAxMiU7IGhlaWdodDogMTQ4cHhcIiAjaGVhZGVyR3JpZD5cclxuICAgIDxkaXYgY2xhc3M9XCJjb21wYW55TG9nb0hvbGRlcl9hYm92ZVNlYXJjaFwiICNhYm92ZVNlYXJjaD48L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJzZWFyY2hIb2xkZXJcIiBzdHlsZT1cImdyaWQtcm93OiAyXCIgI3NlYXJjaEhvbGRlcj5cclxuICAgICAgICA8ZmQtaW5wdXQtZ3JvdXBcclxuICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwic2V0dGluZ3M/LkhpZGVTZWFyY2ggPyAnbm9uZScgOiBudWxsXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1zZWFyY2hcIlxyXG4gICAgICAgICAgICBjb250ZW50RGVuc2l0eT1cImNvenlcIlxyXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXHJcbiAgICAgICAgICAgIGdseXBoPVwic2VhcmNoXCJcclxuICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cIidTZWFyY2gnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWFyY2gnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcclxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJvblNlYXJjaFN1Ym1pdCgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9mZC1pbnB1dC1ncm91cD5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBpZD1cImhlYWRlclNwYWNlSG9sZGVyXCIgI2hlYWRlclNwYWNlSG9sZGVyPlxyXG4gICAgPGRpdiBpZD1cImJnT3V0ZXJIb2xkZXJcIiAjYmdPdXRlckhvbGRlcj5cclxuICAgICAgICA8ZGl2IGlkPVwiYmdJbm5lckhvbGRlclwiIHN0eWxlPVwiaGVpZ2h0OiAxMDB2aFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFja2dyb3VuZEltYWdlXCIgaWQ9XCJiYWNrZ3JvdW5kSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwaWN0dXJlXCIgc3JjPVwiL2Fzc2V0cy9iYWNrLmpwZ1wiIGxvYWRpbmc9XCJsYXp5XCIgLz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwiYmFja2dyb3VuZEltYWdlT3ZlcmxheVwiIGNsYXNzPVwib3ZlcmxheVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgaWQ9XCJjb250ZW50SG9sZGVyQW5kTmF2XCIgZmlyc3Q9XCJ0cnVlXCIgI2NvbnRlbnRBbmROYXYgZmlsbEVtcHR5U3BhY2UgW3NldE1pbkhlaWdodF09XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWJvdmVDb250ZW50XCIgI2Fib3ZlQ29udGVudD48L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJjb250ZW50SG9sZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hdlwiICNuYXZIb2xkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXJUYWJzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogKGFwcFRpbGVHcm91cHMkIHwgYXN5bmMpISEgfVwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXZfc3Vycm9nYXRlXCIgc3R5bGU9XCJoZWlnaHQ6IDEwcHhcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1mZWVkXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyR3JvdXBzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogKGFwcFRpbGVHcm91cHMkIHwgYXN5bmMpISEgfVwiXHJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICNyZW5kZXJUYWJzIGxldC1hcHBUaWxlR3JvdXBzPlxyXG4gICAgPGZkLXRhYi1saXN0XHJcbiAgICAgICAgW3NpemVdPVwidGFiU2l6ZVwiXHJcbiAgICAgICAgW2NvbGxhcHNlT3ZlcmZsb3ddPVwidGFiU2l6ZSA9PT0gJ3MnIHx8IGFwcFRpbGVHcm91cHMubGVuZ3RoID4gNVwiXHJcbiAgICAgICAgW2V4cGFuZE92ZXJmbG93VGV4dF09XCInTW9yZScgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgIChzZWxlY3RlZFRhYkNoYW5nZSk9XCJvblNlbGVjdGVkVGFiQ2hhbmdlMygkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgICBAZm9yIChhcHBUaWxlR3JvdXAgb2YgYXBwVGlsZUdyb3VwczsgdHJhY2sgYXBwVGlsZUdyb3VwOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgIDxmZC10YWIgW2lkXT1cIicnICsgaVwiIFt0aXRsZV09XCJhcHBUaWxlR3JvdXAubmF2aWdhdG9yVGl0bGVcIj4gPC9mZC10YWI+XHJcbiAgICAgICAgfVxyXG4gICAgPC9mZC10YWItbGlzdD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNyZW5kZXJHcm91cHMgbGV0LWFwcFRpbGVHcm91cHM+XHJcbiAgICBAZm9yIChhcHBUaWxlR3JvdXAgb2YgYXBwVGlsZUdyb3VwczsgdHJhY2sgYXBwVGlsZUdyb3VwOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgPGJ0LXRpbGVzLXZpZXdlci1ncm91cFxyXG4gICAgICAgIFtjbGFzc109XCJkZXZpY2VTaXplJCB8IGFzeW5jXCJcclxuICAgICAgICBbYXR0ci5pbmRleF09XCJpXCJcclxuICAgICAgICBbYXBwVGlsZUdyb3VwXT1cImFwcFRpbGVHcm91cFwiXHJcbiAgICAgICAgW2VkaXRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtzdGFja0NvbnRlbnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2lzQXBwVGlsZVN1Ykdyb3VwXT1cImZhbHNlXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCIoZGV2aWNlU2l6ZSQgfCBhc3luYykhIVwiXHJcbiAgICA+PC9idC10aWxlcy12aWV3ZXItZ3JvdXA+XHJcbiAgICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==