bpm-core 0.0.104 → 0.0.105

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 (131) hide show
  1. package/esm2022/bpm-core.mjs +5 -0
  2. package/esm2022/lib/app/app.component.mjs +79 -0
  3. package/esm2022/lib/classes/form-validation.mjs +80 -0
  4. package/esm2022/lib/classes/index.mjs +2 -0
  5. package/esm2022/lib/components/app-component-sections/activities/activities.component.mjs +44 -0
  6. package/esm2022/lib/components/app-component-sections/approvals/approvals.component.mjs +23 -0
  7. package/esm2022/lib/components/app-component-sections/approvals-workflow/approvals-workflow.component.mjs +113 -0
  8. package/esm2022/lib/components/app-component-sections/faq-sidenav/faq-sidenav.component.mjs +25 -0
  9. package/esm2022/lib/components/app-component-sections/faqs/faqs.component.mjs +27 -0
  10. package/esm2022/lib/components/app-component-sections/faqs/index.mjs +2 -0
  11. package/esm2022/lib/components/app-component-sections/feedback-section/feedback-section.component.mjs +237 -0
  12. package/esm2022/lib/components/app-component-sections/form-section/form-section.component.mjs +255 -0
  13. package/esm2022/lib/components/app-component-sections/index.mjs +9 -0
  14. package/esm2022/lib/components/app-component-sections/layout/header/header.component.mjs +79 -0
  15. package/esm2022/lib/components/app-component-sections/layout/layout.component.mjs +89 -0
  16. package/esm2022/lib/components/app-component-sections/layout/side-nav/side-nav.component.mjs +158 -0
  17. package/esm2022/lib/components/app-component-sections/main-request-details/main-request-details.component.mjs +34 -0
  18. package/esm2022/lib/components/app-component-sections/previous-requests/previous-requests.component.mjs +345 -0
  19. package/esm2022/lib/components/app-component-sections/profile-section/profile-section.component.mjs +45 -0
  20. package/esm2022/lib/components/app-component-sections/service-header/service-header.component.mjs +271 -0
  21. package/esm2022/lib/components/app-component-sections/status/status.component.mjs +38 -0
  22. package/esm2022/lib/components/app-component-sections/workflow-section/workflow-section.component.mjs +164 -0
  23. package/esm2022/lib/components/shared-components/action-buttons/action-buttons.component.mjs +138 -0
  24. package/esm2022/lib/components/shared-components/dialogs/confirm-dialog/confirm-dialog.component.mjs +30 -0
  25. package/esm2022/lib/components/shared-components/dialogs/delete-dialog/delete-dialog.component.mjs +29 -0
  26. package/esm2022/lib/components/shared-components/dialogs/submit-dialog/submit-dialog.component.mjs +67 -0
  27. package/esm2022/lib/components/shared-components/form-field/add-attachment-section/add-attachment-section.component.mjs +138 -0
  28. package/esm2022/lib/components/shared-components/form-field/attachment-section/attachment-section.component.mjs +234 -0
  29. package/esm2022/lib/components/shared-components/form-field/base-component/base-component.component.mjs +198 -0
  30. package/esm2022/lib/components/shared-components/form-field/checkbox/checkbox.component.mjs +91 -0
  31. package/esm2022/lib/components/shared-components/form-field/control-value-accessor.directive.mjs +185 -0
  32. package/esm2022/lib/components/shared-components/form-field/custom-searchable-autocomplete/custom-searchable.component.mjs +131 -0
  33. package/esm2022/lib/components/shared-components/form-field/date-picker/date-format.mjs +31 -0
  34. package/esm2022/lib/components/shared-components/form-field/date-picker/date-picker.component.mjs +175 -0
  35. package/esm2022/lib/components/shared-components/form-field/date-range-picker/date-range-picker.component.mjs +186 -0
  36. package/esm2022/lib/components/shared-components/form-field/doc-uploader/docs-uploader.component.mjs +525 -0
  37. package/esm2022/lib/components/shared-components/form-field/form-label/form-label.component.mjs +33 -0
  38. package/esm2022/lib/components/shared-components/form-field/index.mjs +26 -0
  39. package/esm2022/lib/components/shared-components/form-field/info-item/info-item.component.mjs +76 -0
  40. package/esm2022/lib/components/shared-components/form-field/input/input.component.mjs +71 -0
  41. package/esm2022/lib/components/shared-components/form-field/input-autocomplete/index.mjs +3 -0
  42. package/esm2022/lib/components/shared-components/form-field/input-autocomplete/input-autocomplete.model.mjs +2 -0
  43. package/esm2022/lib/components/shared-components/form-field/input-currency/input-currency.component.mjs +73 -0
  44. package/esm2022/lib/components/shared-components/form-field/input-email/input-email.component.mjs +69 -0
  45. package/esm2022/lib/components/shared-components/form-field/input-mask/input-mask.component.mjs +61 -0
  46. package/esm2022/lib/components/shared-components/form-field/input-number/input-number.component.mjs +74 -0
  47. package/esm2022/lib/components/shared-components/form-field/input-telephone/input-telephone.component.mjs +85 -0
  48. package/esm2022/lib/components/shared-components/form-field/radio/radio.component.mjs +52 -0
  49. package/esm2022/lib/components/shared-components/form-field/repeated-list/repeated-list.component.mjs +32 -0
  50. package/esm2022/lib/components/shared-components/form-field/search-employee/search-employee.component.mjs +192 -0
  51. package/esm2022/lib/components/shared-components/form-field/select/select.component.mjs +191 -0
  52. package/esm2022/lib/components/shared-components/form-field/shared-imports.mjs +36 -0
  53. package/esm2022/lib/components/shared-components/form-field/table-list/table-list.component.mjs +116 -0
  54. package/esm2022/lib/components/shared-components/form-field/textarea/special-chars.directive.mjs +39 -0
  55. package/esm2022/lib/components/shared-components/form-field/textarea/textarea.component.mjs +57 -0
  56. package/esm2022/lib/components/shared-components/form-field/toggle-button/toggle-button.component.mjs +90 -0
  57. package/esm2022/lib/components/shared-components/form-field/validation-errors/validation-errors.component.mjs +43 -0
  58. package/esm2022/lib/components/shared-components/index.mjs +9 -0
  59. package/esm2022/lib/components/shared-components/table/table.component.mjs +243 -0
  60. package/esm2022/lib/components/shared-components/terms-conditions/terms-conditions.component.mjs +31 -0
  61. package/esm2022/lib/components/shared-components/title-section/title-section.component.mjs +31 -0
  62. package/esm2022/lib/constants/constants.mjs +149 -0
  63. package/esm2022/lib/constants/index.mjs +2 -0
  64. package/esm2022/lib/directives/ar.directive.mjs +54 -0
  65. package/esm2022/lib/directives/currency.directive.mjs +92 -0
  66. package/esm2022/lib/directives/en.directive.mjs +51 -0
  67. package/esm2022/lib/directives/number.directive.mjs +68 -0
  68. package/esm2022/lib/directives/skip-location.directive.mjs +28 -0
  69. package/esm2022/lib/enums/actions.enum.mjs +22 -0
  70. package/esm2022/lib/enums/colors.enum.mjs +6 -0
  71. package/esm2022/lib/enums/events.enum.mjs +6 -0
  72. package/esm2022/lib/functions/data-to-blob.mjs +12 -0
  73. package/esm2022/lib/functions/encode-password.mjs +14 -0
  74. package/esm2022/lib/functions/handel-error-response.mjs +12 -0
  75. package/esm2022/lib/functions/index.mjs +5 -0
  76. package/esm2022/lib/functions/is-valid-data.mjs +42 -0
  77. package/esm2022/lib/helpers/shared.helper.mjs +26 -0
  78. package/esm2022/lib/hooks/index.mjs +3 -0
  79. package/esm2022/lib/hooks/load-form.mjs +13 -0
  80. package/esm2022/lib/hooks/save-form.mjs +18 -0
  81. package/esm2022/lib/i18n/ar.mjs +200 -0
  82. package/esm2022/lib/i18n/en.mjs +204 -0
  83. package/esm2022/lib/i18n/index.mjs +3 -0
  84. package/esm2022/lib/interfaces/action.interface.mjs +2 -0
  85. package/esm2022/lib/interfaces/api-response.interface.mjs +2 -0
  86. package/esm2022/lib/interfaces/document-file.interface.mjs +2 -0
  87. package/esm2022/lib/interfaces/form-items.interface.mjs +2 -0
  88. package/esm2022/lib/interfaces/form.interface.mjs +150 -0
  89. package/esm2022/lib/interfaces/igate-user.interface.mjs +2 -0
  90. package/esm2022/lib/interfaces/index.mjs +8 -0
  91. package/esm2022/lib/interfaces/lov-list.interface.mjs +2 -0
  92. package/esm2022/lib/interfaces/lov.interface.mjs +2 -0
  93. package/esm2022/lib/interfaces/shared.interface.mjs +2 -0
  94. package/esm2022/lib/pipes/currency.pipe.mjs +66 -0
  95. package/esm2022/lib/pipes/format-as-password.pipe.mjs +19 -0
  96. package/esm2022/lib/pipes/index.mjs +3 -0
  97. package/esm2022/lib/pipes/status-style.pipe.mjs +57 -0
  98. package/esm2022/lib/pipes/translate.pipe.mjs +36 -0
  99. package/esm2022/lib/regex/index.mjs +2 -0
  100. package/esm2022/lib/regex/regex-patterns.mjs +4 -0
  101. package/esm2022/lib/services/action.service.ts.mjs +25 -0
  102. package/esm2022/lib/services/core.service.ts.mjs +527 -0
  103. package/esm2022/lib/services/feedBack.service.mjs +81 -0
  104. package/esm2022/lib/services/i18n.service.mjs +36 -0
  105. package/esm2022/lib/services/index.mjs +6 -0
  106. package/esm2022/lib/services/sidenav.service.mjs +36 -0
  107. package/esm2022/lib/testComponent/config/segment-dynamic-loader.config.mjs +8 -0
  108. package/esm2022/lib/testComponent/general-approver-section/general-approver-section.component.mjs +90 -0
  109. package/esm2022/lib/testComponent/request-details-section/request-details-section.component.mjs +482 -0
  110. package/esm2022/lib/testComponent/services/i18n.service.mjs +39 -0
  111. package/esm2022/lib/testComponent/services/segment-dynamic-loader.service.mjs +54 -0
  112. package/esm2022/lib/validators/id.validator.mjs +66 -0
  113. package/esm2022/lib/validators/index.mjs +8 -0
  114. package/esm2022/lib/validators/string-to-boolean.pipe.mjs +16 -0
  115. package/esm2022/lib/validators/text.directive.mjs +50 -0
  116. package/esm2022/lib/validators/timer.pipe.mjs +19 -0
  117. package/esm2022/public-api.mjs +19 -0
  118. package/fesm2022/bpm-core.mjs +244 -226
  119. package/fesm2022/bpm-core.mjs.map +1 -1
  120. package/lib/components/shared-components/form-field/checkbox/checkbox.component.d.ts +1 -2
  121. package/lib/components/shared-components/form-field/control-value-accessor.directive.d.ts +1 -1
  122. package/lib/components/shared-components/form-field/shared-imports.d.ts +2 -2
  123. package/lib/components/shared-components/form-field/textarea/special-chars.directive.d.ts +1 -1
  124. package/lib/components/shared-components/title-section/title-section.component.d.ts +1 -1
  125. package/lib/directives/currency.directive.d.ts +1 -0
  126. package/lib/pipes/currency.pipe.d.ts +1 -1
  127. package/lib/pipes/format-as-password.pipe.d.ts +1 -1
  128. package/lib/validators/string-to-boolean.pipe.d.ts +1 -1
  129. package/lib/validators/text.directive.d.ts +1 -1
  130. package/lib/validators/timer.pipe.d.ts +1 -1
  131. package/package.json +4 -2
@@ -0,0 +1,237 @@
1
+ import { MAT_DIALOG_DATA, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';
2
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, Inject, Input } from '@angular/core';
3
+ import { Form, Messages } from '../../../interfaces';
4
+ import * as Constants from '../../../constants/constants';
5
+ import { NgIf } from '@angular/common';
6
+ import { InfoItemComponent, SearchEmployeeComponent, TextareaComponent } from "../../shared-components";
7
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../../services";
10
+ export class FeedbackSectionComponent {
11
+ feedBackService;
12
+ i18n;
13
+ data;
14
+ inboxItem;
15
+ profile;
16
+ form;
17
+ searchEmp;
18
+ submitted = false;
19
+ feedbackStatus = null;
20
+ feedBackQuestion = null;
21
+ feedBackResponse = null;
22
+ isFeedbackValidated = false;
23
+ isResponseValidated = false;
24
+ employeeInput = null;
25
+ feedbackId = null;
26
+ destroyRef = inject(DestroyRef);
27
+ constructor(feedBackService, i18n, data) {
28
+ this.feedBackService = feedBackService;
29
+ this.i18n = i18n;
30
+ this.data = data;
31
+ this.profile = data.profile;
32
+ this.inboxItem = data.inboxItem;
33
+ this.form = data.form;
34
+ }
35
+ ngOnInit() {
36
+ if (!this.feedBackService.feedBackSent) {
37
+ const item = this.inboxItem;
38
+ if (item?.canRequestFeedback === 'true') {
39
+ this.feedbackStatus = Constants.FEEDBACK_STATUS_REQUEST;
40
+ this.feedBackService.feedbackForm = true;
41
+ }
42
+ if (item.isRequested === 'true' &&
43
+ item.hasFeedback === 'true' &&
44
+ item.isPending === 'false' &&
45
+ item.isResponded === 'false') {
46
+ this.feedbackStatus = Constants.FEEDBACK_STATUS_WAITING;
47
+ this.feedBackService.pendingForm = true;
48
+ this.getFeedBack();
49
+ }
50
+ if (item.isRequested === 'false' &&
51
+ item.hasFeedback === 'true' &&
52
+ item.isPending === 'true' &&
53
+ item.isResponded === 'false') {
54
+ this.feedbackStatus = Constants.FEEDBACK_STATUS_RESPOND;
55
+ this.feedBackService.responderForm = true;
56
+ this.getFeedBack();
57
+ }
58
+ if (item.isRequested === 'true' &&
59
+ item.hasFeedback === 'true' &&
60
+ item.isPending === 'false' &&
61
+ item.isResponded === 'true') {
62
+ this.feedbackStatus = Constants.FEEDBACK_STATUS_RESPONDED;
63
+ this.feedBackService.pendingForm = true;
64
+ this.getFeedBack();
65
+ }
66
+ /* const obj = {
67
+ name: 'changeFeedbackStatus',
68
+ data: this.feedbackStatus!
69
+ };
70
+ this._listenerService.filter(obj);*/
71
+ }
72
+ }
73
+ getFeedBack() {
74
+ this.feedBackService.getFeedback(this.profile.employeeEmail).pipe(takeUntilDestroyed(this.destroyRef)).subscribe((Response) => {
75
+ if (Response) {
76
+ if (Response instanceof Messages) {
77
+ this.showError(Response);
78
+ }
79
+ else {
80
+ const resp = Response['items'][0];
81
+ this.feedBackService.feedbackResponse.requestFrom =
82
+ resp.from['firstName'] +
83
+ ' ' +
84
+ resp.from['middleName'] +
85
+ ' ' +
86
+ resp.from['familyName'];
87
+ this.feedBackService.feedbackResponse.requestTo =
88
+ resp.to['firstName'] +
89
+ ' ' +
90
+ resp.to['middleName'] +
91
+ ' ' +
92
+ resp.to['familyName'];
93
+ this.feedBackService.feedbackResponse.requestFeedback =
94
+ resp.query;
95
+ this.feedBackService.feedbackResponse.responseFeedback =
96
+ resp.response;
97
+ this.feedbackId = resp.id;
98
+ }
99
+ }
100
+ });
101
+ }
102
+ addFeedback() {
103
+ if (this.isFeedbackValidated) {
104
+ const email = this.searchEmp.personEmail, question = this.feedBackQuestion;
105
+ this.feedBackService.submitFeedback({ email, question }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe((Response) => {
106
+ if (Response) {
107
+ if (Response instanceof Messages) {
108
+ this.showError(Response);
109
+ }
110
+ else {
111
+ this.submitted = true;
112
+ this.feedbackStatus = Constants.FEEDBACK_STATUS_WAITING;
113
+ // const obj = {
114
+ // name: 'changeFeedbackStatus',
115
+ // data: this.feedbackStatus
116
+ // };
117
+ // this._listenerService.filter(obj);
118
+ this.feedBackService.feedbackForm = false;
119
+ this.feedBackService.pendingForm = true;
120
+ this.feedBackService.feedBackSent = true;
121
+ this.feedBackService.feedbackResponse.requestFrom =
122
+ this.profile.fullName;
123
+ this.feedBackService.feedbackResponse.requestTo =
124
+ this.searchEmp.personName;
125
+ this.feedBackService.feedbackResponse.requestFeedback =
126
+ this.feedBackQuestion;
127
+ }
128
+ }
129
+ else {
130
+ this.submitted = true;
131
+ }
132
+ });
133
+ }
134
+ }
135
+ addResponse() {
136
+ if (this.isFeedbackValidated) {
137
+ const feedbackId = this.feedbackId, feedbackResponse = this.feedBackResponse;
138
+ this.feedBackService.addResponse({ feedbackId, feedbackResponse }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe((Response) => {
139
+ if (Response) {
140
+ if (Response instanceof Messages) {
141
+ this.showError(Response);
142
+ }
143
+ else {
144
+ this.submitted = true;
145
+ this.feedbackStatus = Constants.FEEDBACK_STATUS_RESPONDED;
146
+ /*const obj = {
147
+ name: 'changeFeedbackStatus',
148
+ data: this.feedbackStatus
149
+ };
150
+ this._listenerService.filter(obj);*/
151
+ this.feedBackService.responderForm = false;
152
+ this.feedBackService.feedBackSent = true;
153
+ this.feedBackService.pendingForm = true;
154
+ this.feedBackService.feedbackResponse.responseFeedback =
155
+ this.feedBackResponse;
156
+ }
157
+ }
158
+ else {
159
+ this.submitted = true;
160
+ }
161
+ });
162
+ }
163
+ }
164
+ errorOccured = false;
165
+ isSubmiting = false;
166
+ errorMsg = '';
167
+ showError(Response) {
168
+ if (!this.form) {
169
+ this.form = new Form(Constants.NO_VALUE, Constants.NO_VALUE, Constants.NO_VALUE, Constants.NO_VALUE, Constants.NO_VALUE, Constants.NO_VALUE, Response);
170
+ }
171
+ else {
172
+ this.errorOccured = true;
173
+ this.errorMsg = Response?.error[0];
174
+ // this.form.messages = Response;
175
+ }
176
+ window.scrollTo(0, 0);
177
+ }
178
+ handleFeedbackQuestion(event) {
179
+ this.feedBackQuestion = event;
180
+ this.handleFeedbackValidation();
181
+ }
182
+ handleFeedbackResponse(event) {
183
+ this.feedBackResponse = event;
184
+ this.handleResponseValidation();
185
+ }
186
+ handleUserSelected(event) {
187
+ this.searchEmp = {
188
+ personEmail: event.personEmail,
189
+ personName: event.personName
190
+ };
191
+ if (!this.feedBackQuestion) {
192
+ return;
193
+ }
194
+ this.handleFeedbackValidation();
195
+ }
196
+ handleResponseValidation() {
197
+ if (this.feedBackResponse.length >= 1 &&
198
+ this.feedBackResponse.length < 500) {
199
+ this.isResponseValidated = true;
200
+ }
201
+ else {
202
+ this.isResponseValidated = false;
203
+ }
204
+ }
205
+ handleFeedbackValidation() {
206
+ if (this.feedBackQuestion.length >= 1 &&
207
+ this.feedBackQuestion.length < 500 &&
208
+ this.searchEmp.personEmail) {
209
+ this.isFeedbackValidated = true;
210
+ }
211
+ else {
212
+ this.isFeedbackValidated = false;
213
+ }
214
+ }
215
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeedbackSectionComponent, deps: [{ token: i1.FeedBackService }, { token: i1.CoreI18nService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
216
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: FeedbackSectionComponent, isStandalone: true, selector: "app-feedback-section", inputs: { inboxItem: "inboxItem", profile: "profile" }, ngImport: i0, template: "<div class=\"popup-container\">\r\n <div class=\"d-flex align-items-center justify-content-between\" mat-dialog-title>\r\n <h3>{{i18n.translate('requestFeedback')}}</h3>\r\n <ds-button square icon matDialogClose>\r\n <ds-icon icon=\"close\" class=\"fs-20 fc-black\"></ds-icon>\r\n </ds-button>\r\n </div>\r\n <mat-dialog-content>\r\n <div class=\"d-flex flex-column align-items-center justify-content-center py-4\" *ngIf=\"submitted\">\r\n <div class=\"text-center mb-4\">\r\n <svg width=\"79\" height=\"76\" viewBox=\"0 0 79 76\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M59.9804 0.0998676L1.39239 19.2479C1.02223 19.3692 0.69498 19.5948 0.44999 19.8976C0.205 20.2005 0.0526985 20.5676 0.0113985 20.955C-0.0299016 21.3423 0.0415576 21.7333 0.217184 22.081C0.39281 22.4287 0.665128 22.7183 1.00139 22.9149L23.1454 35.7899C23.487 35.9886 23.8794 36.0828 24.274 36.0608C24.6686 36.0388 25.0481 35.9014 25.3654 35.6659L31.5894 31.0439L26.9674 37.2679C26.7318 37.5852 26.5944 37.9646 26.5722 38.3591C26.5499 38.7537 26.6439 39.1461 26.8424 39.4879L39.7174 61.6289C39.9138 61.9652 40.2031 62.2377 40.5506 62.4135C40.8981 62.5894 41.289 62.6611 41.6763 62.6201C42.0636 62.5791 42.4308 62.4272 42.7338 62.1825C43.0369 61.9378 43.2628 61.6108 43.3844 61.2409L62.5294 2.65187C62.6458 2.29686 62.6615 1.91654 62.5749 1.55313C62.4883 1.18971 62.3026 0.857401 62.0386 0.593071C61.7746 0.328741 61.4425 0.142726 61.0792 0.0556665C60.7159 -0.0313933 60.3355 -0.0160937 59.9804 0.0998676ZM40.9434 55.6999L31.0014 38.6069L42.9894 22.4689C43.2797 22.0798 43.4202 21.5993 43.3852 21.1152C43.3502 20.631 43.142 20.1757 42.7988 19.8325C42.4556 19.4893 42.0002 19.2811 41.5161 19.2461C41.032 19.2111 40.5514 19.3516 40.1624 19.6419L24.0254 31.6279L6.93339 21.6889L57.4514 5.18087L40.9434 55.6999ZM21.2134 44.2759L7.80139 57.6909C7.42253 58.0701 6.90853 58.2833 6.37246 58.2836C5.83638 58.2839 5.32215 58.0712 4.94289 57.6924C4.56363 57.3135 4.35041 56.7995 4.35013 56.2634C4.34985 55.7274 4.56253 55.2131 4.94139 54.8339L18.3564 41.4189C18.7353 41.04 19.2491 40.8272 19.7849 40.8272C20.3207 40.8272 20.8345 41.04 21.2134 41.4189C21.5923 41.7977 21.8051 42.3116 21.8051 42.8474C21.8051 43.3832 21.5923 43.897 21.2134 44.2759ZM3.49139 44.7839C3.30378 44.5963 3.15495 44.3736 3.05341 44.1285C2.95187 43.8834 2.89961 43.6207 2.89961 43.3554C2.89961 43.0901 2.95187 42.8274 3.05341 42.5823C3.15495 42.3371 3.30378 42.1144 3.49139 41.9269L8.78439 36.6339C9.16326 36.255 9.6771 36.0422 10.2129 36.0422C10.7487 36.0422 11.2625 36.255 11.6414 36.6339C12.0203 37.0127 12.2331 37.5266 12.2331 38.0624C12.2331 38.5982 12.0203 39.112 11.6414 39.4909L6.34939 44.7839C6.1618 44.9716 5.93903 45.1206 5.69384 45.2222C5.44864 45.3238 5.18582 45.3762 4.92039 45.3762C4.65497 45.3762 4.39215 45.3238 4.14695 45.2222C3.90176 45.1206 3.67899 44.9716 3.49139 44.7839ZM26.0014 50.9899C26.189 51.1774 26.3378 51.4001 26.4394 51.6453C26.5409 51.8904 26.5932 52.1531 26.5932 52.4184C26.5932 52.6837 26.5409 52.9464 26.4394 53.1915C26.3378 53.4366 26.189 53.6593 26.0014 53.8469L20.7014 59.1409C20.3225 59.5197 19.8087 59.7326 19.2729 59.7326C18.7371 59.7326 18.2233 59.5197 17.8444 59.1409C17.4655 58.762 17.2527 58.2482 17.2527 57.7124C17.2527 57.1766 17.4655 56.6627 17.8444 56.2839L23.1374 50.9909C23.325 50.8032 23.5477 50.6544 23.7928 50.5529C24.0379 50.4513 24.3006 50.3991 24.5659 50.3991C24.8312 50.3991 25.0939 50.4513 25.339 50.5529C25.5841 50.6544 25.8068 50.8032 25.9944 50.9909L26.0014 50.9899Z\"\r\n fill=\"#8E9AA0\" />\r\n <path\r\n d=\"M58.0015 75.3119C69.0472 75.3119 78.0015 66.3576 78.0015 55.3119C78.0015 44.2662 69.0472 35.3119 58.0015 35.3119C46.9558 35.3119 38.0015 44.2662 38.0015 55.3119C38.0015 66.3576 46.9558 75.3119 58.0015 75.3119Z\"\r\n fill=\"#00C48C\" />\r\n <path\r\n d=\"M56.8804 57.3183L54.0346 54.4725L52.9743 55.5336L56.8774 59.4367L65.8354 50.5267L65.4927 50.0138C63.8557 47.5812 61.1134 46.002 58.0015 46.002C53.0313 46.002 49.0015 50.031 49.0015 55.002C49.0015 59.9729 53.0305 64.002 58.0015 64.002C62.9716 64.002 67.0007 59.9729 67.0015 55.0035H65.5017C65.5017 55.005 65.5017 55.0072 65.5017 55.0095C65.5017 59.1503 62.1453 62.5067 58.0045 62.5067C53.8637 62.5067 50.5072 59.1503 50.5072 55.0095C50.5072 50.8686 53.8637 47.5122 58.0045 47.5122C60.3793 47.5122 62.4962 48.6168 63.87 50.3392L63.882 50.3542L56.8804 57.3183Z\"\r\n fill=\"white\" />\r\n </svg>\r\n\r\n </div>\r\n <h2 class=\"fs-16 fw-medium fc-black mb-4 text-center\">\r\n {{i18n.translate('submittedSuccessfully')}}\r\n </h2>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!submitted\">\r\n <div class=\"mb-3\" *ngIf=\"feedBackService.feedbackForm \">\r\n <app-search-employee #employee label=\"{{i18n.translate('requestTo')}}\" [field]=\"searchEmp\"\r\n [labelTextReadMode]=\"i18n.translate('requestTo')\" [labelTextWriteMode]=\"i18n.translate('requestTo')\"\r\n [name]=\"'searchEmp'\" (emitedValue)=\"handleUserSelected($event)\">\r\n </app-search-employee>\r\n <app-textarea #request [field]=\"employeeInput\" name=\"employeeInput\" label=\"{{i18n.translate('feedback')}}\"\r\n [required]=\"true\" [minLength]='1' (emitedValue)=\"handleFeedbackQuestion($event)\" [maxLength]='500'\r\n [errorMessage]=\"i18n.translate('lenghtMin1Max500')\">\r\n </app-textarea>\r\n </div>\r\n\r\n <div class=\"info-section\" *ngIf=\"!feedBackService.feedbackForm\">\r\n <ng-container *ngIf=\"feedBackService.responderForm\">\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('requestFrom')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestFrom}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('requestTo')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestTo}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('feedbackQuestion')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestFeedback}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('feedback')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.responseFeedback}}\"></app-info-item>\r\n <app-textarea #request class=\"full mx-3 mt-3 section-item\" [field]=\"employeeInput\" name=\"employeeInput\"\r\n label=\"{{i18n.translate('feedback')}}\" [required]=\"true\" [minLength]='1'\r\n (emitedValue)=\"handleFeedbackResponse($event)\" [maxLength]='500'\r\n [errorMessage]=\"i18n.translate('lenghtMin1Max500')\">\r\n </app-textarea>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"feedBackService.pendingForm\" id=\"responce_form\">\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('requestFrom')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestFrom}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('requestTo')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestTo}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('feedbackQuestion')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestFeedback}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('feedback')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.responseFeedback}}\"></app-info-item>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-center w-100 gap-3\" *ngIf=\"!submitted\">\r\n <ds-button shape=\"outline\" matDialogClose>\r\n {{i18n.translate('Cancel')}}\r\n </ds-button>\r\n <ds-button *ngIf=\"feedBackService.feedbackForm\" (click)=\"addFeedback()\"\r\n disabled=\"{{!(isFeedbackValidated)}}\">\r\n {{i18n.translate('submit')}}\r\n </ds-button>\r\n <ds-button *ngIf=\"!feedBackService.feedbackForm && feedBackService.responderForm\"\r\n disabled=\"{{!(isResponseValidated)}}\" (click)=\"addResponse()\">\r\n {{i18n.translate('submit')}}\r\n </ds-button>\r\n </div>\r\n </ng-container>\r\n\r\n </mat-dialog-content>\r\n\r\n</div>\r\n", styles: ["::ng-deep .main-popup{--popup-max-width: 700px !important;--popup-width: 100% !important}\n"], dependencies: [{ kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SearchEmployeeComponent, selector: "app-search-employee", inputs: ["valueName", "className", "optional", "data", "floatLabel", "error", "showEdit", "arrayList", "isUniqueUsers"], outputs: ["selectedEmp", "onInputChange", "editDirectManger", "deleteDirectManger", "emitedDeletedValue"] }, { kind: "component", type: TextareaComponent, selector: "app-textarea", inputs: ["className", "preventSpecailChar"] }, { kind: "component", type: InfoItemComponent, selector: "app-info-item", inputs: ["label", "value", "name", "type", "dateType", "multiple", "insideTable", "hasLabel", "arrayList", "actionType", "download"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] });
217
+ }
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeedbackSectionComponent, decorators: [{
219
+ type: Component,
220
+ args: [{ selector: 'app-feedback-section', schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [
221
+ MatDialogContent,
222
+ NgIf,
223
+ SearchEmployeeComponent,
224
+ TextareaComponent,
225
+ InfoItemComponent,
226
+ MatDialogTitle,
227
+ MatDialogClose
228
+ ], standalone: true, template: "<div class=\"popup-container\">\r\n <div class=\"d-flex align-items-center justify-content-between\" mat-dialog-title>\r\n <h3>{{i18n.translate('requestFeedback')}}</h3>\r\n <ds-button square icon matDialogClose>\r\n <ds-icon icon=\"close\" class=\"fs-20 fc-black\"></ds-icon>\r\n </ds-button>\r\n </div>\r\n <mat-dialog-content>\r\n <div class=\"d-flex flex-column align-items-center justify-content-center py-4\" *ngIf=\"submitted\">\r\n <div class=\"text-center mb-4\">\r\n <svg width=\"79\" height=\"76\" viewBox=\"0 0 79 76\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M59.9804 0.0998676L1.39239 19.2479C1.02223 19.3692 0.69498 19.5948 0.44999 19.8976C0.205 20.2005 0.0526985 20.5676 0.0113985 20.955C-0.0299016 21.3423 0.0415576 21.7333 0.217184 22.081C0.39281 22.4287 0.665128 22.7183 1.00139 22.9149L23.1454 35.7899C23.487 35.9886 23.8794 36.0828 24.274 36.0608C24.6686 36.0388 25.0481 35.9014 25.3654 35.6659L31.5894 31.0439L26.9674 37.2679C26.7318 37.5852 26.5944 37.9646 26.5722 38.3591C26.5499 38.7537 26.6439 39.1461 26.8424 39.4879L39.7174 61.6289C39.9138 61.9652 40.2031 62.2377 40.5506 62.4135C40.8981 62.5894 41.289 62.6611 41.6763 62.6201C42.0636 62.5791 42.4308 62.4272 42.7338 62.1825C43.0369 61.9378 43.2628 61.6108 43.3844 61.2409L62.5294 2.65187C62.6458 2.29686 62.6615 1.91654 62.5749 1.55313C62.4883 1.18971 62.3026 0.857401 62.0386 0.593071C61.7746 0.328741 61.4425 0.142726 61.0792 0.0556665C60.7159 -0.0313933 60.3355 -0.0160937 59.9804 0.0998676ZM40.9434 55.6999L31.0014 38.6069L42.9894 22.4689C43.2797 22.0798 43.4202 21.5993 43.3852 21.1152C43.3502 20.631 43.142 20.1757 42.7988 19.8325C42.4556 19.4893 42.0002 19.2811 41.5161 19.2461C41.032 19.2111 40.5514 19.3516 40.1624 19.6419L24.0254 31.6279L6.93339 21.6889L57.4514 5.18087L40.9434 55.6999ZM21.2134 44.2759L7.80139 57.6909C7.42253 58.0701 6.90853 58.2833 6.37246 58.2836C5.83638 58.2839 5.32215 58.0712 4.94289 57.6924C4.56363 57.3135 4.35041 56.7995 4.35013 56.2634C4.34985 55.7274 4.56253 55.2131 4.94139 54.8339L18.3564 41.4189C18.7353 41.04 19.2491 40.8272 19.7849 40.8272C20.3207 40.8272 20.8345 41.04 21.2134 41.4189C21.5923 41.7977 21.8051 42.3116 21.8051 42.8474C21.8051 43.3832 21.5923 43.897 21.2134 44.2759ZM3.49139 44.7839C3.30378 44.5963 3.15495 44.3736 3.05341 44.1285C2.95187 43.8834 2.89961 43.6207 2.89961 43.3554C2.89961 43.0901 2.95187 42.8274 3.05341 42.5823C3.15495 42.3371 3.30378 42.1144 3.49139 41.9269L8.78439 36.6339C9.16326 36.255 9.6771 36.0422 10.2129 36.0422C10.7487 36.0422 11.2625 36.255 11.6414 36.6339C12.0203 37.0127 12.2331 37.5266 12.2331 38.0624C12.2331 38.5982 12.0203 39.112 11.6414 39.4909L6.34939 44.7839C6.1618 44.9716 5.93903 45.1206 5.69384 45.2222C5.44864 45.3238 5.18582 45.3762 4.92039 45.3762C4.65497 45.3762 4.39215 45.3238 4.14695 45.2222C3.90176 45.1206 3.67899 44.9716 3.49139 44.7839ZM26.0014 50.9899C26.189 51.1774 26.3378 51.4001 26.4394 51.6453C26.5409 51.8904 26.5932 52.1531 26.5932 52.4184C26.5932 52.6837 26.5409 52.9464 26.4394 53.1915C26.3378 53.4366 26.189 53.6593 26.0014 53.8469L20.7014 59.1409C20.3225 59.5197 19.8087 59.7326 19.2729 59.7326C18.7371 59.7326 18.2233 59.5197 17.8444 59.1409C17.4655 58.762 17.2527 58.2482 17.2527 57.7124C17.2527 57.1766 17.4655 56.6627 17.8444 56.2839L23.1374 50.9909C23.325 50.8032 23.5477 50.6544 23.7928 50.5529C24.0379 50.4513 24.3006 50.3991 24.5659 50.3991C24.8312 50.3991 25.0939 50.4513 25.339 50.5529C25.5841 50.6544 25.8068 50.8032 25.9944 50.9909L26.0014 50.9899Z\"\r\n fill=\"#8E9AA0\" />\r\n <path\r\n d=\"M58.0015 75.3119C69.0472 75.3119 78.0015 66.3576 78.0015 55.3119C78.0015 44.2662 69.0472 35.3119 58.0015 35.3119C46.9558 35.3119 38.0015 44.2662 38.0015 55.3119C38.0015 66.3576 46.9558 75.3119 58.0015 75.3119Z\"\r\n fill=\"#00C48C\" />\r\n <path\r\n d=\"M56.8804 57.3183L54.0346 54.4725L52.9743 55.5336L56.8774 59.4367L65.8354 50.5267L65.4927 50.0138C63.8557 47.5812 61.1134 46.002 58.0015 46.002C53.0313 46.002 49.0015 50.031 49.0015 55.002C49.0015 59.9729 53.0305 64.002 58.0015 64.002C62.9716 64.002 67.0007 59.9729 67.0015 55.0035H65.5017C65.5017 55.005 65.5017 55.0072 65.5017 55.0095C65.5017 59.1503 62.1453 62.5067 58.0045 62.5067C53.8637 62.5067 50.5072 59.1503 50.5072 55.0095C50.5072 50.8686 53.8637 47.5122 58.0045 47.5122C60.3793 47.5122 62.4962 48.6168 63.87 50.3392L63.882 50.3542L56.8804 57.3183Z\"\r\n fill=\"white\" />\r\n </svg>\r\n\r\n </div>\r\n <h2 class=\"fs-16 fw-medium fc-black mb-4 text-center\">\r\n {{i18n.translate('submittedSuccessfully')}}\r\n </h2>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!submitted\">\r\n <div class=\"mb-3\" *ngIf=\"feedBackService.feedbackForm \">\r\n <app-search-employee #employee label=\"{{i18n.translate('requestTo')}}\" [field]=\"searchEmp\"\r\n [labelTextReadMode]=\"i18n.translate('requestTo')\" [labelTextWriteMode]=\"i18n.translate('requestTo')\"\r\n [name]=\"'searchEmp'\" (emitedValue)=\"handleUserSelected($event)\">\r\n </app-search-employee>\r\n <app-textarea #request [field]=\"employeeInput\" name=\"employeeInput\" label=\"{{i18n.translate('feedback')}}\"\r\n [required]=\"true\" [minLength]='1' (emitedValue)=\"handleFeedbackQuestion($event)\" [maxLength]='500'\r\n [errorMessage]=\"i18n.translate('lenghtMin1Max500')\">\r\n </app-textarea>\r\n </div>\r\n\r\n <div class=\"info-section\" *ngIf=\"!feedBackService.feedbackForm\">\r\n <ng-container *ngIf=\"feedBackService.responderForm\">\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('requestFrom')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestFrom}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('requestTo')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestTo}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('feedbackQuestion')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestFeedback}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('feedback')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.responseFeedback}}\"></app-info-item>\r\n <app-textarea #request class=\"full mx-3 mt-3 section-item\" [field]=\"employeeInput\" name=\"employeeInput\"\r\n label=\"{{i18n.translate('feedback')}}\" [required]=\"true\" [minLength]='1'\r\n (emitedValue)=\"handleFeedbackResponse($event)\" [maxLength]='500'\r\n [errorMessage]=\"i18n.translate('lenghtMin1Max500')\">\r\n </app-textarea>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"feedBackService.pendingForm\" id=\"responce_form\">\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('requestFrom')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestFrom}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('requestTo')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestTo}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('feedbackQuestion')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.requestFeedback}}\"></app-info-item>\r\n <app-info-item class=\"info-item w-100\" label=\"{{i18n.translate('feedback')}}\"\r\n value=\"{{feedBackService?.feedbackResponse?.responseFeedback}}\"></app-info-item>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-center w-100 gap-3\" *ngIf=\"!submitted\">\r\n <ds-button shape=\"outline\" matDialogClose>\r\n {{i18n.translate('Cancel')}}\r\n </ds-button>\r\n <ds-button *ngIf=\"feedBackService.feedbackForm\" (click)=\"addFeedback()\"\r\n disabled=\"{{!(isFeedbackValidated)}}\">\r\n {{i18n.translate('submit')}}\r\n </ds-button>\r\n <ds-button *ngIf=\"!feedBackService.feedbackForm && feedBackService.responderForm\"\r\n disabled=\"{{!(isResponseValidated)}}\" (click)=\"addResponse()\">\r\n {{i18n.translate('submit')}}\r\n </ds-button>\r\n </div>\r\n </ng-container>\r\n\r\n </mat-dialog-content>\r\n\r\n</div>\r\n", styles: ["::ng-deep .main-popup{--popup-max-width: 700px !important;--popup-width: 100% !important}\n"] }]
229
+ }], ctorParameters: () => [{ type: i1.FeedBackService }, { type: i1.CoreI18nService }, { type: undefined, decorators: [{
230
+ type: Inject,
231
+ args: [MAT_DIALOG_DATA]
232
+ }] }], propDecorators: { inboxItem: [{
233
+ type: Input
234
+ }], profile: [{
235
+ type: Input
236
+ }] } });
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stc2VjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9icG0tY29yZS9zcmMvbGliL2NvbXBvbmVudHMvYXBwLWNvbXBvbmVudC1zZWN0aW9ucy9mZWVkYmFjay1zZWN0aW9uL2ZlZWRiYWNrLXNlY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1jb21wb25lbnQtc2VjdGlvbnMvZmVlZGJhY2stc2VjdGlvbi9mZWVkYmFjay1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzNHLE9BQU8sRUFBQyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRTNHLE9BQU8sRUFBQyxJQUFJLEVBQWEsUUFBUSxFQUFrQixNQUFNLHFCQUFxQixDQUFDO0FBQy9FLE9BQU8sS0FBSyxTQUFTLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXRHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFrQmhFLE1BQU0sT0FBTyx3QkFBd0I7SUFnQjFCO0lBQ0E7SUFDeUI7SUFqQnpCLFNBQVMsQ0FBWTtJQUNyQixPQUFPLENBQWtCO0lBQ2xDLElBQUksQ0FBTztJQUNYLFNBQVMsQ0FBTTtJQUNmLFNBQVMs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QyxlQUFlO3lDQWpCaEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1RpdGxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge0NvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbmplY3QsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvcmVJMThuU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQge0Zvcm0sIEluYm94SXRlbSwgTWVzc2FnZXMsIFByb2ZpbGVJbmZvRHJvcH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCAqIGFzIENvbnN0YW50cyBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHtOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0luZm9JdGVtQ29tcG9uZW50LCBTZWFyY2hFbXBsb3llZUNvbXBvbmVudCwgVGV4dGFyZWFDb21wb25lbnR9IGZyb20gXCIuLi8uLi9zaGFyZWQtY29tcG9uZW50c1wiO1xyXG5pbXBvcnQge0ZlZWRCYWNrU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzXCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZlZWRiYWNrLXNlY3Rpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWVkYmFjay1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mZWVkYmFjay1zZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXHJcbiAgICBOZ0lmLFxyXG4gICAgU2VhcmNoRW1wbG95ZWVDb21wb25lbnQsXHJcbiAgICBUZXh0YXJlYUNvbXBvbmVudCxcclxuICAgIEluZm9JdGVtQ29tcG9uZW50LFxyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXREaWFsb2dDbG9zZVxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZlZWRiYWNrU2VjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgaW5ib3hJdGVtOiBJbmJveEl0ZW07XHJcbiAgQElucHV0KCkgcHJvZmlsZTogUHJvZmlsZUluZm9Ecm9wO1xyXG4gIGZvcm06IEZvcm07XHJcbiAgc2VhcmNoRW1wOiBhbnk7XHJcbiAgc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgZmVlZGJhY2tTdGF0dXM6IHN0cmluZyA9IG51bGw7XHJcbiAgZmVlZEJhY2tRdWVzdGlvbjogc3RyaW5nID0gbnVsbDtcclxuICBmZWVkQmFja1Jlc3BvbnNlOiBzdHJpbmcgPSBudWxsO1xyXG4gIGlzRmVlZGJhY2tWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICBpc1Jlc3BvbnNlVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgZW1wbG95ZWVJbnB1dDogc3RyaW5nID0gbnVsbDtcclxuICBmZWVkYmFja0lkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGZlZWRCYWNrU2VydmljZTogRmVlZEJhY2tTZXJ2aWNlLFxyXG4gICAgcHVibGljIGkxOG46IENvcmVJMThuU2VydmljZSxcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLnByb2ZpbGUgPSBkYXRhLnByb2ZpbGU7XHJcbiAgICB0aGlzLmluYm94SXRlbSA9IGRhdGEuaW5ib3hJdGVtO1xyXG4gICAgdGhpcy5mb3JtID0gZGF0YS5mb3JtO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZmVlZEJhY2tTZXJ2aWNlLmZlZWRCYWNrU2VudCkge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5pbmJveEl0ZW07XHJcbiAgICAgIGlmIChpdGVtPy5jYW5SZXF1ZXN0RmVlZGJhY2sgPT09ICd0cnVlJykge1xyXG4gICAgICAgIHRoaXMuZmVlZGJhY2tTdGF0dXMgPSBDb25zdGFudHMuRkVFREJBQ0tfU1RBVFVTX1JFUVVFU1Q7XHJcbiAgICAgICAgdGhpcy5mZWVkQmFja1NlcnZpY2UuZmVlZGJhY2tGb3JtID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGl0ZW0uaXNSZXF1ZXN0ZWQgPT09ICd0cnVlJyAmJlxyXG4gICAgICAgIGl0ZW0uaGFzRmVlZGJhY2sgPT09ICd0cnVlJyAmJlxyXG4gICAgICAgIGl0ZW0uaXNQZW5kaW5nID09PSAnZmFsc2UnICYmXHJcbiAgICAgICAgaXRlbS5pc1Jlc3BvbmRlZCA9PT0gJ2ZhbHNlJ1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZlZWRiYWNrU3RhdHVzID0gQ29uc3RhbnRzLkZFRURCQUNLX1NUQVRVU19XQUlUSU5HO1xyXG4gICAgICAgIHRoaXMuZmVlZEJhY2tTZXJ2aWNlLnBlbmRpbmdGb3JtID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldEZlZWRCYWNrKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBpdGVtLmlzUmVxdWVzdGVkID09PSAnZmFsc2UnICYmXHJcbiAgICAgICAgaXRlbS5oYXNGZWVkYmFjayA9PT0gJ3RydWUnICYmXHJcbiAgICAgICAgaXRlbS5pc1BlbmRpbmcgPT09ICd0cnVlJyAmJlxyXG4gICAgICAgIGl0ZW0uaXNSZXNwb25kZWQgPT09ICdmYWxzZSdcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5mZWVkYmFja1N0YXR1cyA9IENvbnN0YW50cy5GRUVEQkFDS19TVEFUVVNfUkVTUE9ORDtcclxuICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5yZXNwb25kZXJGb3JtID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldEZlZWRCYWNrKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBpdGVtLmlzUmVxdWVzdGVkID09PSAndHJ1ZScgJiZcclxuICAgICAgICBpdGVtLmhhc0ZlZWRiYWNrID09PSAndHJ1ZScgJiZcclxuICAgICAgICBpdGVtLmlzUGVuZGluZyA9PT0gJ2ZhbHNlJyAmJlxyXG4gICAgICAgIGl0ZW0uaXNSZXNwb25kZWQgPT09ICd0cnVlJ1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZlZWRiYWNrU3RhdHVzID0gQ29uc3RhbnRzLkZFRURCQUNLX1NUQVRVU19SRVNQT05ERUQ7XHJcbiAgICAgICAgdGhpcy5mZWVkQmFja1NlcnZpY2UucGVuZGluZ0Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2V0RmVlZEJhY2soKTtcclxuICAgICAgfVxyXG4gICAgICAvKiAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiAnY2hhbmdlRmVlZGJhY2tTdGF0dXMnLFxyXG4gICAgICAgICAgICAgIGRhdGE6IHRoaXMuZmVlZGJhY2tTdGF0dXMhXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyU2VydmljZS5maWx0ZXIob2JqKTsqL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmVlZEJhY2soKSB7XHJcbiAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5nZXRGZWVkYmFjayh0aGlzLnByb2ZpbGUuZW1wbG95ZWVFbWFpbCkucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcclxuICAgICkuc3Vic2NyaWJlKChSZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChSZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChSZXNwb25zZSBpbnN0YW5jZW9mIE1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dFcnJvcihSZXNwb25zZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHJlc3AgPSBSZXNwb25zZVsnaXRlbXMnXVswXTtcclxuICAgICAgICAgIHRoaXMuZmVlZEJhY2tTZXJ2aWNlLmZlZWRiYWNrUmVzcG9uc2UucmVxdWVzdEZyb20gPVxyXG4gICAgICAgICAgICByZXNwLmZyb21bJ2ZpcnN0TmFtZSddICtcclxuICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgcmVzcC5mcm9tWydtaWRkbGVOYW1lJ10gK1xyXG4gICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICByZXNwLmZyb21bJ2ZhbWlseU5hbWUnXTtcclxuICAgICAgICAgIHRoaXMuZmVlZEJhY2tTZXJ2aWNlLmZlZWRiYWNrUmVzcG9uc2UucmVxdWVzdFRvID1cclxuICAgICAgICAgICAgcmVzcC50b1snZmlyc3ROYW1lJ10gK1xyXG4gICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICByZXNwLnRvWydtaWRkbGVOYW1lJ10gK1xyXG4gICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICByZXNwLnRvWydmYW1pbHlOYW1lJ107XHJcbiAgICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5mZWVkYmFja1Jlc3BvbnNlLnJlcXVlc3RGZWVkYmFjayA9XHJcbiAgICAgICAgICAgIHJlc3AucXVlcnk7XHJcbiAgICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5mZWVkYmFja1Jlc3BvbnNlLnJlc3BvbnNlRmVlZGJhY2sgPVxyXG4gICAgICAgICAgICByZXNwLnJlc3BvbnNlO1xyXG4gICAgICAgICAgdGhpcy5mZWVkYmFja0lkID0gcmVzcC5pZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRGZWVkYmFjaygpIHtcclxuICAgIGlmICh0aGlzLmlzRmVlZGJhY2tWYWxpZGF0ZWQpIHtcclxuICAgICAgY29uc3QgZW1haWwgPSB0aGlzLnNlYXJjaEVtcC5wZXJzb25FbWFpbCxcclxuICAgICAgICBxdWVzdGlvbiA9IHRoaXMuZmVlZEJhY2tRdWVzdGlvbjtcclxuICAgICAgdGhpcy5mZWVkQmFja1NlcnZpY2Uuc3VibWl0RmVlZGJhY2soe2VtYWlsLCBxdWVzdGlvbn0pLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcclxuICAgICAgKS5zdWJzY3JpYmUoKFJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoUmVzcG9uc2UpIHtcclxuICAgICAgICAgIGlmIChSZXNwb25zZSBpbnN0YW5jZW9mIE1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKFJlc3BvbnNlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmVlZGJhY2tTdGF0dXMgPSBDb25zdGFudHMuRkVFREJBQ0tfU1RBVFVTX1dBSVRJTkc7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgLy8gICBuYW1lOiAnY2hhbmdlRmVlZGJhY2tTdGF0dXMnLFxyXG4gICAgICAgICAgICAvLyAgIGRhdGE6IHRoaXMuZmVlZGJhY2tTdGF0dXNcclxuICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgLy8gdGhpcy5fbGlzdGVuZXJTZXJ2aWNlLmZpbHRlcihvYmopO1xyXG4gICAgICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5mZWVkYmFja0Zvcm0gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5mZWVkQmFja1NlcnZpY2UucGVuZGluZ0Zvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5mZWVkQmFja1NlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5mZWVkYmFja1Jlc3BvbnNlLnJlcXVlc3RGcm9tID1cclxuICAgICAgICAgICAgICB0aGlzLnByb2ZpbGUuZnVsbE5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZmVlZEJhY2tTZXJ2aWNlLmZlZWRiYWNrUmVzcG9uc2UucmVxdWVzdFRvID1cclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEVtcC5wZXJzb25OYW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5mZWVkYmFja1Jlc3BvbnNlLnJlcXVlc3RGZWVkYmFjayA9XHJcbiAgICAgICAgICAgICAgdGhpcy5mZWVkQmFja1F1ZXN0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGFkZFJlc3BvbnNlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNGZWVkYmFja1ZhbGlkYXRlZCkge1xyXG4gICAgICBjb25zdCBmZWVkYmFja0lkID0gdGhpcy5mZWVkYmFja0lkLFxyXG4gICAgICAgIGZlZWRiYWNrUmVzcG9uc2UgPSB0aGlzLmZlZWRCYWNrUmVzcG9uc2U7XHJcbiAgICAgIHRoaXMuZmVlZEJhY2tTZXJ2aWNlLmFkZFJlc3BvbnNlKHtmZWVkYmFja0lkLCBmZWVkYmFja1Jlc3BvbnNlfSkucGlwZShcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgICApLnN1YnNjcmliZSgoUmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChSZXNwb25zZSkge1xyXG4gICAgICAgICAgaWYgKFJlc3BvbnNlIGluc3RhbmNlb2YgTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoUmVzcG9uc2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZlZWRiYWNrU3RhdHVzID0gQ29uc3RhbnRzLkZFRURCQUNLX1NUQVRVU19SRVNQT05ERUQ7XHJcbiAgICAgICAgICAgIC8qY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdjaGFuZ2VGZWVkYmFja1N0YXR1cycsXHJcbiAgICAgICAgICAgICAgZGF0YTogdGhpcy5mZWVkYmFja1N0YXR1c1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lclNlcnZpY2UuZmlsdGVyKG9iaik7Ki9cclxuICAgICAgICAgICAgdGhpcy5mZWVkQmFja1NlcnZpY2UucmVzcG9uZGVyRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5mZWVkQmFja1NlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZlZWRCYWNrU2VydmljZS5wZW5kaW5nRm9ybSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZmVlZEJhY2tTZXJ2aWNlLmZlZWRiYWNrUmVzcG9uc2UucmVzcG9uc2VGZWVkYmFjayA9XHJcbiAgICAgICAgICAgICAgdGhpcy5mZWVkQmFja1Jlc3BvbnNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXJyb3JPY2N1cmVkID0gZmFsc2U7XHJcbiAgaXNTdWJtaXRpbmcgPSBmYWxzZTtcclxuICBlcnJvck1zZyA9ICcnO1xyXG5cclxuICBzaG93RXJyb3IoUmVzcG9uc2U6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0pIHtcclxuICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm0oXHJcbiAgICAgICAgQ29uc3RhbnRzLk5PX1ZBTFVFLFxyXG4gICAgICAgIENvbnN0YW50cy5OT19WQUxVRSxcclxuICAgICAgICBDb25zdGFudHMuTk9fVkFMVUUsXHJcbiAgICAgICAgQ29uc3RhbnRzLk5PX1ZBTFVFLFxyXG4gICAgICAgIENvbnN0YW50cy5OT19WQUxVRSxcclxuICAgICAgICBDb25zdGFudHMuTk9fVkFMVUUsXHJcbiAgICAgICAgUmVzcG9uc2VcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXJyb3JPY2N1cmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5lcnJvck1zZyA9IFJlc3BvbnNlPy5lcnJvclswXTtcclxuICAgICAgLy8gdGhpcy5mb3JtLm1lc3NhZ2VzID0gUmVzcG9uc2U7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGZWVkYmFja1F1ZXN0aW9uKGV2ZW50KSB7XHJcbiAgICB0aGlzLmZlZWRCYWNrUXVlc3Rpb24gPSBldmVudDtcclxuICAgIHRoaXMuaGFuZGxlRmVlZGJhY2tWYWxpZGF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGZWVkYmFja1Jlc3BvbnNlKGV2ZW50KSB7XHJcbiAgICB0aGlzLmZlZWRCYWNrUmVzcG9uc2UgPSBldmVudDtcclxuICAgIHRoaXMuaGFuZGxlUmVzcG9uc2VWYWxpZGF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVVc2VyU2VsZWN0ZWQoZXZlbnQpIHtcclxuICAgIHRoaXMuc2VhcmNoRW1wID0ge1xyXG4gICAgICBwZXJzb25FbWFpbDogZXZlbnQucGVyc29uRW1haWwsXHJcbiAgICAgIHBlcnNvbk5hbWU6IGV2ZW50LnBlcnNvbk5hbWVcclxuICAgIH07XHJcbiAgICBpZiAoIXRoaXMuZmVlZEJhY2tRdWVzdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZUZlZWRiYWNrVmFsaWRhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmVzcG9uc2VWYWxpZGF0aW9uKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZlZWRCYWNrUmVzcG9uc2UubGVuZ3RoID49IDEgJiZcclxuICAgICAgdGhpcy5mZWVkQmFja1Jlc3BvbnNlLmxlbmd0aCA8IDUwMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaXNSZXNwb25zZVZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzUmVzcG9uc2VWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUZlZWRiYWNrVmFsaWRhdGlvbigpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mZWVkQmFja1F1ZXN0aW9uLmxlbmd0aCA+PSAxICYmXHJcbiAgICAgIHRoaXMuZmVlZEJhY2tRdWVzdGlvbi5sZW5ndGggPCA1MDAgJiZcclxuICAgICAgdGhpcy5zZWFyY2hFbXAucGVyc29uRW1haWxcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzRmVlZGJhY2tWYWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0ZlZWRiYWNrVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiIG1hdC1kaWFsb2ctdGl0bGU+XHJcbiAgICA8aDM+e3tpMThuLnRyYW5zbGF0ZSgncmVxdWVzdEZlZWRiYWNrJyl9fTwvaDM+XHJcbiAgICA8ZHMtYnV0dG9uIHNxdWFyZSBpY29uIG1hdERpYWxvZ0Nsb3NlPlxyXG4gICAgICA8ZHMtaWNvbiBpY29uPVwiY2xvc2VcIiBjbGFzcz1cImZzLTIwIGZjLWJsYWNrXCI+PC9kcy1pY29uPlxyXG4gICAgPC9kcy1idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktNFwiICpuZ0lmPVwic3VibWl0dGVkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtYi00XCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjc5XCIgaGVpZ2h0PVwiNzZcIiB2aWV3Qm94PVwiMCAwIDc5IDc2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTU5Ljk4MDQgMC4wOTk4Njc2TDEuMzkyMzkgMTkuMjQ3OUMxLjAyMjIzIDE5LjM2OTIgMC42OTQ5OCAxOS41OTQ4IDAuNDQ5OTkgMTkuODk3NkMwLjIwNSAyMC4yMDA1IDAuMDUyNjk4NSAyMC41Njc2IDAuMDExMzk4NSAyMC45NTVDLTAuMDI5OTAxNiAyMS4zNDIzIDAuMDQxNTU3NiAyMS43MzMzIDAuMjE3MTg0IDIyLjA4MUMwLjM5MjgxIDIyLjQyODcgMC42NjUxMjggMjIuNzE4MyAxLjAwMTM5IDIyLjkxNDlMMjMuMTQ1NCAzNS43ODk5QzIzLjQ4NyAzNS45ODg2IDIzLjg3OTQgMzYuMDgyOCAyNC4yNzQgMzYuMDYwOEMyNC42Njg2IDM2LjAzODggMjUuMDQ4MSAzNS45MDE0IDI1LjM2NTQgMzUuNjY1OUwzMS41ODk0IDMxLjA0MzlMMjYuOTY3NCAzNy4yNjc5QzI2LjczMTggMzcuNTg1MiAyNi41OTQ0IDM3Ljk2NDYgMjYuNTcyMiAzOC4zNTkxQzI2LjU0OTkgMzguNzUzNyAyNi42NDM5IDM5LjE0NjEgMjYuODQyNCAzOS40ODc5TDM5LjcxNzQgNjEuNjI4OUMzOS45MTM4IDYxLjk2NTIgNDAuMjAzMSA2Mi4yMzc3IDQwLjU1MDYgNjIuNDEzNUM0MC44OTgxIDYyLjU4OTQgNDEuMjg5IDYyLjY2MTEgNDEuNjc2MyA2Mi42MjAxQzQyLjA2MzYgNjIuNTc5MSA0Mi40MzA4IDYyLjQyNzIgNDIuNzMzOCA2Mi4xODI1QzQzLjAzNjkgNjEuOTM3OCA0My4yNjI4IDYxLjYxMDggNDMuMzg0NCA2MS4yNDA5TDYyLjUyOTQgMi42NTE4N0M2Mi42NDU4IDIuMjk2ODYgNjIuNjYxNSAxLjkxNjU0IDYyLjU3NDkgMS41NTMxM0M2Mi40ODgzIDEuMTg5NzEgNjIuMzAyNiAwLjg1NzQwMSA2Mi4wMzg2IDAuNTkzMDcxQzYxLjc3NDYgMC4zMjg3NDEgNjEuNDQyNSAwLjE0MjcyNiA2MS4wNzkyIDAuMDU1NjY2NUM2MC43MTU5IC0wLjAzMTM5MzMgNjAuMzM1NSAtMC4wMTYwOTM3IDU5Ljk4MDQgMC4wOTk4Njc2Wk00MC45NDM0IDU1LjY5OTlMMzEuMDAxNCAzOC42MDY5TDQyLjk4OTQgMjIuNDY4OUM0My4yNzk3IDIyLjA3OTggNDMuNDIwMiAyMS41OTkzIDQzLjM4NTIgMjEuMTE1MkM0My4zNTAyIDIwLjYzMSA0My4xNDIgMjAuMTc1NyA0Mi43OTg4IDE5LjgzMjVDNDIuNDU1NiAxOS40ODkzIDQyLjAwMDIgMTkuMjgxMSA0MS41MTYxIDE5LjI0NjFDNDEuMDMyIDE5LjIxMTEgNDAuNTUxNCAxOS4zNTE2IDQwLjE2MjQgMTkuNjQxOUwyNC4wMjU0IDMxLjYyNzlMNi45MzMzOSAyMS42ODg5TDU3LjQ1MTQgNS4xODA4N0w0MC45NDM0IDU1LjY5OTlaTTIxLjIxMzQgNDQuMjc1OUw3LjgwMTM5IDU3LjY5MDlDNy40MjI1MyA1OC4wNzAxIDYuOTA4NTMgNTguMjgzMyA2LjM3MjQ2IDU4LjI4MzZDNS44MzYzOCA1OC4yODM5IDUuMzIyMTUgNTguMDcxMiA0Ljk0Mjg5IDU3LjY5MjRDNC41NjM2MyA1Ny4zMTM1IDQuMzUwNDEgNTYuNzk5NSA0LjM1MDEzIDU2LjI2MzRDNC4zNDk4NSA1NS43Mjc0IDQuNTYyNTMgNTUuMjEzMSA0Ljk0MTM5IDU0LjgzMzlMMTguMzU2NCA0MS40MTg5QzE4LjczNTMgNDEuMDQgMTkuMjQ5MSA0MC44MjcyIDE5Ljc4NDkgNDAuODI3MkMyMC4zMjA3IDQwLjgyNzIgMjAuODM0NSA0MS4wNCAyMS4yMTM0IDQxLjQxODlDMjEuNTkyMyA0MS43OTc3IDIxLjgwNTEgNDIuMzExNiAyMS44MDUxIDQyLjg0NzRDMjEuODA1MSA0My4zODMyIDIxLjU5MjMgNDMuODk3IDIxLjIxMzQgNDQuMjc1OVpNMy40OTEzOSA0NC43ODM5QzMuMzAzNzggNDQuNTk2MyAzLjE1NDk1IDQ0LjM3MzYgMy4wNTM0MSA0NC4xMjg1QzIuOTUxODcgNDMuODgzNCAyLjg5OTYxIDQzLjYyMDcgMi44OTk2MSA0My4zNTU0QzIuODk5NjEgNDMuMDkwMSAyLjk1MTg3IDQyLjgyNzQgMy4wNTM0MSA0Mi41ODIzQzMuMTU0OTUgNDIuMzM3MSAzLjMwMzc4IDQyLjExNDQgMy40OTEzOSA0MS45MjY5TDguNzg0MzkgMzYuNjMzOUM5LjE2MzI2IDM2LjI1NSA5LjY3NzEgMzYuMDQyMiAxMC4yMTI5IDM2LjA0MjJDMTAuNzQ4NyAzNi4wNDIyIDExLjI2MjUgMzYuMjU1IDExLjY0MTQgMzYuNjMzOUMxMi4wMjAzIDM3LjAxMjcgMTIuMjMzMSAzNy41MjY2IDEyLjIzMzEgMzguMDYyNEMxMi4yMzMxIDM4LjU5ODIgMTIuMDIwMyAzOS4xMTIgMTEuNjQxNCAzOS40OTA5TDYuMzQ5MzkgNDQuNzgzOUM2LjE2MTggNDQuOTcxNiA1LjkzOTAzIDQ1LjEyMDYgNS42OTM4NCA0NS4yMjIyQzUuNDQ4NjQgNDUuMzIzOCA1LjE4NTgyIDQ1LjM3NjIgNC45MjAzOSA0NS4zNzYyQzQuNjU0OTcgNDUuMzc2MiA0LjM5MjE1IDQ1LjMyMzggNC4xNDY5NSA0NS4yMjIyQzMuOTAxNzYgNDUuMTIwNiAzLjY3ODk5IDQ0Ljk3MTYgMy40OTEzOSA0NC43ODM5Wk0yNi4wMDE0IDUwLjk4OTlDMjYuMTg5IDUxLjE3NzQgMjYuMzM3OCA1MS40MDAxIDI2LjQzOTQgNTEuNjQ1M0MyNi41NDA5IDUxLjg5MDQgMjYuNTkzMiA1Mi4xNTMxIDI2LjU5MzIgNTIuNDE4NEMyNi41OTMyIDUyLjY4MzcgMjYuNTQwOSA1Mi45NDY0IDI2LjQzOTQgNTMuMTkxNUMyNi4zMzc4IDUzLjQzNjYgMjYuMTg5IDUzLjY1OTMgMjYuMDAxNCA1My44NDY5TDIwLjcwMTQgNTkuMTQwOUMyMC4zMjI1IDU5LjUxOTcgMTkuODA4NyA1OS43MzI2IDE5LjI3MjkgNTkuNzMyNkMxOC43MzcxIDU5LjczMjYgMTguMjIzMyA1OS41MTk3IDE3Ljg0NDQgNTkuMTQwOUMxNy40NjU1IDU4Ljc2MiAxNy4yNTI3IDU4LjI0ODIgMTcuMjUyNyA1Ny43MTI0QzE3LjI1MjcgNTcuMTc2NiAxNy40NjU1IDU2LjY2MjcgMTcuODQ0NCA1Ni4yODM5TDIzLjEzNzQgNTAuOTkwOUMyMy4zMjUgNTAuODAzMiAyMy41NDc3IDUwLjY1NDQgMjMuNzkyOCA1MC41NTI5QzI0LjAzNzkgNTAuNDUxMyAyNC4zMDA2IDUwLjM5OTEgMjQuNTY1OSA1MC4zOTkxQzI0LjgzMTIgNTAuMzk5MSAyNS4wOTM5IDUwLjQ1MTMgMjUuMzM5IDUwLjU1MjlDMjUuNTg0MSA1MC42NTQ0IDI1LjgwNjggNTAuODAzMiAyNS45OTQ0IDUwLjk5MDlMMjYuMDAxNCA1MC45ODk5WlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCIjOEU5QUEwXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNNTguMDAxNSA3NS4zMTE5QzY5LjA0NzIgNzUuMzExOSA3OC4wMDE1IDY2LjM1NzYgNzguMDAxNSA1NS4zMTE5Qzc4LjAwMTUgNDQuMjY2MiA2OS4wNDcyIDM1LjMxMTkgNTguMDAxNSAzNS4zMTE5QzQ2Ljk1NTggMzUuMzExOSAzOC4wMDE1IDQ0LjI2NjIgMzguMDAxNSA1NS4zMTE5QzM4LjAwMTUgNjYuMzU3NiA0Ni45NTU4IDc1LjMxMTkgNTguMDAxNSA3NS4zMTE5WlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCIjMDBDNDhDXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNNTYuODgwNCA1Ny4zMTgzTDU0LjAzNDYgNTQuNDcyNUw1Mi45NzQzIDU1LjUzMzZMNTYuODc3NCA1OS40MzY3TDY1LjgzNTQgNTAuNTI2N0w2NS40OTI3IDUwLjAxMzhDNjMuODU1NyA0Ny41ODEyIDYxLjExMzQgNDYuMDAyIDU4LjAwMTUgNDYuMDAyQzUzLjAzMTMgNDYuMDAyIDQ5LjAwMTUgNTAuMDMxIDQ5LjAwMTUgNTUuMDAyQzQ5LjAwMTUgNTkuOTcyOSA1My4wMzA1IDY0LjAwMiA1OC4wMDE1IDY0LjAwMkM2Mi45NzE2IDY0LjAwMiA2Ny4wMDA3IDU5Ljk3MjkgNjcuMDAxNSA1NS4wMDM1SDY1LjUwMTdDNjUuNTAxNyA1NS4wMDUgNjUuNTAxNyA1NS4wMDcyIDY1LjUwMTcgNTUuMDA5NUM2NS41MDE3IDU5LjE1MDMgNjIuMTQ1MyA2Mi41MDY3IDU4LjAwNDUgNjIuNTA2N0M1My44NjM3IDYyLjUwNjcgNTAuNTA3MiA1OS4xNTAzIDUwLjUwNzIgNTUuMDA5NUM1MC41MDcyIDUwLjg2ODYgNTMuODYzNyA0Ny41MTIyIDU4LjAwNDUgNDcuNTEyMkM2MC4zNzkzIDQ3LjUxMjIgNjIuNDk2MiA0OC42MTY4IDYzLjg3IDUwLjMzOTJMNjMuODgyIDUwLjM1NDJMNTYuODgwNCA1Ny4zMTgzWlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGgyIGNsYXNzPVwiZnMtMTYgZnctbWVkaXVtIGZjLWJsYWNrIG1iLTQgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICB7e2kxOG4udHJhbnNsYXRlKCdzdWJtaXR0ZWRTdWNjZXNzZnVsbHknKX19XHJcbiAgICAgIDwvaDI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1Ym1pdHRlZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwiZmVlZEJhY2tTZXJ2aWNlLmZlZWRiYWNrRm9ybSBcIj5cclxuICAgICAgICA8YXBwLXNlYXJjaC1lbXBsb3llZSAjZW1wbG95ZWUgbGFiZWw9XCJ7e2kxOG4udHJhbnNsYXRlKCdyZXF1ZXN0VG8nKX19XCIgW2ZpZWxkXT1cInNlYXJjaEVtcFwiXHJcbiAgICAgICAgICBbbGFiZWxUZXh0UmVhZE1vZGVdPVwiaTE4bi50cmFuc2xhdGUoJ3JlcXVlc3RUbycpXCIgW2xhYmVsVGV4dFdyaXRlTW9kZV09XCJpMThuLnRyYW5zbGF0ZSgncmVxdWVzdFRvJylcIlxyXG4gICAgICAgICAgW25hbWVdPVwiJ3NlYXJjaEVtcCdcIiAoZW1pdGVkVmFsdWUpPVwiaGFuZGxlVXNlclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICA8L2FwcC1zZWFyY2gtZW1wbG95ZWU+XHJcbiAgICAgICAgPGFwcC10ZXh0YXJlYSAjcmVxdWVzdCBbZmllbGRdPVwiZW1wbG95ZWVJbnB1dFwiIG5hbWU9XCJlbXBsb3llZUlucHV0XCIgbGFiZWw9XCJ7e2kxOG4udHJhbnNsYXRlKCdmZWVkYmFjaycpfX1cIlxyXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIiBbbWluTGVuZ3RoXT0nMScgKGVtaXRlZFZhbHVlKT1cImhhbmRsZUZlZWRiYWNrUXVlc3Rpb24oJGV2ZW50KVwiIFttYXhMZW5ndGhdPSc1MDAnXHJcbiAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cImkxOG4udHJhbnNsYXRlKCdsZW5naHRNaW4xTWF4NTAwJylcIj5cclxuICAgICAgICA8L2FwcC10ZXh0YXJlYT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1zZWN0aW9uXCIgKm5nSWY9XCIhZmVlZEJhY2tTZXJ2aWNlLmZlZWRiYWNrRm9ybVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmZWVkQmFja1NlcnZpY2UucmVzcG9uZGVyRm9ybVwiPlxyXG4gICAgICAgICAgPGFwcC1pbmZvLWl0ZW0gY2xhc3M9XCJpbmZvLWl0ZW0gdy0xMDBcIiBsYWJlbD1cInt7aTE4bi50cmFuc2xhdGUoJ3JlcXVlc3RGcm9tJyl9fVwiXHJcbiAgICAgICAgICAgIHZhbHVlPVwie3tmZWVkQmFja1NlcnZpY2U/LmZlZWRiYWNrUmVzcG9uc2U/LnJlcXVlc3RGcm9tfX1cIj48L2FwcC1pbmZvLWl0ZW0+XHJcbiAgICAgICAgICA8YXBwLWluZm8taXRlbSBjbGFzcz1cImluZm8taXRlbSB3LTEwMFwiIGxhYmVsPVwie3tpMThuLnRyYW5zbGF0ZSgncmVxdWVzdFRvJyl9fVwiXHJcbiAgICAgICAgICAgIHZhbHVlPVwie3tmZWVkQmFja1NlcnZpY2U/LmZlZWRiYWNrUmVzcG9uc2U/LnJlcXVlc3RUb319XCI+PC9hcHAtaW5mby1pdGVtPlxyXG4gICAgICAgICAgPGFwcC1pbmZvLWl0ZW0gY2xhc3M9XCJpbmZvLWl0ZW0gdy0xMDBcIiBsYWJlbD1cInt7aTE4bi50cmFuc2xhdGUoJ2ZlZWRiYWNrUXVlc3Rpb24nKX19XCJcclxuICAgICAgICAgICAgdmFsdWU9XCJ7e2ZlZWRCYWNrU2VydmljZT8uZmVlZGJhY2tSZXNwb25zZT8ucmVxdWVzdEZlZWRiYWNrfX1cIj48L2FwcC1pbmZvLWl0ZW0+XHJcbiAgICAgICAgICA8YXBwLWluZm8taXRlbSBjbGFzcz1cImluZm8taXRlbSB3LTEwMFwiIGxhYmVsPVwie3tpMThuLnRyYW5zbGF0ZSgnZmVlZGJhY2snKX19XCJcclxuICAgICAgICAgICAgdmFsdWU9XCJ7e2ZlZWRCYWNrU2VydmljZT8uZmVlZGJhY2tSZXNwb25zZT8ucmVzcG9uc2VGZWVkYmFja319XCI+PC9hcHAtaW5mby1pdGVtPlxyXG4gICAgICAgICAgPGFwcC10ZXh0YXJlYSAjcmVxdWVzdCBjbGFzcz1cImZ1bGwgbXgtMyBtdC0zIHNlY3Rpb24taXRlbVwiIFtmaWVsZF09XCJlbXBsb3llZUlucHV0XCIgbmFtZT1cImVtcGxveWVlSW5wdXRcIlxyXG4gICAgICAgICAgICBsYWJlbD1cInt7aTE4bi50cmFuc2xhdGUoJ2ZlZWRiYWNrJyl9fVwiIFtyZXF1aXJlZF09XCJ0cnVlXCIgW21pbkxlbmd0aF09JzEnXHJcbiAgICAgICAgICAgIChlbWl0ZWRWYWx1ZSk9XCJoYW5kbGVGZWVkYmFja1Jlc3BvbnNlKCRldmVudClcIiBbbWF4TGVuZ3RoXT0nNTAwJ1xyXG4gICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cImkxOG4udHJhbnNsYXRlKCdsZW5naHRNaW4xTWF4NTAwJylcIj5cclxuICAgICAgICAgIDwvYXBwLXRleHRhcmVhPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmVlZEJhY2tTZXJ2aWNlLnBlbmRpbmdGb3JtXCIgaWQ9XCJyZXNwb25jZV9mb3JtXCI+XHJcbiAgICAgICAgICA8YXBwLWluZm8taXRlbSBjbGFzcz1cImluZm8taXRlbSB3LTEwMFwiIGxhYmVsPVwie3tpMThuLnRyYW5zbGF0ZSgncmVxdWVzdEZyb20nKX19XCJcclxuICAgICAgICAgICAgdmFsdWU9XCJ7e2ZlZWRCYWNrU2VydmljZT8uZmVlZGJhY2tSZXNwb25zZT8ucmVxdWVzdEZyb219fVwiPjwvYXBwLWluZm8taXRlbT5cclxuICAgICAgICAgIDxhcHAtaW5mby1pdGVtIGNsYXNzPVwiaW5mby1pdGVtIHctMTAwXCIgbGFiZWw9XCJ7e2kxOG4udHJhbnNsYXRlKCdyZXF1ZXN0VG8nKX19XCJcclxuICAgICAgICAgICAgdmFsdWU9XCJ7e2ZlZWRCYWNrU2VydmljZT8uZmVlZGJhY2tSZXNwb25zZT8ucmVxdWVzdFRvfX1cIj48L2FwcC1pbmZvLWl0ZW0+XHJcbiAgICAgICAgICA8YXBwLWluZm8taXRlbSBjbGFzcz1cImluZm8taXRlbSB3LTEwMFwiIGxhYmVsPVwie3tpMThuLnRyYW5zbGF0ZSgnZmVlZGJhY2tRdWVzdGlvbicpfX1cIlxyXG4gICAgICAgICAgICB2YWx1ZT1cInt7ZmVlZEJhY2tTZXJ2aWNlPy5mZWVkYmFja1Jlc3BvbnNlPy5yZXF1ZXN0RmVlZGJhY2t9fVwiPjwvYXBwLWluZm8taXRlbT5cclxuICAgICAgICAgIDxhcHAtaW5mby1pdGVtIGNsYXNzPVwiaW5mby1pdGVtIHctMTAwXCIgbGFiZWw9XCJ7e2kxOG4udHJhbnNsYXRlKCdmZWVkYmFjaycpfX1cIlxyXG4gICAgICAgICAgICB2YWx1ZT1cInt7ZmVlZEJhY2tTZXJ2aWNlPy5mZWVkYmFja1Jlc3BvbnNlPy5yZXNwb25zZUZlZWRiYWNrfX1cIj48L2FwcC1pbmZvLWl0ZW0+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAgZ2FwLTNcIiAqbmdJZj1cIiFzdWJtaXR0ZWRcIj5cclxuICAgICAgICA8ZHMtYnV0dG9uIHNoYXBlPVwib3V0bGluZVwiIG1hdERpYWxvZ0Nsb3NlPlxyXG4gICAgICAgICAge3tpMThuLnRyYW5zbGF0ZSgnQ2FuY2VsJyl9fVxyXG4gICAgICAgIDwvZHMtYnV0dG9uPlxyXG4gICAgICAgIDxkcy1idXR0b24gKm5nSWY9XCJmZWVkQmFja1NlcnZpY2UuZmVlZGJhY2tGb3JtXCIgKGNsaWNrKT1cImFkZEZlZWRiYWNrKClcIlxyXG4gICAgICAgICAgZGlzYWJsZWQ9XCJ7eyEoaXNGZWVkYmFja1ZhbGlkYXRlZCl9fVwiPlxyXG4gICAgICAgICAge3tpMThuLnRyYW5zbGF0ZSgnc3VibWl0Jyl9fVxyXG4gICAgICAgIDwvZHMtYnV0dG9uPlxyXG4gICAgICAgIDxkcy1idXR0b24gKm5nSWY9XCIhZmVlZEJhY2tTZXJ2aWNlLmZlZWRiYWNrRm9ybSAmJiBmZWVkQmFja1NlcnZpY2UucmVzcG9uZGVyRm9ybVwiXHJcbiAgICAgICAgICBkaXNhYmxlZD1cInt7IShpc1Jlc3BvbnNlVmFsaWRhdGVkKX19XCIgKGNsaWNrKT1cImFkZFJlc3BvbnNlKClcIj5cclxuICAgICAgICAgIHt7aTE4bi50cmFuc2xhdGUoJ3N1Ym1pdCcpfX1cclxuICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcblxyXG48L2Rpdj5cclxuIl19