bpm-core 0.0.49 → 0.0.51

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 (99) hide show
  1. package/esm2022/lib/app/app.component.mjs +6 -6
  2. package/esm2022/lib/components/app-component-sections/activities/activities.component.mjs +6 -5
  3. package/esm2022/lib/components/app-component-sections/approvals/approvals.component.mjs +4 -4
  4. package/esm2022/lib/components/app-component-sections/approvals-workflow/approvals-workflow.component.mjs +5 -5
  5. package/esm2022/lib/components/app-component-sections/faq-sidenav/faq-sidenav.component.mjs +4 -4
  6. package/esm2022/lib/components/app-component-sections/faqs/faqs.component.mjs +4 -4
  7. package/esm2022/lib/components/app-component-sections/feedback-section/feedback-section.component.mjs +4 -4
  8. package/esm2022/lib/components/app-component-sections/form-section/form-section.component.mjs +4 -4
  9. package/esm2022/lib/components/app-component-sections/layout/header/header.component.mjs +4 -4
  10. package/esm2022/lib/components/app-component-sections/layout/layout.component.mjs +4 -4
  11. package/esm2022/lib/components/app-component-sections/layout/side-nav/side-nav.component.mjs +4 -4
  12. package/esm2022/lib/components/app-component-sections/main-request-details/main-request-details.component.mjs +4 -4
  13. package/esm2022/lib/components/app-component-sections/previous-requests/previous-requests.component.mjs +128 -24
  14. package/esm2022/lib/components/app-component-sections/profile-section/profile-section.component.mjs +4 -4
  15. package/esm2022/lib/components/app-component-sections/service-header/service-header.component.mjs +4 -4
  16. package/esm2022/lib/components/app-component-sections/status/status.component.mjs +4 -4
  17. package/esm2022/lib/components/app-component-sections/workflow-section/workflow-section.component.mjs +4 -4
  18. package/esm2022/lib/components/shared-components/action-buttons/action-buttons.component.mjs +4 -4
  19. package/esm2022/lib/components/shared-components/confirmation-popup/confirmation-popup.component.mjs +4 -4
  20. package/esm2022/lib/components/shared-components/delete-popup/delete-popup.component.mjs +4 -4
  21. package/esm2022/lib/components/shared-components/dialogs/confirm-dialog/confirm-dialog.component.mjs +4 -4
  22. package/esm2022/lib/components/shared-components/dialogs/delete-dialog/delete-dialog.component.mjs +4 -4
  23. package/esm2022/lib/components/shared-components/dialogs/submit-dialog/submit-dialog.component.mjs +4 -4
  24. package/esm2022/lib/components/shared-components/form-field/add-attachment-section/add-attachment-section.component.mjs +42 -20
  25. package/esm2022/lib/components/shared-components/form-field/attachment-section/attachment-section.component.mjs +5 -5
  26. package/esm2022/lib/components/shared-components/form-field/base-component/base-component.component.mjs +4 -4
  27. package/esm2022/lib/components/shared-components/form-field/checkbox/checkbox.component.mjs +9 -15
  28. package/esm2022/lib/components/shared-components/form-field/control-value-accessor.directive.mjs +36 -39
  29. package/esm2022/lib/components/shared-components/form-field/custom-searchable-autocomplete/custom-searchable.component.mjs +13 -25
  30. package/esm2022/lib/components/shared-components/form-field/date-picker/date-picker.component.mjs +60 -67
  31. package/esm2022/lib/components/shared-components/form-field/date-range-picker/date-range-picker.component.mjs +75 -80
  32. package/esm2022/lib/components/shared-components/form-field/doc-uploader/docs-uploader.component.mjs +579 -0
  33. package/esm2022/lib/components/shared-components/form-field/form-label/form-label.component.mjs +4 -4
  34. package/esm2022/lib/components/shared-components/form-field/info-item/info-item.component.mjs +6 -8
  35. package/esm2022/lib/components/shared-components/form-field/input/input.component.mjs +11 -10
  36. package/esm2022/lib/components/shared-components/form-field/input-currency/input-currency.component.mjs +6 -8
  37. package/esm2022/lib/components/shared-components/form-field/input-email/input-email.component.mjs +5 -7
  38. package/esm2022/lib/components/shared-components/form-field/input-mask/input-mask.component.mjs +4 -4
  39. package/esm2022/lib/components/shared-components/form-field/input-number/input-number.component.mjs +5 -8
  40. package/esm2022/lib/components/shared-components/form-field/input-telephone/input-telephone.component.mjs +23 -131
  41. package/esm2022/lib/components/shared-components/form-field/radio/radio.component.mjs +29 -27
  42. package/esm2022/lib/components/shared-components/form-field/repeated-list/repeated-list.component.mjs +4 -4
  43. package/esm2022/lib/components/shared-components/form-field/search-employee/search-employee.component.mjs +87 -78
  44. package/esm2022/lib/components/shared-components/form-field/select/select.component.mjs +4 -4
  45. package/esm2022/lib/components/shared-components/form-field/shared-imports.mjs +14 -0
  46. package/esm2022/lib/components/shared-components/form-field/table-list/table-list.component.mjs +4 -4
  47. package/esm2022/lib/components/shared-components/form-field/textarea/special-chars.directive.mjs +4 -4
  48. package/esm2022/lib/components/shared-components/form-field/textarea/textarea.component.mjs +10 -9
  49. package/esm2022/lib/components/shared-components/form-field/toggle-button/toggle-button.component.mjs +33 -32
  50. package/esm2022/lib/components/shared-components/form-field/validation-errors/validation-errors.component.mjs +7 -6
  51. package/esm2022/lib/components/shared-components/index.mjs +1 -2
  52. package/esm2022/lib/components/shared-components/terms-conditions/terms-conditions.component.mjs +4 -4
  53. package/esm2022/lib/components/shared-components/title-section/title-section.component.mjs +4 -4
  54. package/esm2022/lib/directives/ar.directive.mjs +4 -4
  55. package/esm2022/lib/directives/currency.directive.mjs +4 -4
  56. package/esm2022/lib/directives/en.directive.mjs +4 -4
  57. package/esm2022/lib/directives/number.directive.mjs +4 -4
  58. package/esm2022/lib/i18n/ar.mjs +7 -1
  59. package/esm2022/lib/i18n/en.mjs +7 -1
  60. package/esm2022/lib/pipes/currency.pipe.mjs +4 -4
  61. package/esm2022/lib/pipes/format-as-password.pipe.mjs +4 -4
  62. package/esm2022/lib/pipes/status-style.pipe.mjs +4 -4
  63. package/esm2022/lib/services/action.service.ts.mjs +4 -4
  64. package/esm2022/lib/services/core.service.ts.mjs +63 -100
  65. package/esm2022/lib/services/feedBack.service.mjs +4 -4
  66. package/esm2022/lib/services/i18n.service.mjs +4 -4
  67. package/esm2022/lib/services/sidenav.service.mjs +4 -4
  68. package/esm2022/lib/testComponent/general-approver-section/general-approver-section.component.mjs +4 -4
  69. package/esm2022/lib/testComponent/request-details-section/request-details-section.component.mjs +28 -21
  70. package/esm2022/lib/testComponent/services/i18n.service.mjs +4 -4
  71. package/esm2022/lib/testComponent/services/segment-dynamic-loader.service.mjs +4 -4
  72. package/esm2022/lib/validators/string-to-boolean.pipe.mjs +4 -4
  73. package/esm2022/lib/validators/text.directive.mjs +4 -4
  74. package/esm2022/lib/validators/timer.pipe.mjs +4 -4
  75. package/fesm2022/bpm-core.mjs +2568 -2697
  76. package/fesm2022/bpm-core.mjs.map +1 -1
  77. package/lib/app/app.component.d.ts +1 -1
  78. package/lib/components/app-component-sections/previous-requests/previous-requests.component.d.ts +27 -6
  79. package/lib/components/shared-components/form-field/add-attachment-section/add-attachment-section.component.d.ts +9 -5
  80. package/lib/components/shared-components/form-field/checkbox/checkbox.component.d.ts +1 -3
  81. package/lib/components/shared-components/form-field/control-value-accessor.directive.d.ts +15 -7
  82. package/lib/components/shared-components/form-field/custom-searchable-autocomplete/custom-searchable.component.d.ts +2 -5
  83. package/lib/components/shared-components/form-field/date-picker/date-picker.component.d.ts +3 -4
  84. package/lib/components/shared-components/form-field/date-range-picker/date-range-picker.component.d.ts +6 -6
  85. package/lib/components/shared-components/form-field/doc-uploader/docs-uploader.component.d.ts +131 -0
  86. package/lib/components/shared-components/form-field/input-telephone/input-telephone.component.d.ts +5 -27
  87. package/lib/components/shared-components/form-field/radio/radio.component.d.ts +5 -8
  88. package/lib/components/shared-components/form-field/search-employee/search-employee.component.d.ts +4 -6
  89. package/lib/components/shared-components/form-field/shared-imports.d.ts +5 -0
  90. package/lib/components/shared-components/form-field/toggle-button/toggle-button.component.d.ts +7 -8
  91. package/lib/components/shared-components/form-field/validation-errors/validation-errors.component.d.ts +1 -0
  92. package/lib/components/shared-components/index.d.ts +0 -1
  93. package/lib/i18n/ar.d.ts +6 -0
  94. package/lib/i18n/en.d.ts +6 -0
  95. package/lib/services/core.service.ts.d.ts +9 -4
  96. package/lib/testComponent/request-details-section/request-details-section.component.d.ts +1 -0
  97. package/package.json +2 -3
  98. package/src/lib/assets/scss/_general.scss +1 -0
  99. package/src/lib/assets/scss/input-telephone.scss +133 -159
@@ -1,13 +1,16 @@
1
1
  import { Directive, Input } from '@angular/core';
2
- import { FormControl, Validators, NgControl, FormControlName, FormGroupDirective, } from '@angular/forms';
2
+ import { FormControl, FormControlName, FormGroupDirective, NgControl, Validators, } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../../services";
5
+ import * as i2 from "ngx-toastr";
6
+ import * as i3 from "@angular/platform-browser";
5
7
  export class ControlValueAccessorDirective {
6
8
  injector;
7
9
  i18n;
10
+ toasterService;
11
+ coreService;
12
+ sanitizer;
8
13
  isReadOnly;
9
- labelTextWriteMode;
10
- labelTextReadMode;
11
14
  hint = '';
12
15
  loading;
13
16
  placeholder;
@@ -20,6 +23,12 @@ export class ControlValueAccessorDirective {
20
23
  label;
21
24
  matSuffix;
22
25
  hasTooltip = false;
26
+ name;
27
+ randomID;
28
+ multiple;
29
+ searchControl = new FormControl();
30
+ startDateControl = new FormControl();
31
+ endDateControl = new FormControl();
23
32
  minDateValue;
24
33
  maxDateValue;
25
34
  maxDate;
@@ -33,9 +42,12 @@ export class ControlValueAccessorDirective {
33
42
  required = false;
34
43
  maxLength;
35
44
  isDisabled = false;
36
- constructor(injector, i18n) {
45
+ constructor(injector, i18n, toasterService, coreService, sanitizer) {
37
46
  this.injector = injector;
38
47
  this.i18n = i18n;
48
+ this.toasterService = toasterService;
49
+ this.coreService = coreService;
50
+ this.sanitizer = sanitizer;
39
51
  }
40
52
  ngOnInit() {
41
53
  this.setFormControl();
@@ -59,38 +71,21 @@ export class ControlValueAccessorDirective {
59
71
  this.control = new FormControl();
60
72
  }
61
73
  this.setFormValidators();
62
- this.setDateFormControl();
63
74
  }
64
75
  setFormValidators() {
65
76
  this.required = this.control?.hasValidator(Validators.required) ?? false;
66
77
  }
67
- setDateFormControl() {
68
- const today = new Date();
69
- const currentYear = today.getFullYear();
70
- const currentMonth = today.getMonth();
71
- const currentDay = today.getDate();
72
- if (this.minDate) {
73
- if (this.minDate == 'today') {
74
- this.minDateValue = new Date(currentYear, currentMonth, currentDay);
75
- }
76
- }
77
- if (this.maxDate) {
78
- if (this.maxDate == 'today') {
79
- this.maxDateValue = new Date(currentYear, currentMonth, currentDay);
80
- }
81
- else if (this.maxDate == 'oneYear') {
82
- this.maxDateValue = new Date(currentYear + 1, currentMonth, currentDay - 1);
83
- }
84
- }
85
- else if (this.customMaxDate) {
86
- const date = new Date(this.customMaxDate);
87
- this.maxDateValue = new Date(date.getFullYear(), date.getMonth(), date.getDate());
88
- }
89
- if (this.required)
90
- this.control.addValidators(Validators.required);
91
- }
92
78
  writeValue(value) {
93
79
  this.value = value;
80
+ if (!this.value) {
81
+ this.startDateControl.setValue(null);
82
+ this.endDateControl.setValue(null);
83
+ }
84
+ else {
85
+ this.startDateControl.setValue(this.value.startDate);
86
+ this.endDateControl.setValue(this.value.endDate);
87
+ this.searchControl.setValue(value['value']);
88
+ }
94
89
  }
95
90
  registerOnChange(fn) {
96
91
  }
@@ -99,19 +94,15 @@ export class ControlValueAccessorDirective {
99
94
  setDisabledState(isDisabled) {
100
95
  this.isDisabled = isDisabled;
101
96
  }
102
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ControlValueAccessorDirective, deps: [{ token: i0.Injector }, { token: i1.CoreI18nService }], target: i0.ɵɵFactoryTarget.Directive });
103
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.10", type: ControlValueAccessorDirective, selector: "[appControlValueAccessor]", inputs: { isReadOnly: "isReadOnly", labelTextWriteMode: "labelTextWriteMode", labelTextReadMode: "labelTextReadMode", hint: "hint", loading: "loading", placeholder: "placeholder", type: "type", showErrorMessage: "showErrorMessage", showHint: "showHint", showIfEmpty: "showIfEmpty", insideTable: "insideTable", mask: "mask", label: "label", matSuffix: "matSuffix", hasTooltip: "hasTooltip", maxDate: "maxDate", minDate: "minDate", customMaxDate: "customMaxDate", customMinDate: "customMinDate" }, ngImport: i0 });
97
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ControlValueAccessorDirective, deps: [{ token: i0.Injector }, { token: i1.CoreI18nService }, { token: i2.ToastrService }, { token: i1.CoreService }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Directive });
98
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: ControlValueAccessorDirective, selector: "[appControlValueAccessor]", inputs: { isReadOnly: "isReadOnly", hint: "hint", loading: "loading", placeholder: "placeholder", type: "type", showErrorMessage: "showErrorMessage", showHint: "showHint", showIfEmpty: "showIfEmpty", insideTable: "insideTable", mask: "mask", label: "label", matSuffix: "matSuffix", hasTooltip: "hasTooltip", name: "name", randomID: "randomID", multiple: "multiple", maxDate: "maxDate", minDate: "minDate", customMaxDate: "customMaxDate", customMinDate: "customMinDate" }, ngImport: i0 });
104
99
  }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ControlValueAccessorDirective, decorators: [{
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ControlValueAccessorDirective, decorators: [{
106
101
  type: Directive,
107
102
  args: [{
108
103
  selector: '[appControlValueAccessor]',
109
104
  }]
110
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.CoreI18nService }], propDecorators: { isReadOnly: [{
111
- type: Input
112
- }], labelTextWriteMode: [{
113
- type: Input
114
- }], labelTextReadMode: [{
105
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.CoreI18nService }, { type: i2.ToastrService }, { type: i1.CoreService }, { type: i3.DomSanitizer }], propDecorators: { isReadOnly: [{
115
106
  type: Input
116
107
  }], hint: [{
117
108
  type: Input
@@ -137,6 +128,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
137
128
  type: Input
138
129
  }], hasTooltip: [{
139
130
  type: Input
131
+ }], name: [{
132
+ type: Input
133
+ }], randomID: [{
134
+ type: Input
135
+ }], multiple: [{
136
+ type: Input
140
137
  }], maxDate: [{
141
138
  type: Input
142
139
  }], minDate: [{
@@ -146,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
146
143
  }], customMinDate: [{
147
144
  type: Input
148
145
  }] } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9icG0tY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc2hhcmVkLWNvbXBvbmVudHMvZm9ybS1maWVsZC9jb250cm9sLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFZLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFVBQVUsRUFDVixTQUFTLEVBQ1QsZUFBZSxFQUNmLGtCQUFrQixHQUVuQixNQUFNLGdCQUFnQixDQUFDOzs7QUFNeEIsTUFBTSxPQUFPLDZCQUE2QjtJQW9DcEI7SUFBMkI7SUFqQ3RDLFVBQVUsQ0FBVTtJQUNwQixrQkFBa0IsQ0FBUztJQUMzQixpQkFBaUIsQ0FBUztJQUMxQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ1YsT0FBTyxDQUFXO0lBQ2xCLFdBQVcsQ0FBUztJQUNwQixJQUFJLENBQVM7SUFDYixnQkFBZ0IsQ0FBUztJQUN6QixRQUFRLENBQVM7SUFDakIsV0FBVyxDQUFTO0lBQ3BCLFdBQVcsQ0FBTTtJQUNqQixJQUFJLENBQU07SUFDVixLQUFLLENBQVU7SUFDZixTQUFTLENBQVU7SUFDbkIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUc1QixZQUFZLENBQUs7SUFDakIsWUFBWSxDQUFLO0lBQ1IsT0FBTyxDQUFTO0lBQ3pCLHdCQUF3QjtJQUNqQixhQUFhLENBQU87SUFDbEIsT0FBTyxDQUFTO0lBQ2hCLGFBQWEsQ0FBSztJQUNsQixhQUFhLENBQUs7SUFFM0IsS0FBSyxDQUFNO0lBQ1gsT0FBTyxDQUEwQjtJQUNqQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFNBQVMsQ0FBTTtJQUVmLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFbkIs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VztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBOEI7SUFFL0MsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7d0dBeEdVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQUh6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7aUJBQ3RDOzJHQUlVLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBGb3JtQ29udHJvbCxcclxuICBWYWxpZGF0b3JzLFxyXG4gIE5nQ29udHJvbCxcclxuICBGb3JtQ29udHJvbE5hbWUsXHJcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gIEZvcm1Db250cm9sRGlyZWN0aXZlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29yZUkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwQ29udHJvbFZhbHVlQWNjZXNzb3JdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRyb2xWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlPFR5cGU+XHJcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0XHJcbntcclxuICBASW5wdXQoKSBpc1JlYWRPbmx5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dFdyaXRlTW9kZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dFJlYWRNb2RlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaGludCA9ICcnO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dFcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93SGludDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dJZkVtcHR5OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5zaWRlVGFibGU6IGFueTtcclxuICBASW5wdXQoKSBtYXNrOiBhbnk7XHJcbiAgQElucHV0KCkgbGFiZWwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF0U3VmZml4OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhhc1Rvb2x0aXAgPSBmYWxzZTtcclxuXHJcblxyXG4gIG1pbkRhdGVWYWx1ZTogYW55XHJcbiAgbWF4RGF0ZVZhbHVlOiBhbnlcclxuICBASW5wdXQoKSBtYXhEYXRlOiBzdHJpbmc7XHJcbiAgLy8gQFZpZXdDaGlsZCgnZGVmYXVsdCcpXHJcbiAgcHVibGljIGRhdGVwaWNrZXJPYmohOiBhbnk7XHJcbiAgQElucHV0KCkgbWluRGF0ZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGN1c3RvbU1heERhdGU6IGFueVxyXG4gIEBJbnB1dCgpIGN1c3RvbU1pbkRhdGU6IGFueVxyXG5cclxuICB2YWx1ZTogYW55O1xyXG4gIGNvbnRyb2w6IEZvcm1Db250cm9sIHwgdW5kZWZpbmVkO1xyXG4gIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgbWF4TGVuZ3RoOiBhbnk7XHJcblxyXG4gIGlzRGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHB1YmxpYyBpMThuOiBDb3JlSTE4blNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRGb3JtQ29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybUNvbnRyb2woKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XHJcbiAgICAgIHN3aXRjaCAoZm9ybUNvbnRyb2wuY29uc3RydWN0b3IpIHtcclxuICAgICAgICBjYXNlIEZvcm1Db250cm9sTmFtZTpcclxuICAgICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3JcclxuICAgICAgICAgICAgLmdldChGb3JtR3JvdXBEaXJlY3RpdmUpXHJcbiAgICAgICAgICAgIC5nZXRDb250cm9sKGZvcm1Db250cm9sIGFzIEZvcm1Db250cm9sTmFtZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5jb250cm9sID0gKGZvcm1Db250cm9sIGFzIEZvcm1Db250cm9sRGlyZWN0aXZlKVxyXG4gICAgICAgICAgICAuZm9ybSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5jb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1WYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLnNldERhdGVGb3JtQ29udHJvbCgpXHJcbiAgfVxyXG5cclxuICBzZXRGb3JtVmFsaWRhdG9ycygpe1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9IHRoaXMuY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0ZUZvcm1Db250cm9sKCl7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IHRvZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgICBjb25zdCBjdXJyZW50TW9udGggPSB0b2RheS5nZXRNb250aCgpO1xyXG4gICAgY29uc3QgY3VycmVudERheSA9IHRvZGF5LmdldERhdGUoKTtcclxuICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgaWYgKHRoaXMubWluRGF0ZSA9PSAndG9kYXknKSB7XHJcbiAgICAgICAgdGhpcy5taW5EYXRlVmFsdWUgPSBuZXcgRGF0ZShjdXJyZW50WWVhciwgY3VycmVudE1vbnRoLCBjdXJyZW50RGF5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICBpZiAodGhpcy5tYXhEYXRlID09ICd0b2RheScpIHtcclxuICAgICAgICB0aGlzLm1heERhdGVWYWx1ZSA9IG5ldyBEYXRlKGN1cnJlbnRZZWFyLCBjdXJyZW50TW9udGgsIGN1cnJlbnREYXkpXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXhEYXRlID09ICdvbmVZZWFyJykge1xyXG4gICAgICAgIHRoaXMubWF4RGF0ZVZhbHVlID0gbmV3IERhdGUoY3VycmVudFllYXIgKyAxLCBjdXJyZW50TW9udGgsIGN1cnJlbnREYXkgLSAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmN1c3RvbU1heERhdGUpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VzdG9tTWF4RGF0ZSlcclxuICAgICAgdGhpcy5tYXhEYXRlVmFsdWUgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlcXVpcmVkKSB0aGlzLmNvbnRyb2wuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gIH1cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBUeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsOiBUeXBlIHwgbnVsbCkgPT4gVHlwZSk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiBUeXBlKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxufVxyXG4iXX0=
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9icG0tY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc2hhcmVkLWNvbXBvbmVudHMvZm9ybS1maWVsZC9jb250cm9sLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFZLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQXVCLFdBQVcsRUFBd0IsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFRcEosTUFBTSxPQUFPLDZCQUE2QjtJQTZDWDtJQUEyQjtJQUNyQztJQUNBO0lBQWlDO0lBNUMzQyxVQUFVLENBQVU7SUFDcEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLE9BQU8sQ0FBVztJQUNsQixXQUFXLENBQVM7SUFDcEIsSUFBSSxDQUFTO0lBQ2IsZ0JBQWdCLENBQVM7SUFDekIsUUFBUSxDQUFTO0lBQ2pCLFdBQVcsQ0FBUztJQUNwQixXQUFXLENBQU07SUFDakIsSUFBSSxDQUFNO0lBQ1YsS0FBSyxDQUFVO0lBQ2YsU0FBUyxDQUFVO0lBQ25CLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsSUFBSSxDQUFVO0lBQ2QsUUFBUSxDQUFVO0lBQ2xCLFFBQVEsQ0FBVTtJQUMzQixhQUFhLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtJQUlqQyxnQkFBZ0IsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLGNBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBS25DLFlBQVksQ0FBSztJQUNqQixZQUFZLENBQUs7SUFDUixPQUFPLENBQVM7SUFDekIsd0JBQXdCO0lBQ2pCLGFBQWEsQ0FBTztJQUNsQixPQUFPLENBQVM7SUFDaEIsYUFBYSxDQUFLO0lBQ2xCLGFBQWEsQ0FBSztJQUUzQixLQUFLLENBQU07SUFDWCxPQUFPLENBQTBCO0lBQ2pDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsU0FBUyxDQUFNO0lBRWYsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUVuQixZQUE2QixRQUFrQixFQUFTLElBQXFCLEVBQzFELGNBQTZCLEVBQzdCLFdBQXdCLEVBQVMsU0FBdUI7UUFGOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFTLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQzFELG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUUzRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELFFBQVEsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNoQyxLQUFLLGVBQWU7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVE7eUJBQ3pCLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQzt5QkFDdkIsVUFBVSxDQUFDLFdBQThCLENBQUMsQ0FBQztvQkFDOUMsTUFBTTtnQkFDUjtvQkFDRSxJQUFJLENBQUMsT0FBTyxHQUFJLFdBQW9DO3lCQUNqRCxJQUFtQixDQUFDO29CQUN2QixNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQzNFLENBQUM7SUFHRCxVQUFVLENBQUMsS0FBVztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBOEI7SUFFL0MsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7dUdBckdVLDZCQUE2QjsyRkFBN0IsNkJBQTZCOzsyRkFBN0IsNkJBQTZCO2tCQUh6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7aUJBQ3RDOzRMQUlVLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFhRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtQ29udHJvbERpcmVjdGl2ZSwgRm9ybUNvbnRyb2xOYW1lLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyx9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb3JlSTE4blNlcnZpY2UsIENvcmVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQge1RvYXN0clNlcnZpY2V9IGZyb20gXCJuZ3gtdG9hc3RyXCI7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1thcHBDb250cm9sVmFsdWVBY2Nlc3Nvcl0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udHJvbFZhbHVlQWNjZXNzb3JEaXJlY3RpdmU8VHlwZT5cclxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXRcclxue1xyXG4gIEBJbnB1dCgpIGlzUmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGludCA9ICcnO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dFcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93SGludDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dJZkVtcHR5OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5zaWRlVGFibGU6IGFueTtcclxuICBASW5wdXQoKSBtYXNrOiBhbnk7XHJcbiAgQElucHV0KCkgbGFiZWwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF0U3VmZml4OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhhc1Rvb2x0aXAgPSBmYWxzZTtcclxuICBASW5wdXQoKSBuYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJhbmRvbUlEITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuO1xyXG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKVxyXG5cclxuXHJcblxyXG4gIHN0YXJ0RGF0ZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICBlbmREYXRlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG5cclxuXHJcblxyXG5cclxuICBtaW5EYXRlVmFsdWU6IGFueVxyXG4gIG1heERhdGVWYWx1ZTogYW55XHJcbiAgQElucHV0KCkgbWF4RGF0ZTogc3RyaW5nO1xyXG4gIC8vIEBWaWV3Q2hpbGQoJ2RlZmF1bHQnKVxyXG4gIHB1YmxpYyBkYXRlcGlja2VyT2JqITogYW55O1xyXG4gIEBJbnB1dCgpIG1pbkRhdGU6IHN0cmluZztcclxuICBASW5wdXQoKSBjdXN0b21NYXhEYXRlOiBhbnlcclxuICBASW5wdXQoKSBjdXN0b21NaW5EYXRlOiBhbnlcclxuXHJcbiAgdmFsdWU6IGFueTtcclxuICBjb250cm9sOiBGb3JtQ29udHJvbCB8IHVuZGVmaW5lZDtcclxuICByZXF1aXJlZCA9IGZhbHNlO1xyXG4gIG1heExlbmd0aDogYW55O1xyXG5cclxuICBpc0Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLCBwdWJsaWMgaTE4bjogQ29yZUkxOG5TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyB0b2FzdGVyU2VydmljZTogVG9hc3RyU2VydmljZSxcclxuICAgICAgICAgICAgICBwdWJsaWMgY29yZVNlcnZpY2U6IENvcmVTZXJ2aWNlLCBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIHNldEZvcm1Db250cm9sKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpO1xyXG4gICAgICBzd2l0Y2ggKGZvcm1Db250cm9sLmNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgY2FzZSBGb3JtQ29udHJvbE5hbWU6XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yXHJcbiAgICAgICAgICAgIC5nZXQoRm9ybUdyb3VwRGlyZWN0aXZlKVxyXG4gICAgICAgICAgICAuZ2V0Q29udHJvbChmb3JtQ29udHJvbCBhcyBGb3JtQ29udHJvbE5hbWUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuY29udHJvbCA9IChmb3JtQ29udHJvbCBhcyBGb3JtQ29udHJvbERpcmVjdGl2ZSlcclxuICAgICAgICAgICAgLmZvcm0gYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRGb3JtVmFsaWRhdG9ycygpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybVZhbGlkYXRvcnMoKXtcclxuICAgIHRoaXMucmVxdWlyZWQgPSB0aGlzLmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBUeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICBpZighdGhpcy52YWx1ZSl7XHJcbiAgICAgIHRoaXMuc3RhcnREYXRlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgdGhpcy5lbmREYXRlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnREYXRlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlLnN0YXJ0RGF0ZSk7XHJcbiAgICAgIHRoaXMuZW5kRGF0ZUNvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZS5lbmREYXRlKTtcclxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKHZhbHVlWyd2YWx1ZSddKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbDogVHlwZSB8IG51bGwpID0+IFR5cGUpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gVHlwZSk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbn1cclxuIl19
@@ -5,31 +5,27 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
5
5
  /* eslint-disable @angular-eslint/use-lifecycle-interface */
6
6
  /* eslint-disable @angular-eslint/component-selector */
7
7
  import { Component, Input, Output, EventEmitter, CUSTOM_ELEMENTS_SCHEMA, forwardRef } from '@angular/core';
8
- import { FormControl } from '@angular/forms';
9
- import { MatError, MatFormField, MatFormFieldModule, MatHint } from '@angular/material/form-field';
10
8
  import { InfoItemComponent } from "../info-item/info-item.component";
11
- import { NgClass, NgForOf, NgIf } from "@angular/common";
9
+ import { NgClass } from "@angular/common";
12
10
  import { MatAutocomplete, MatAutocompleteTrigger, MatOption } from "@angular/material/autocomplete";
13
11
  import { ControlValueAccessorDirective } from '../control-value-accessor.directive';
14
12
  import { MatInputModule } from '@angular/material/input';
15
13
  import { ValidationErrorsComponent } from "../validation-errors/validation-errors.component";
16
14
  import * as i0 from "@angular/core";
17
15
  import * as i1 from "@angular/forms";
18
- import * as i2 from "@angular/material/form-field";
19
- import * as i3 from "@angular/material/input";
16
+ import * as i2 from "@angular/material/input";
17
+ import * as i3 from "@angular/material/form-field";
20
18
  export class CustomSearchableComponent extends ControlValueAccessorDirective {
21
19
  options;
22
20
  selectedValue = new EventEmitter();
23
21
  isLengthGreaterThan4 = new EventEmitter();
24
22
  disabled = false;
25
- name = 'name';
26
- displayedLable;
23
+ displayedLabel;
27
24
  key = 'description';
28
25
  floatLabel = 'auto';
29
26
  className = 'bordered-input';
30
27
  noData = false;
31
28
  filteredOptions;
32
- searchControl = new FormControl();
33
29
  clearInput() {
34
30
  this.control.setValue(null);
35
31
  this.searchControl.setValue(null);
@@ -76,33 +72,27 @@ export class CustomSearchableComponent extends ControlValueAccessorDirective {
76
72
  return option ? option : '';
77
73
  }
78
74
  getAutoComplete(value) {
79
- this.control.setValue({ key: value[this.key] });
80
- this.searchControl.setValue(value[this.key]);
75
+ this.control.setValue({ key: value[this.key], value: value[this.displayedLabel] });
76
+ this.searchControl.setValue(value[this.displayedLabel]);
81
77
  }
82
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CustomSearchableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
83
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: CustomSearchableComponent, isStandalone: true, selector: "app-custom-searchable", inputs: { options: "options", disabled: "disabled", name: "name", displayedLable: "displayedLable", key: "key", floatLabel: "floatLabel", className: "className" }, outputs: { selectedValue: "selectedValue", isLengthGreaterThan4: "isLengthGreaterThan4" }, providers: [
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CustomSearchableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: CustomSearchableComponent, isStandalone: true, selector: "app-custom-searchable", inputs: { options: "options", disabled: "disabled", displayedLabel: "displayedLabel", key: "key", floatLabel: "floatLabel", className: "className" }, outputs: { selectedValue: "selectedValue", isLengthGreaterThan4: "isLengthGreaterThan4" }, providers: [
84
80
  {
85
81
  provide: NG_VALUE_ACCESSOR,
86
82
  useExisting: forwardRef(() => CustomSearchableComponent),
87
83
  multi: true,
88
84
  },
89
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"isReadOnly && control?.value\">\r\n <app-info-item class=\"info-item w-100\" [label]=\"label\" [insideTable]=\"insideTable\" [hasLabel]=\"label ? true: false\" [value]=\"control?.value\"></app-info-item>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"!isReadOnly\">\r\n <div class=\"d-flex justify-content-between mb-1\" *ngIf=\"label\">\r\n <span class=\"form-label mb-0\">{{label}}</span>\r\n <span *ngIf=\"!required\" class=\"fs-11 fc-dark-gray\">\r\n {{i18n.translate('Optional')}}\r\n </span>\r\n </div>\r\n <mat-form-field class=\"primary-form {{className}}\" [ngClass]=\"{'input-disabled' : (disabled || loading) }\"\r\n [floatLabel]=\"floatLabel\" >\r\n <!-- (click)=\"clearInput()\" -->\r\n <span class=\"sfi sfi-search fc-coral fs-18\" matPrefix></span>\r\n <label class=\"mat-form-content\">\r\n <!-- <bdi> -->\r\n <input #autocompleteInput type=\"text\" (keydown)=\"onKeyDown($event, autocompleteInput)\" [attr.disabled]=\"disabled \" [placeholder]=\"label\" aria-label=\"Number\" matInput\r\n (input)=\"onValueChange($event)\" [formControl]=\"searchControl\"\r\n ngDefaultControl [name]=\"'test'\" [matAutocomplete]=\"auto\" [value]=\"value\" (focusout)=\"onFocusOut()\">\r\n <!-- </bdi> -->\r\n </label>\r\n <span class=\"sfi sfi-spinner d-inline-block spin fc-coral\" matSuffix *ngIf=\"loading\"></span>\r\n <span class=\"sfi sfi-close d-inline-block fc-black cursor-pointer\" (click)=\"clearInput()\" matSuffix\r\n *ngIf=\"!loading && control?.value\"></span>\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" [displayWith]=\"displayFn\" \r\n (optionSelected)='getAutoComplete($event.option.value)'>\r\n <ng-container *ngIf=\"!noData\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <div class=\"d-flex align-items-center\">\r\n <figure *ngIf=\"option['avatar_url']\" class=\"img-card small circled-img p-0 m-0\">\r\n <img [src]=\"option['avatar_url']\" alt=\"\">\r\n </figure>\r\n <span *ngIf=\"option['avatar_url']\" class=\"mx-2\"></span>\r\n <!-- <bdi> -->\r\n {{option[displayedLable]}}\r\n <!-- </bdi> -->\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <mat-option [disabled]=\"true\" class=\"text-center\">No Data</mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n <!-- <mat-error class=\"mb-2\" *ngIf=\"(!control?.valid)\">{{i18n.translate('validSelectError')}}{{label}}\r\n </mat-error> -->\r\n\r\n <mat-hint *ngIf=\"showHint\">\r\n <span class=\"sfi sfi-check-circle font-10 fc-dark-gray\" [ngClass]=\"{'fc-oasis-light-imp':value}\"></span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"fs-12 fc-onyx\">{{hint}}</span>\r\n </mat-hint>\r\n </mat-form-field>\r\n <app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n\r\n</ng-container>\r\n", styles: [".small-input~.btn{height:41px}:host{flex-grow:1}\n"], dependencies: [{ kind: "component", type: InfoItemComponent, selector: "app-info-item", inputs: ["label", "value", "name", "type", "dateType", "multiple", "insideTable", "hasLabel", "arrayList", "actionType", "download"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: ValidationErrorsComponent, selector: "app-validation-errors", inputs: ["errors", "customErrorMessages"] }] });
85
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if(isReadOnly && control?.value){\r\n<ng-container>\r\n <app-info-item\r\n class=\"info-item w-100\"\r\n [label]=\"label\"\r\n [insideTable]=\"insideTable\"\r\n [hasLabel]=\"!!label\"\r\n [value]=\"control?.value.key\"\r\n ></app-info-item>\r\n</ng-container>\r\n} @if(!isReadOnly){\r\n<ng-container>\r\n @if(label){\r\n <div class=\"d-flex justify-content-between mb-1\">\r\n <span class=\"form-label mb-0\">{{ label }}</span>\r\n @if(!required){\r\n <span class=\"fs-11 fc-dark-gray\">\r\n {{ i18n.translate(\"Optional\") }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n <mat-form-field\r\n class=\"primary-form {{ className }}\"\r\n [ngClass]=\"{ 'input-disabled': disabled || loading }\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <!-- (click)=\"clearInput()\" -->\r\n <span class=\"sfi sfi-search fc-coral fs-18\" matPrefix></span>\r\n <label class=\"mat-form-content\">\r\n <!-- <bdi> -->\r\n <input\r\n #autocompleteInput\r\n type=\"text\"\r\n (keydown)=\"onKeyDown($event, autocompleteInput)\"\r\n [attr.disabled]=\"disabled\"\r\n [placeholder]=\"label\"\r\n aria-label=\"Number\"\r\n matInput\r\n (input)=\"onValueChange($event)\"\r\n [formControl]=\"searchControl\"\r\n [name]=\"name\"\r\n [matAutocomplete]=\"auto\"\r\n [value]=\"value?.key\"\r\n (focusout)=\"onFocusOut()\"\r\n />\r\n <!-- </bdi> -->\r\n </label>\r\n @if(loading){\r\n <span class=\"sfi sfi-spinner d-inline-block spin fc-coral\" matSuffix></span>\r\n } @if(!loading && control?.value){\r\n <span\r\n class=\"sfi sfi-close d-inline-block fc-black cursor-pointer\"\r\n (click)=\"clearInput()\"\r\n matSuffix\r\n ></span>\r\n }\r\n\r\n <mat-autocomplete\r\n autoActiveFirstOption\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayFn\"\r\n (optionSelected)=\"getAutoComplete($event.option.value)\"\r\n >\r\n @if(!noData){\r\n <ng-container>\r\n @for(option of filteredOptions; track option){\r\n <mat-option [value]=\"option\">\r\n <div class=\"d-flex align-items-center\">\r\n @if(option['avatar_url']){\r\n <figure class=\"img-card small circled-img p-0 m-0\">\r\n <img [src]=\"option['avatar_url']\" alt=\"\" />\r\n </figure>\r\n } @if(option['avatar_url']){\r\n <span class=\"mx-2\"></span>\r\n }\r\n\r\n <!-- <bdi> -->\r\n {{ option[displayedLabel] }}\r\n <!-- </bdi> -->\r\n </div>\r\n </mat-option>\r\n }\r\n </ng-container>\r\n } @if(noData){\r\n <ng-container>\r\n <mat-option [disabled]=\"true\" class=\"text-center\">No Data</mat-option>\r\n </ng-container>\r\n }\r\n </mat-autocomplete>\r\n <!-- <mat-error class=\"mb-2\" *ngIf=\"(!control?.valid)\">{{i18n.translate('validSelectError')}}{{label}}\r\n </mat-error> -->\r\n @if(showHint){\r\n <mat-hint>\r\n <span\r\n class=\"sfi sfi-check-circle font-10 fc-dark-gray\"\r\n [ngClass]=\"{ 'fc-oasis-light-imp': value }\"\r\n ></span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"fs-12 fc-onyx\">{{ hint }}</span>\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n <app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n</ng-container>\r\n}\r\n", styles: [".small-input~.btn{height:41px}:host{flex-grow:1}\n"], dependencies: [{ kind: "component", type: InfoItemComponent, selector: "app-info-item", inputs: ["label", "value", "name", "type", "dateType", "multiple", "insideTable", "hasLabel", "arrayList", "actionType", "download"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: ValidationErrorsComponent, selector: "app-validation-errors", inputs: ["errors", "customErrorMessages"] }] });
90
86
  }
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CustomSearchableComponent, decorators: [{
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CustomSearchableComponent, decorators: [{
92
88
  type: Component,
93
89
  args: [{ selector: 'app-custom-searchable', schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [
94
90
  InfoItemComponent,
95
91
  NgClass,
96
- NgIf,
97
92
  ReactiveFormsModule,
98
93
  MatAutocomplete,
99
94
  MatOption,
100
95
  MatAutocompleteTrigger,
101
- MatError,
102
- MatHint,
103
- NgForOf,
104
- MatFormField,
105
- MatFormFieldModule,
106
96
  MatInputModule,
107
97
  ValidationErrorsComponent
108
98
  ], standalone: true, providers: [
@@ -111,7 +101,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
111
101
  useExisting: forwardRef(() => CustomSearchableComponent),
112
102
  multi: true,
113
103
  },
114
- ], template: "<ng-container *ngIf=\"isReadOnly && control?.value\">\r\n <app-info-item class=\"info-item w-100\" [label]=\"label\" [insideTable]=\"insideTable\" [hasLabel]=\"label ? true: false\" [value]=\"control?.value\"></app-info-item>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"!isReadOnly\">\r\n <div class=\"d-flex justify-content-between mb-1\" *ngIf=\"label\">\r\n <span class=\"form-label mb-0\">{{label}}</span>\r\n <span *ngIf=\"!required\" class=\"fs-11 fc-dark-gray\">\r\n {{i18n.translate('Optional')}}\r\n </span>\r\n </div>\r\n <mat-form-field class=\"primary-form {{className}}\" [ngClass]=\"{'input-disabled' : (disabled || loading) }\"\r\n [floatLabel]=\"floatLabel\" >\r\n <!-- (click)=\"clearInput()\" -->\r\n <span class=\"sfi sfi-search fc-coral fs-18\" matPrefix></span>\r\n <label class=\"mat-form-content\">\r\n <!-- <bdi> -->\r\n <input #autocompleteInput type=\"text\" (keydown)=\"onKeyDown($event, autocompleteInput)\" [attr.disabled]=\"disabled \" [placeholder]=\"label\" aria-label=\"Number\" matInput\r\n (input)=\"onValueChange($event)\" [formControl]=\"searchControl\"\r\n ngDefaultControl [name]=\"'test'\" [matAutocomplete]=\"auto\" [value]=\"value\" (focusout)=\"onFocusOut()\">\r\n <!-- </bdi> -->\r\n </label>\r\n <span class=\"sfi sfi-spinner d-inline-block spin fc-coral\" matSuffix *ngIf=\"loading\"></span>\r\n <span class=\"sfi sfi-close d-inline-block fc-black cursor-pointer\" (click)=\"clearInput()\" matSuffix\r\n *ngIf=\"!loading && control?.value\"></span>\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" [displayWith]=\"displayFn\" \r\n (optionSelected)='getAutoComplete($event.option.value)'>\r\n <ng-container *ngIf=\"!noData\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <div class=\"d-flex align-items-center\">\r\n <figure *ngIf=\"option['avatar_url']\" class=\"img-card small circled-img p-0 m-0\">\r\n <img [src]=\"option['avatar_url']\" alt=\"\">\r\n </figure>\r\n <span *ngIf=\"option['avatar_url']\" class=\"mx-2\"></span>\r\n <!-- <bdi> -->\r\n {{option[displayedLable]}}\r\n <!-- </bdi> -->\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <mat-option [disabled]=\"true\" class=\"text-center\">No Data</mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n <!-- <mat-error class=\"mb-2\" *ngIf=\"(!control?.valid)\">{{i18n.translate('validSelectError')}}{{label}}\r\n </mat-error> -->\r\n\r\n <mat-hint *ngIf=\"showHint\">\r\n <span class=\"sfi sfi-check-circle font-10 fc-dark-gray\" [ngClass]=\"{'fc-oasis-light-imp':value}\"></span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"fs-12 fc-onyx\">{{hint}}</span>\r\n </mat-hint>\r\n </mat-form-field>\r\n <app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n\r\n</ng-container>\r\n", styles: [".small-input~.btn{height:41px}:host{flex-grow:1}\n"] }]
104
+ ], template: "@if(isReadOnly && control?.value){\r\n<ng-container>\r\n <app-info-item\r\n class=\"info-item w-100\"\r\n [label]=\"label\"\r\n [insideTable]=\"insideTable\"\r\n [hasLabel]=\"!!label\"\r\n [value]=\"control?.value.key\"\r\n ></app-info-item>\r\n</ng-container>\r\n} @if(!isReadOnly){\r\n<ng-container>\r\n @if(label){\r\n <div class=\"d-flex justify-content-between mb-1\">\r\n <span class=\"form-label mb-0\">{{ label }}</span>\r\n @if(!required){\r\n <span class=\"fs-11 fc-dark-gray\">\r\n {{ i18n.translate(\"Optional\") }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n <mat-form-field\r\n class=\"primary-form {{ className }}\"\r\n [ngClass]=\"{ 'input-disabled': disabled || loading }\"\r\n [floatLabel]=\"floatLabel\"\r\n >\r\n <!-- (click)=\"clearInput()\" -->\r\n <span class=\"sfi sfi-search fc-coral fs-18\" matPrefix></span>\r\n <label class=\"mat-form-content\">\r\n <!-- <bdi> -->\r\n <input\r\n #autocompleteInput\r\n type=\"text\"\r\n (keydown)=\"onKeyDown($event, autocompleteInput)\"\r\n [attr.disabled]=\"disabled\"\r\n [placeholder]=\"label\"\r\n aria-label=\"Number\"\r\n matInput\r\n (input)=\"onValueChange($event)\"\r\n [formControl]=\"searchControl\"\r\n [name]=\"name\"\r\n [matAutocomplete]=\"auto\"\r\n [value]=\"value?.key\"\r\n (focusout)=\"onFocusOut()\"\r\n />\r\n <!-- </bdi> -->\r\n </label>\r\n @if(loading){\r\n <span class=\"sfi sfi-spinner d-inline-block spin fc-coral\" matSuffix></span>\r\n } @if(!loading && control?.value){\r\n <span\r\n class=\"sfi sfi-close d-inline-block fc-black cursor-pointer\"\r\n (click)=\"clearInput()\"\r\n matSuffix\r\n ></span>\r\n }\r\n\r\n <mat-autocomplete\r\n autoActiveFirstOption\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayFn\"\r\n (optionSelected)=\"getAutoComplete($event.option.value)\"\r\n >\r\n @if(!noData){\r\n <ng-container>\r\n @for(option of filteredOptions; track option){\r\n <mat-option [value]=\"option\">\r\n <div class=\"d-flex align-items-center\">\r\n @if(option['avatar_url']){\r\n <figure class=\"img-card small circled-img p-0 m-0\">\r\n <img [src]=\"option['avatar_url']\" alt=\"\" />\r\n </figure>\r\n } @if(option['avatar_url']){\r\n <span class=\"mx-2\"></span>\r\n }\r\n\r\n <!-- <bdi> -->\r\n {{ option[displayedLabel] }}\r\n <!-- </bdi> -->\r\n </div>\r\n </mat-option>\r\n }\r\n </ng-container>\r\n } @if(noData){\r\n <ng-container>\r\n <mat-option [disabled]=\"true\" class=\"text-center\">No Data</mat-option>\r\n </ng-container>\r\n }\r\n </mat-autocomplete>\r\n <!-- <mat-error class=\"mb-2\" *ngIf=\"(!control?.valid)\">{{i18n.translate('validSelectError')}}{{label}}\r\n </mat-error> -->\r\n @if(showHint){\r\n <mat-hint>\r\n <span\r\n class=\"sfi sfi-check-circle font-10 fc-dark-gray\"\r\n [ngClass]=\"{ 'fc-oasis-light-imp': value }\"\r\n ></span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"fs-12 fc-onyx\">{{ hint }}</span>\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n <app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n</ng-container>\r\n}\r\n", styles: [".small-input~.btn{height:41px}:host{flex-grow:1}\n"] }]
115
105
  }], propDecorators: { options: [{
116
106
  type: Input
117
107
  }], selectedValue: [{
@@ -120,9 +110,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
120
110
  type: Output
121
111
  }], disabled: [{
122
112
  type: Input
123
- }], name: [{
124
- type: Input
125
- }], displayedLable: [{
113
+ }], displayedLabel: [{
126
114
  type: Input
127
115
  }], key: [{
128
116
  type: Input
@@ -131,4 +119,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
131
119
  }], className: [{
132
120
  type: Input
133
121
  }] } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlYXJjaGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvY3VzdG9tLXNlYXJjaGFibGUtYXV0b2NvbXBsZXRlL2N1c3RvbS1zZWFyY2hhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9zaGFyZWQtY29tcG9uZW50cy9mb3JtLWZpZWxkL2N1c3RvbS1zZWFyY2hhYmxlLWF1dG9jb21wbGV0ZS9jdXN0b20tc2VhcmNoYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsMkJBQTJCO0FBQzNCLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLHVEQUF1RDtBQUN2RCw0REFBNEQ7QUFDNUQsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWlCLHNCQUFzQixFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsSSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFbEcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVB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LHNCQUFzQixDQUFDLFdBQ3hCO3dCQUNQLGlCQUFpQjt3QkFDakIsT0FBTzt3QkFDUCxJQUFJO3dCQUNKLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixTQUFTO3dCQUNULHNCQUFzQjt3QkFDdEIsUUFBUTt3QkFDUixPQUFPO3dCQUNQLE9BQU87d0JBQ1AsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QseUJBQXlCO3FCQUM1QixjQUNhLElBQUksYUFDTDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQzs0QkFDeEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBTVEsT0FBTztzQkFBZixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xyXG5pbXBvcnQge05HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3VzZS1saWZlY3ljbGUtaW50ZXJmYWNlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGZvcndhcmRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RXJyb3IsIE1hdEZvcm1GaWVsZCwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRIaW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuXHJcbmltcG9ydCB7SW5mb0l0ZW1Db21wb25lbnR9IGZyb20gXCIuLi9pbmZvLWl0ZW0vaW5mby1pdGVtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05nQ2xhc3MsIE5nRm9yT2YsIE5nSWZ9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtNYXRBdXRvY29tcGxldGUsIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsIE1hdE9wdGlvbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZSB9IGZyb20gJy4uL2NvbnRyb2wtdmFsdWUtYWNjZXNzb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvcnNDb21wb25lbnQgfSBmcm9tIFwiLi4vdmFsaWRhdGlvbi1lcnJvcnMvdmFsaWRhdGlvbi1lcnJvcnMuY29tcG9uZW50XCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXNlYXJjaGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tc2VhcmNoYWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLXNlYXJjaGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgSW5mb0l0ZW1Db21wb25lbnQsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgTmdJZixcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRBdXRvY29tcGxldGUsXHJcbiAgICBNYXRPcHRpb24sXHJcbiAgICBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLFxyXG4gICAgTWF0RXJyb3IsXHJcbiAgICBNYXRIaW50LFxyXG4gICAgTmdGb3JPZixcclxuICAgIE1hdEZvcm1GaWVsZCxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgVmFsaWRhdGlvbkVycm9yc0NvbXBvbmVudFxyXG5dLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDdXN0b21TZWFyY2hhYmxlQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF1cclxufSlcclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbVNlYXJjaGFibGVDb21wb25lbnQgPFR5cGU+IGV4dGVuZHMgQ29udHJvbFZhbHVlQWNjZXNzb3JEaXJlY3RpdmU8VHlwZT4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIG9wdGlvbnMhOiBhbnk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGlzTGVuZ3RoR3JlYXRlclRoYW40ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0nbmFtZSc7XHJcbiAgQElucHV0KCkgZGlzcGxheWVkTGFibGU6IHN0cmluZztcclxuICBASW5wdXQoKSBrZXk6IHN0cmluZyA9ICdkZXNjcmlwdGlvbic7XHJcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogYW55ID0gJ2F1dG8nO1xyXG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICdib3JkZXJlZC1pbnB1dCc7XHJcblxyXG4gIG5vRGF0YSA9IGZhbHNlO1xyXG4gIGZpbHRlcmVkT3B0aW9ucyE6IGFueTtcclxuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKClcclxuXHJcbiAgY2xlYXJJbnB1dCgpIHtcclxuICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShudWxsKVxyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKG51bGwpXHJcbiAgICBpZiAoIXRoaXMuaXNSZWFkT25seSkge1xyXG4gICAgICB0aGlzLnNldEZpbHRlcmVkT3B0aW9ucygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzT3V0KCl7XHJcbiAgICB0aGlzLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpXHJcbiAgfVxyXG5cclxuICBvbktleURvd24oZTogS2V5Ym9hcmRFdmVudCwgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpe1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vcmVzZXQgaW4gY2FzZSBubyB2YWx1ZSBhbmQgZGVsZXRlIG9yIGJhY2tzcGFjZSBwcmVzc2VkXHJcbiAgICAgIGlmKCAoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2KSAmJiAhdGhpcy5jb250cm9sLnZhbHVlKXtcclxuICAgICAgICBpZih0aGlzLmNvbnRyb2wpe1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKG51bGwpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLnNldEZpbHRlcmVkT3B0aW9ucygpXHJcbiAgfVxyXG4gIG9uVmFsdWVDaGFuZ2UoZGF0YSkge1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJlZE9wdGlvbnMoZGF0YSlcclxuICB9XHJcblxyXG4gIHNldEZpbHRlcmVkT3B0aW9ucyhkYXRhPykge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICAgIC8vIHRoaXMubG9hZGluZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gZGF0YT8udGFyZ2V0Py52YWx1ZSA/IHRoaXMuX2ZpbHRlcihkYXRhLnRhcmdldC52YWx1ZSkgOiB0aGlzLm9wdGlvbnMuc2xpY2UoMCwgMzApXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm5vRGF0YSA9IHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlcih2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlPy50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5maWx0ZXIoKG9wdGlvbjogYW55KSA9PiBPYmplY3QudmFsdWVzKG9wdGlvbikuam9pbignJyk/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKS5zbGljZSgwLCAzMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5Rm4ob3B0aW9uOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbiA6ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXV0b0NvbXBsZXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh7a2V5OnZhbHVlW3RoaXMua2V5XX0pO1xyXG4gICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKHZhbHVlW3RoaXMua2V5XSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSZWFkT25seSAmJiBjb250cm9sPy52YWx1ZVwiPlxyXG4gIDxhcHAtaW5mby1pdGVtIGNsYXNzPVwiaW5mby1pdGVtIHctMTAwXCIgW2xhYmVsXT1cImxhYmVsXCIgW2luc2lkZVRhYmxlXT1cImluc2lkZVRhYmxlXCIgW2hhc0xhYmVsXT1cImxhYmVsID8gdHJ1ZTogZmFsc2VcIiBbdmFsdWVdPVwiY29udHJvbD8udmFsdWVcIj48L2FwcC1pbmZvLWl0ZW0+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1JlYWRPbmx5XCI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0xXCIgKm5nSWY9XCJsYWJlbFwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTBcIj57e2xhYmVsfX08L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdJZj1cIiFyZXF1aXJlZFwiIGNsYXNzPVwiZnMtMTEgZmMtZGFyay1ncmF5XCI+XHJcbiAgICAgIHt7aTE4bi50cmFuc2xhdGUoJ09wdGlvbmFsJyl9fVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInByaW1hcnktZm9ybSB7e2NsYXNzTmFtZX19XCIgW25nQ2xhc3NdPVwieydpbnB1dC1kaXNhYmxlZCcgOiAoZGlzYWJsZWQgfHwgbG9hZGluZykgfVwiXHJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCIgPlxyXG4gICAgPCEtLSAoY2xpY2spPVwiY2xlYXJJbnB1dCgpXCIgLS0+XHJcbiAgICA8c3BhbiBjbGFzcz1cInNmaSBzZmktc2VhcmNoIGZjLWNvcmFsIGZzLTE4XCIgbWF0UHJlZml4Pjwvc3Bhbj5cclxuICAgIDxsYWJlbCBjbGFzcz1cIm1hdC1mb3JtLWNvbnRlbnRcIj5cclxuICAgICAgPCEtLSA8YmRpPiAtLT5cclxuICAgICAgPGlucHV0ICNhdXRvY29tcGxldGVJbnB1dCB0eXBlPVwidGV4dFwiIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIGF1dG9jb21wbGV0ZUlucHV0KVwiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkIFwiIFtwbGFjZWhvbGRlcl09XCJsYWJlbFwiIGFyaWEtbGFiZWw9XCJOdW1iZXJcIiBtYXRJbnB1dFxyXG4gICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaENvbnRyb2xcIlxyXG4gICAgICAgbmdEZWZhdWx0Q29udHJvbCBbbmFtZV09XCIndGVzdCdcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBbdmFsdWVdPVwidmFsdWVcIiAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCI+XHJcbiAgICA8IS0tIDwvYmRpPiAtLT5cclxuICA8L2xhYmVsPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzZmkgc2ZpLXNwaW5uZXIgZC1pbmxpbmUtYmxvY2sgc3BpbiBmYy1jb3JhbFwiIG1hdFN1ZmZpeCAqbmdJZj1cImxvYWRpbmdcIj48L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cInNmaSBzZmktY2xvc2UgZC1pbmxpbmUtYmxvY2sgZmMtYmxhY2sgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xlYXJJbnB1dCgpXCIgbWF0U3VmZml4XHJcbiAgICAgICpuZ0lmPVwiIWxvYWRpbmcgJiYgY29udHJvbD8udmFsdWVcIj48L3NwYW4+XHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZSBhdXRvQWN0aXZlRmlyc3RPcHRpb24gI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCIgXHJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9J2dldEF1dG9Db21wbGV0ZSgkZXZlbnQub3B0aW9uLnZhbHVlKSc+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9EYXRhXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZmlndXJlICpuZ0lmPVwib3B0aW9uWydhdmF0YXJfdXJsJ11cIiBjbGFzcz1cImltZy1jYXJkIHNtYWxsIGNpcmNsZWQtaW1nIHAtMCBtLTBcIj5cclxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwib3B0aW9uWydhdmF0YXJfdXJsJ11cIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgPC9maWd1cmU+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9uWydhdmF0YXJfdXJsJ11cIiBjbGFzcz1cIm14LTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgPCEtLSA8YmRpPiAtLT5cclxuICAgICAgICAgICAgIHt7b3B0aW9uW2Rpc3BsYXllZExhYmxlXX19XHJcbiAgICAgICAgICAgPCEtLSA8L2JkaT4gLS0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+Tm8gRGF0YTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICA8IS0tIDxtYXQtZXJyb3IgY2xhc3M9XCJtYi0yXCIgKm5nSWY9XCIoIWNvbnRyb2w/LnZhbGlkKVwiPnt7aTE4bi50cmFuc2xhdGUoJ3ZhbGlkU2VsZWN0RXJyb3InKX19e3tsYWJlbH19XHJcbiAgICA8L21hdC1lcnJvcj4gLS0+XHJcblxyXG4gICAgPG1hdC1oaW50ICpuZ0lmPVwic2hvd0hpbnRcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzZmkgc2ZpLWNoZWNrLWNpcmNsZSBmb250LTEwIGZjLWRhcmstZ3JheVwiIFtuZ0NsYXNzXT1cInsnZmMtb2FzaXMtbGlnaHQtaW1wJzp2YWx1ZX1cIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibXgtMVwiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMiBmYy1vbnl4XCI+e3toaW50fX08L3NwYW4+XHJcbiAgICA8L21hdC1oaW50PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPGFwcC12YWxpZGF0aW9uLWVycm9ycyBbZXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzXCI+PC9hcHAtdmFsaWRhdGlvbi1lcnJvcnM+XHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlYXJjaGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvY3VzdG9tLXNlYXJjaGFibGUtYXV0b2NvbXBsZXRlL2N1c3RvbS1zZWFyY2hhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9zaGFyZWQtY29tcG9uZW50cy9mb3JtLWZpZWxkL2N1c3RvbS1zZWFyY2hhYmxlLWF1dG9jb21wbGV0ZS9jdXN0b20tc2VhcmNoYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsMkJBQTJCO0FBQzNCLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLHVEQUF1RDtBQUN2RCw0REFBNEQ7QUFDNUQsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWlCLHNCQUFzQixFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUlsSSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxN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QixDQUFDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFNUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cclxuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC91c2UtbGlmZWN5Y2xlLWludGVyZmFjZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBmb3J3YXJkUmVmLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEVycm9yLCBNYXRIaW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuXHJcbmltcG9ydCB7SW5mb0l0ZW1Db21wb25lbnR9IGZyb20gXCIuLi9pbmZvLWl0ZW0vaW5mby1pdGVtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05nQ2xhc3MsIE5nRm9yT2YsIE5nSWZ9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtNYXRBdXRvY29tcGxldGUsIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsIE1hdE9wdGlvbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZSB9IGZyb20gJy4uL2NvbnRyb2wtdmFsdWUtYWNjZXNzb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvcnNDb21wb25lbnQgfSBmcm9tIFwiLi4vdmFsaWRhdGlvbi1lcnJvcnMvdmFsaWRhdGlvbi1lcnJvcnMuY29tcG9uZW50XCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXNlYXJjaGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tc2VhcmNoYWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLXNlYXJjaGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgSW5mb0l0ZW1Db21wb25lbnQsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEF1dG9jb21wbGV0ZSxcclxuICAgIE1hdE9wdGlvbixcclxuICAgIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIFZhbGlkYXRpb25FcnJvcnNDb21wb25lbnRcclxuXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VzdG9tU2VhcmNoYWJsZUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdXHJcbn0pXHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21TZWFyY2hhYmxlQ29tcG9uZW50IDxUeXBlPiBleHRlbmRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlPFR5cGU+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBvcHRpb25zITogYW55O1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpc0xlbmd0aEdyZWF0ZXJUaGFuNCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXllZExhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkga2V5OiBzdHJpbmcgPSAnZGVzY3JpcHRpb24nO1xyXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IGFueSA9ICdhdXRvJztcclxuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnYm9yZGVyZWQtaW5wdXQnO1xyXG5cclxuICBub0RhdGEgPSBmYWxzZTtcclxuICBmaWx0ZXJlZE9wdGlvbnMhOiBhbnk7XHJcblxyXG4gIGNsZWFySW5wdXQoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUobnVsbClcclxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShudWxsKVxyXG4gICAgaWYgKCF0aGlzLmlzUmVhZE9ubHkpIHtcclxuICAgICAgdGhpcy5zZXRGaWx0ZXJlZE9wdGlvbnMoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Gb2N1c091dCgpe1xyXG4gICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKVxyXG4gIH1cclxuXHJcbiAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQsIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KXtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvL3Jlc2V0IGluIGNhc2Ugbm8gdmFsdWUgYW5kIGRlbGV0ZSBvciBiYWNrc3BhY2UgcHJlc3NlZFxyXG4gICAgICBpZiggKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0NikgJiYgIXRoaXMuY29udHJvbC52YWx1ZSl7XHJcbiAgICAgICAgaWYodGhpcy5jb250cm9sKXtcclxuICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShudWxsKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJlZE9wdGlvbnMoKVxyXG4gIH1cclxuICBvblZhbHVlQ2hhbmdlKGRhdGEpIHtcclxuICAgIHRoaXMuc2V0RmlsdGVyZWRPcHRpb25zKGRhdGEpXHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXJlZE9wdGlvbnMoZGF0YT8pIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgICAvLyB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IGRhdGE/LnRhcmdldD8udmFsdWUgPyB0aGlzLl9maWx0ZXIoZGF0YS50YXJnZXQudmFsdWUpIDogdGhpcy5vcHRpb25zLnNsaWNlKDAsIDMwKVxyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXIodmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZT8udG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZmlsdGVyKChvcHRpb246IGFueSkgPT4gT2JqZWN0LnZhbHVlcyhvcHRpb24pLmpvaW4oJycpPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkuc2xpY2UoMCwgMzApO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZuKG9wdGlvbjogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBvcHRpb24gPyBvcHRpb24gOiAnJztcclxuICB9XHJcblxyXG4gIGdldEF1dG9Db21wbGV0ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoe2tleTp2YWx1ZVt0aGlzLmtleV0sdmFsdWU6dmFsdWVbdGhpcy5kaXNwbGF5ZWRMYWJlbF19KTtcclxuICAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZVt0aGlzLmRpc3BsYXllZExhYmVsXSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJAaWYoaXNSZWFkT25seSAmJiBjb250cm9sPy52YWx1ZSl7XHJcbjxuZy1jb250YWluZXI+XHJcbiAgPGFwcC1pbmZvLWl0ZW1cclxuICAgIGNsYXNzPVwiaW5mby1pdGVtIHctMTAwXCJcclxuICAgIFtsYWJlbF09XCJsYWJlbFwiXHJcbiAgICBbaW5zaWRlVGFibGVdPVwiaW5zaWRlVGFibGVcIlxyXG4gICAgW2hhc0xhYmVsXT1cIiEhbGFiZWxcIlxyXG4gICAgW3ZhbHVlXT1cImNvbnRyb2w/LnZhbHVlLmtleVwiXHJcbiAgPjwvYXBwLWluZm8taXRlbT5cclxuPC9uZy1jb250YWluZXI+XHJcbn0gQGlmKCFpc1JlYWRPbmx5KXtcclxuPG5nLWNvbnRhaW5lcj5cclxuICBAaWYobGFiZWwpe1xyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTBcIj57eyBsYWJlbCB9fTwvc3Bhbj5cclxuICAgIEBpZighcmVxdWlyZWQpe1xyXG4gICAgPHNwYW4gY2xhc3M9XCJmcy0xMSBmYy1kYXJrLWdyYXlcIj5cclxuICAgICAge3sgaTE4bi50cmFuc2xhdGUoXCJPcHRpb25hbFwiKSB9fVxyXG4gICAgPC9zcGFuPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuICA8bWF0LWZvcm0tZmllbGRcclxuICAgIGNsYXNzPVwicHJpbWFyeS1mb3JtIHt7IGNsYXNzTmFtZSB9fVwiXHJcbiAgICBbbmdDbGFzc109XCJ7ICdpbnB1dC1kaXNhYmxlZCc6IGRpc2FibGVkIHx8IGxvYWRpbmcgfVwiXHJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcclxuICA+XHJcbiAgICA8IS0tIChjbGljayk9XCJjbGVhcklucHV0KClcIiAtLT5cclxuICAgIDxzcGFuIGNsYXNzPVwic2ZpIHNmaS1zZWFyY2ggZmMtY29yYWwgZnMtMThcIiBtYXRQcmVmaXg+PC9zcGFuPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwibWF0LWZvcm0tY29udGVudFwiPlxyXG4gICAgICA8IS0tIDxiZGk+IC0tPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICAjYXV0b2NvbXBsZXRlSW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgYXV0b2NvbXBsZXRlSW5wdXQpXCJcclxuICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiTnVtYmVyXCJcclxuICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcclxuICAgICAgICBbbmFtZV09XCJuYW1lXCJcclxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZT8ua2V5XCJcclxuICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCJcclxuICAgICAgLz5cclxuICAgICAgPCEtLSA8L2JkaT4gLS0+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgQGlmKGxvYWRpbmcpe1xyXG4gICAgPHNwYW4gY2xhc3M9XCJzZmkgc2ZpLXNwaW5uZXIgZC1pbmxpbmUtYmxvY2sgc3BpbiBmYy1jb3JhbFwiIG1hdFN1ZmZpeD48L3NwYW4+XHJcbiAgICB9IEBpZighbG9hZGluZyAmJiBjb250cm9sPy52YWx1ZSl7XHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cInNmaSBzZmktY2xvc2UgZC1pbmxpbmUtYmxvY2sgZmMtYmxhY2sgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dCgpXCJcclxuICAgICAgbWF0U3VmZml4XHJcbiAgICA+PC9zcGFuPlxyXG4gICAgfVxyXG5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgIGF1dG9BY3RpdmVGaXJzdE9wdGlvblxyXG4gICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIlxyXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiZ2V0QXV0b0NvbXBsZXRlKCRldmVudC5vcHRpb24udmFsdWUpXCJcclxuICAgID5cclxuICAgICAgQGlmKCFub0RhdGEpe1xyXG4gICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgIEBmb3Iob3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uczsgdHJhY2sgb3B0aW9uKXtcclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICBAaWYob3B0aW9uWydhdmF0YXJfdXJsJ10pe1xyXG4gICAgICAgICAgICA8ZmlndXJlIGNsYXNzPVwiaW1nLWNhcmQgc21hbGwgY2lyY2xlZC1pbWcgcC0wIG0tMFwiPlxyXG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJvcHRpb25bJ2F2YXRhcl91cmwnXVwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZmlndXJlPlxyXG4gICAgICAgICAgICB9IEBpZihvcHRpb25bJ2F2YXRhcl91cmwnXSl7XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPCEtLSA8YmRpPiAtLT5cclxuICAgICAgICAgICAge3sgb3B0aW9uW2Rpc3BsYXllZExhYmVsXSB9fVxyXG4gICAgICAgICAgICA8IS0tIDwvYmRpPiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9IEBpZihub0RhdGEpe1xyXG4gICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPk5vIERhdGE8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICA8IS0tIDxtYXQtZXJyb3IgY2xhc3M9XCJtYi0yXCIgKm5nSWY9XCIoIWNvbnRyb2w/LnZhbGlkKVwiPnt7aTE4bi50cmFuc2xhdGUoJ3ZhbGlkU2VsZWN0RXJyb3InKX19e3tsYWJlbH19XHJcbiAgICA8L21hdC1lcnJvcj4gLS0+XHJcbiAgICBAaWYoc2hvd0hpbnQpe1xyXG4gICAgPG1hdC1oaW50PlxyXG4gICAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzPVwic2ZpIHNmaS1jaGVjay1jaXJjbGUgZm9udC0xMCBmYy1kYXJrLWdyYXlcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZjLW9hc2lzLWxpZ2h0LWltcCc6IHZhbHVlIH1cIlxyXG4gICAgICA+PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm14LTFcIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTIgZmMtb255eFwiPnt7IGhpbnQgfX08L3NwYW4+XHJcbiAgICA8L21hdC1oaW50PlxyXG4gICAgfVxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPGFwcC12YWxpZGF0aW9uLWVycm9ycyBbZXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzXCI+PC9hcHAtdmFsaWRhdGlvbi1lcnJvcnM+XHJcbjwvbmctY29udGFpbmVyPlxyXG59XHJcbiJdfQ==