survery-lib 0.1.11 → 0.1.13

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 (149) hide show
  1. package/assets/style.css.map +1 -1
  2. package/esm2022/lib/components/question-boolean-template/question-boolean-template.component.mjs +99 -0
  3. package/esm2022/lib/components/question-check-box-template/question-check-box-template.component.mjs +110 -0
  4. package/esm2022/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.mjs +95 -0
  5. package/esm2022/lib/components/question-dropdown-template/question-dropdown-template.component.mjs +83 -0
  6. package/esm2022/lib/components/question-matrix-template/question-matrix-template.component.mjs +101 -0
  7. package/esm2022/lib/components/question-radio-button-template/question-radio-button-template.component.mjs +99 -0
  8. package/esm2022/lib/components/question-text-template/question-text-template.component.mjs +99 -0
  9. package/esm2022/lib/pipes/default-question-answer.pipe.mjs +19 -0
  10. package/esm2022/lib/pipes/default-question-answers.pipe.mjs +19 -0
  11. package/esm2022/lib/pipes/filter-question.pipe.mjs +16 -0
  12. package/esm2022/lib/services/survey-lib.service.mjs +30 -0
  13. package/esm2022/lib/survery-lib.component.mjs +302 -0
  14. package/esm2022/lib/survery-lib.module.mjs +63 -0
  15. package/esm2022/lib/usecases/base/use-case.mjs +2 -0
  16. package/esm2022/lib/usecases/check-rule-exps.usecase.mjs +154 -0
  17. package/esm2022/public-api.mjs +8 -0
  18. package/esm2022/shared/dtos/default-question-answers.dto.mjs +3 -0
  19. package/esm2022/shared/dtos/rule-exp-answer.dto.mjs +2 -0
  20. package/esm2022/shared/dtos/rule-exp.dto.mjs +2 -0
  21. package/esm2022/shared/dtos/rule-result-question.dto.mjs +2 -0
  22. package/esm2022/shared/dtos/survey-answer.dto.mjs +2 -0
  23. package/esm2022/shared/dtos/survey-answers-subject.dto.mjs +3 -0
  24. package/esm2022/shared/dtos/survey-page.dto.mjs +2 -0
  25. package/esm2022/shared/dtos/survey-question-group.dto.mjs +2 -0
  26. package/esm2022/shared/dtos/survey-question.dto.mjs +2 -0
  27. package/esm2022/shared/dtos/survey-rule.dto.mjs +2 -0
  28. package/esm2022/shared/dtos/survey-sub-question.dto.mjs +2 -0
  29. package/esm2022/shared/dtos/survey.dto.mjs +2 -0
  30. package/esm2022/shared/enums/Logic-Property.enum.mjs +14 -0
  31. package/esm2022/shared/enums/logic-action.enum.mjs +9 -0
  32. package/esm2022/shared/enums/operator.enum.mjs +6 -0
  33. package/esm2022/shared/enums/question-type.enum.mjs +11 -0
  34. package/esm2022/shared/form-interfaces/question-boolean-template.form-interface.mjs +2 -0
  35. package/esm2022/shared/form-interfaces/question-check-box-template.form-interface.mjs +3 -0
  36. package/esm2022/shared/form-interfaces/question-dropdown-multi-template.form-interface.mjs +3 -0
  37. package/esm2022/shared/form-interfaces/question-dropdown-template.form-interface.mjs +3 -0
  38. package/esm2022/shared/form-interfaces/question-matrix-template.form-interface.mjs +2 -0
  39. package/esm2022/shared/form-interfaces/question-radio-button-template.form-interface.mjs +3 -0
  40. package/esm2022/shared/form-interfaces/question-text-template.form-interface.mjs +2 -0
  41. package/esm2022/shared/form-interfaces/survery-lib.form-interface.mjs +2 -0
  42. package/esm2022/shared/models/question-answer.model.mjs +3 -0
  43. package/esm2022/shared/models/survery-question-result.model.mjs +3 -0
  44. package/esm2022/survery-lib.mjs +5 -0
  45. package/fesm2022/survery-lib.mjs +1240 -0
  46. package/fesm2022/survery-lib.mjs.map +1 -0
  47. package/index.d.ts +5 -0
  48. package/lib/components/question-boolean-template/question-boolean-template.component.d.ts +36 -0
  49. package/lib/components/question-check-box-template/question-check-box-template.component.d.ts +37 -0
  50. package/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.d.ts +35 -0
  51. package/lib/components/question-dropdown-template/question-dropdown-template.component.d.ts +33 -0
  52. package/lib/components/question-matrix-template/question-matrix-template.component.d.ts +33 -0
  53. package/lib/components/question-radio-button-template/question-radio-button-template.component.d.ts +36 -0
  54. package/lib/components/question-text-template/question-text-template.component.d.ts +35 -0
  55. package/lib/pipes/default-question-answer.pipe.d.ts +8 -0
  56. package/lib/pipes/default-question-answers.pipe.d.ts +8 -0
  57. package/lib/pipes/filter-question.pipe.d.ts +9 -0
  58. package/lib/services/survey-lib.service.d.ts +14 -0
  59. package/lib/survery-lib.component.d.ts +49 -0
  60. package/lib/survery-lib.module.d.ts +24 -0
  61. package/{src/lib/usecases/base/use-case.ts → lib/usecases/base/use-case.d.ts} +7 -9
  62. package/lib/usecases/check-rule-exps.usecase.d.ts +21 -0
  63. package/package.json +28 -15
  64. package/{src/public-api.ts → public-api.d.ts} +1 -5
  65. package/shared/dtos/default-question-answers.dto.d.ts +9 -0
  66. package/{src/shared/dtos/rule-exp-answer.dto.ts → shared/dtos/rule-exp-answer.dto.d.ts} +5 -5
  67. package/{src/shared/dtos/rule-exp.dto.ts → shared/dtos/rule-exp.dto.d.ts} +13 -14
  68. package/{src/shared/dtos/rule-result-question.dto.ts → shared/dtos/rule-result-question.dto.d.ts} +4 -5
  69. package/{src/shared/dtos/survey-answer.dto.ts → shared/dtos/survey-answer.dto.d.ts} +16 -16
  70. package/{src/shared/dtos/survey-answers-subject.dto.ts → shared/dtos/survey-answers-subject.dto.d.ts} +5 -6
  71. package/{src/shared/dtos/survey-page.dto.ts → shared/dtos/survey-page.dto.d.ts} +9 -10
  72. package/{src/shared/dtos/survey-question-group.dto.ts → shared/dtos/survey-question-group.dto.d.ts} +8 -9
  73. package/{src/shared/dtos/survey-question.dto.ts → shared/dtos/survey-question.dto.d.ts} +18 -19
  74. package/{src/shared/dtos/survey-rule.dto.ts → shared/dtos/survey-rule.dto.d.ts} +10 -11
  75. package/{src/shared/dtos/survey-sub-question.dto.ts → shared/dtos/survey-sub-question.dto.d.ts} +9 -9
  76. package/{src/shared/dtos/survey.dto.ts → shared/dtos/survey.dto.d.ts} +16 -17
  77. package/shared/enums/Logic-Property.enum.d.ts +12 -0
  78. package/{src/shared/enums/logic-action.enum.ts → shared/enums/logic-action.enum.d.ts} +7 -7
  79. package/shared/enums/operator.enum.d.ts +4 -0
  80. package/{src/shared/enums/question-type.enum.ts → shared/enums/question-type.enum.d.ts} +9 -9
  81. package/shared/form-interfaces/question-boolean-template.form-interface.d.ts +15 -0
  82. package/shared/form-interfaces/question-check-box-template.form-interface.d.ts +15 -0
  83. package/shared/form-interfaces/question-dropdown-multi-template.form-interface.d.ts +15 -0
  84. package/shared/form-interfaces/question-dropdown-template.form-interface.d.ts +9 -0
  85. package/{src/shared/form-interfaces/question-matrix-template.form-interface.ts → shared/form-interfaces/question-matrix-template.form-interface.d.ts} +11 -13
  86. package/shared/form-interfaces/question-radio-button-template.form-interface.d.ts +15 -0
  87. package/shared/form-interfaces/question-text-template.form-interface.d.ts +10 -0
  88. package/shared/form-interfaces/survery-lib.form-interface.d.ts +24 -0
  89. package/shared/models/question-answer.model.d.ts +6 -0
  90. package/shared/models/survery-question-result.model.d.ts +8 -0
  91. package/ng-package.json +0 -11
  92. package/scss/style.scss +0 -88
  93. package/src/lib/components/question-boolean-template/question-boolean-template.component.html +0 -13
  94. package/src/lib/components/question-boolean-template/question-boolean-template.component.scss +0 -0
  95. package/src/lib/components/question-boolean-template/question-boolean-template.component.spec.ts +0 -21
  96. package/src/lib/components/question-boolean-template/question-boolean-template.component.ts +0 -109
  97. package/src/lib/components/question-check-box-template/question-check-box-template.component.html +0 -13
  98. package/src/lib/components/question-check-box-template/question-check-box-template.component.scss +0 -0
  99. package/src/lib/components/question-check-box-template/question-check-box-template.component.spec.ts +0 -21
  100. package/src/lib/components/question-check-box-template/question-check-box-template.component.ts +0 -124
  101. package/src/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.html +0 -10
  102. package/src/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.scss +0 -3
  103. package/src/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.spec.ts +0 -21
  104. package/src/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.ts +0 -100
  105. package/src/lib/components/question-dropdown-template/question-dropdown-template.component.html +0 -10
  106. package/src/lib/components/question-dropdown-template/question-dropdown-template.component.scss +0 -0
  107. package/src/lib/components/question-dropdown-template/question-dropdown-template.component.spec.ts +0 -21
  108. package/src/lib/components/question-dropdown-template/question-dropdown-template.component.ts +0 -87
  109. package/src/lib/components/question-matrix-template/question-matrix-template.component.html +0 -36
  110. package/src/lib/components/question-matrix-template/question-matrix-template.component.scss +0 -0
  111. package/src/lib/components/question-matrix-template/question-matrix-template.component.spec.ts +0 -21
  112. package/src/lib/components/question-matrix-template/question-matrix-template.component.ts +0 -110
  113. package/src/lib/components/question-radio-button-template/question-radio-button-template.component.html +0 -13
  114. package/src/lib/components/question-radio-button-template/question-radio-button-template.component.scss +0 -0
  115. package/src/lib/components/question-radio-button-template/question-radio-button-template.component.spec.ts +0 -21
  116. package/src/lib/components/question-radio-button-template/question-radio-button-template.component.ts +0 -111
  117. package/src/lib/components/question-text-template/question-text-template.component.html +0 -13
  118. package/src/lib/components/question-text-template/question-text-template.component.scss +0 -0
  119. package/src/lib/components/question-text-template/question-text-template.component.spec.ts +0 -21
  120. package/src/lib/components/question-text-template/question-text-template.component.ts +0 -105
  121. package/src/lib/pipes/default-question-answer.pipe.spec.ts +0 -8
  122. package/src/lib/pipes/default-question-answer.pipe.ts +0 -18
  123. package/src/lib/pipes/default-question-answers.pipe.spec.ts +0 -8
  124. package/src/lib/pipes/default-question-answers.pipe.ts +0 -17
  125. package/src/lib/pipes/filter-question.pipe.spec.ts +0 -8
  126. package/src/lib/pipes/filter-question.pipe.ts +0 -14
  127. package/src/lib/services/survey-lib.service.spec.ts +0 -16
  128. package/src/lib/services/survey-lib.service.ts +0 -31
  129. package/src/lib/survery-lib.component.spec.ts +0 -21
  130. package/src/lib/survery-lib.component.ts +0 -308
  131. package/src/lib/survery-lib.module.ts +0 -47
  132. package/src/lib/survey-lib.component.html +0 -67
  133. package/src/lib/survey-lib.component.scss +0 -4
  134. package/src/lib/usecases/check-rule-exps.usecase.ts +0 -188
  135. package/src/shared/dtos/default-question-answers.dto.ts +0 -10
  136. package/src/shared/enums/logic-property.enum.ts +0 -12
  137. package/src/shared/enums/operator.enum.ts +0 -4
  138. package/src/shared/form-interfaces/question-boolean-template.form-interface.ts +0 -17
  139. package/src/shared/form-interfaces/question-check-box-template.form-interface.ts +0 -18
  140. package/src/shared/form-interfaces/question-dropdown-multi-template.form-interface.ts +0 -17
  141. package/src/shared/form-interfaces/question-dropdown-template.form-interface.ts +0 -10
  142. package/src/shared/form-interfaces/question-radio-button-template.form-interface.ts +0 -17
  143. package/src/shared/form-interfaces/question-text-template.form-interface.ts +0 -11
  144. package/src/shared/form-interfaces/survery-lib.form-interface.ts +0 -27
  145. package/src/shared/models/question-answer.model.ts +0 -6
  146. package/src/shared/models/survery-question-result.model.ts +0 -8
  147. package/tsconfig.lib.json +0 -14
  148. package/tsconfig.lib.prod.json +0 -10
  149. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,302 @@
1
+ import { Component, EventEmitter, Output } from '@angular/core';
2
+ import { QuestionTypeEnum } from '../shared/enums/question-type.enum';
3
+ import { v4 as guidGenerator } from 'uuid';
4
+ import { LogicActionEnum } from '../shared/enums/logic-action.enum';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./services/survey-lib.service";
7
+ import * as i2 from "@ng-stack/forms";
8
+ import * as i3 from "./usecases/check-rule-exps.usecase";
9
+ import * as i4 from "@angular/common";
10
+ import * as i5 from "./components/question-text-template/question-text-template.component";
11
+ import * as i6 from "./components/question-radio-button-template/question-radio-button-template.component";
12
+ import * as i7 from "./components/question-check-box-template/question-check-box-template.component";
13
+ import * as i8 from "./components/question-dropdown-template/question-dropdown-template.component";
14
+ import * as i9 from "./components/question-matrix-template/question-matrix-template.component";
15
+ import * as i10 from "./components/question-boolean-template/question-boolean-template.component";
16
+ import * as i11 from "./components/question-dropdown-multi-template/question-dropdown-multi-template.component";
17
+ import * as i12 from "./pipes/filter-question.pipe";
18
+ export class SurveryLibComponent {
19
+ get fCtrls() {
20
+ return this.rForm.controls;
21
+ }
22
+ get questionTypeEnum() {
23
+ return QuestionTypeEnum;
24
+ }
25
+ get isFirstPage() {
26
+ return this.fCtrls.currentPageIndex.value == 0;
27
+ }
28
+ get isLastPage() {
29
+ return this.fCtrls.currentPageIndex.value == (this.surveyData?.surveyPages.length - 1);
30
+ }
31
+ get showedSurveyPages() {
32
+ var pageArr = [];
33
+ for (let index = 0; index < this.fCtrls.questionArray.value.length; index++) {
34
+ const question = this.fCtrls.questionArray.value[index];
35
+ if (question.isShow == true && (question.questionType != this.questionTypeEnum.Matrix || question.isMatrixGroup == true)) {
36
+ if (question.surveyPageIndex == 1) {
37
+ console.log(question);
38
+ }
39
+ pageArr.push(question.surveyPageIndex);
40
+ }
41
+ }
42
+ const distinctArray = pageArr.filter((n, i) => pageArr.indexOf(n) === i);
43
+ return distinctArray.sort((a, b) => a - b);
44
+ }
45
+ get curruntShowedSurveyPages() {
46
+ return this.showedSurveyPages.findIndex(x => x == this.fCtrls.currentPageIndex.value) + 1;
47
+ }
48
+ get surveyResult() {
49
+ return {
50
+ currentPageIndex: this.fCtrls.currentPageIndex.value,
51
+ answers: this.fCtrls.questionArray.value.filter(x => x.isMatrixGroup != true).map(x => {
52
+ return {
53
+ SurveyPageIndex: x.surveyPageIndex,
54
+ QuestionId: x.questionId,
55
+ QuestionType: x.questionType,
56
+ AnswerId: x.answerId,
57
+ AnswerText: x.answerText,
58
+ AnswerIdArr: x.answerIdArr
59
+ };
60
+ })
61
+ };
62
+ }
63
+ constructor(_surveyLibService, _formBuilder, _checkRuleExpsUsecase) {
64
+ this._surveyLibService = _surveyLibService;
65
+ this._formBuilder = _formBuilder;
66
+ this._checkRuleExpsUsecase = _checkRuleExpsUsecase;
67
+ this.reloadDefaultAnswerId = guidGenerator();
68
+ this.surveyResultEmit = new EventEmitter();
69
+ this.rForm = this._formBuilder.group({
70
+ currentPageIndex: [0],
71
+ questionArray: this._formBuilder.array([]),
72
+ ruleQuestionArray: this._formBuilder.array([])
73
+ });
74
+ }
75
+ ngOnInit() {
76
+ this._surveyLibService.surveyDataObsrv.subscribe(survey => {
77
+ this.fCtrls.questionArray.clear();
78
+ this.fCtrls.ruleQuestionArray.clear();
79
+ this.surveyData = null;
80
+ if (survey != null) {
81
+ this.surveyData = survey;
82
+ this.loadQuestions(survey);
83
+ }
84
+ });
85
+ this._surveyLibService.surveyAnswersObsrv.subscribe(value => {
86
+ this.defaultAnswers = [];
87
+ if (value != null) {
88
+ this.defaultAnswers = [...value.defaultAnswers];
89
+ this.fCtrls.currentPageIndex.setValue(value.currentpage);
90
+ }
91
+ this.reloadDefaultAnswerId = guidGenerator();
92
+ });
93
+ }
94
+ onPaggingNext() {
95
+ var isHaveInvalidRecords = this.haveInValidateQuestions();
96
+ if (isHaveInvalidRecords == false) {
97
+ const nextPageIndex = this.getNextShowedPage();
98
+ if (nextPageIndex != null) {
99
+ this.fCtrls.currentPageIndex.setValue(nextPageIndex);
100
+ }
101
+ else {
102
+ var questionArr = this.fCtrls.questionArray.value.filter(x => x.isMatrixGroup != true).map(x => {
103
+ return {
104
+ SurveyPageIndex: x.surveyPageIndex,
105
+ QuestionId: x.questionId,
106
+ QuestionType: x.questionType,
107
+ AnswerId: x.answerId,
108
+ AnswerText: x.answerText,
109
+ AnswerIdArr: x.answerIdArr
110
+ };
111
+ });
112
+ this.surveyResultEmit.emit(questionArr);
113
+ }
114
+ }
115
+ }
116
+ onPaggingChange(index) {
117
+ const formValue = this.rForm.value;
118
+ if (index < formValue.currentPageIndex) {
119
+ this.fCtrls.currentPageIndex.setValue(index);
120
+ }
121
+ else if (index == (formValue.currentPageIndex + 1)) {
122
+ this.onPaggingNext();
123
+ }
124
+ }
125
+ onPaggingBack() {
126
+ const prevPageIndex = this.getPrevShowedPage();
127
+ if (prevPageIndex != null) {
128
+ this.fCtrls.currentPageIndex.setValue(prevPageIndex);
129
+ }
130
+ }
131
+ onUpdateAnswers(model) {
132
+ model.forEach(elem => {
133
+ this.onUpdateAnswer(elem);
134
+ });
135
+ }
136
+ onUpdateAnswer(model) {
137
+ const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == model.QuestionId);
138
+ var questionGroup = this.fCtrls.questionArray.controls[index];
139
+ questionGroup.controls.isValid.setValue(model.IsValid);
140
+ if (questionGroup.value.questionType == this.questionTypeEnum.TextInput) {
141
+ questionGroup.patchValue({
142
+ answerId: model.SurveyAnswerId,
143
+ answerText: model.Answer
144
+ });
145
+ }
146
+ else if (questionGroup.value.questionType == this.questionTypeEnum.CheckBox || questionGroup.value.questionType == this.questionTypeEnum.DropDownMulti) {
147
+ questionGroup.controls.answerIdArr.setValue(model.Answer);
148
+ }
149
+ else {
150
+ questionGroup.controls.answerId.setValue(model.Answer);
151
+ }
152
+ if (this.fCtrls.ruleQuestionArray.value.findIndex(x => x.questionId == model.QuestionId) > -1) {
153
+ this.checkRules();
154
+ }
155
+ }
156
+ loadQuestions(survey) {
157
+ survey.surveyPages.forEach((page, pageIndex) => {
158
+ page.surveyQuestionGroups.forEach(group => {
159
+ group.surveyQuestions.forEach(question => {
160
+ if (question.questionTypeId != 6) {
161
+ this.fCtrls.questionArray.push(this._formBuilder.group({
162
+ surveyPageIndex: pageIndex,
163
+ questionId: [question.questionId],
164
+ questionType: [question.questionTypeId],
165
+ isMatrixGroup: [false],
166
+ answerId: [null],
167
+ answerIdArr: [null],
168
+ answerText: [null],
169
+ isRequired: [question.isRequired],
170
+ isValid: [null],
171
+ isDisabled: [question.isReadOnly],
172
+ isShow: [question.isVisable],
173
+ isDisabled_default: [question.isReadOnly],
174
+ isShow_default: [question.isVisable]
175
+ }));
176
+ }
177
+ else {
178
+ this.fCtrls.questionArray.push(this._formBuilder.group({
179
+ surveyPageIndex: pageIndex,
180
+ questionId: [question.questionId],
181
+ questionType: [question.questionTypeId],
182
+ isMatrixGroup: [true],
183
+ answerId: [null],
184
+ answerIdArr: [null],
185
+ answerText: [null],
186
+ isRequired: [question.isRequired],
187
+ isValid: [null],
188
+ isDisabled: [question.isReadOnly],
189
+ isShow: [question.isVisable],
190
+ isDisabled_default: [question.isReadOnly],
191
+ isShow_default: [question.isVisable],
192
+ }));
193
+ question.surveySubQuestions.forEach(subQuestion => {
194
+ this.fCtrls.questionArray.push(this._formBuilder.group({
195
+ surveyPageIndex: pageIndex,
196
+ questionId: [subQuestion.questionId],
197
+ questionType: [subQuestion.questionTypeId],
198
+ isMatrixGroup: [false],
199
+ answerId: [null],
200
+ answerIdArr: [null],
201
+ answerText: [null],
202
+ isRequired: [question.isRequired],
203
+ isValid: [null],
204
+ isDisabled: [subQuestion.isReadOnly],
205
+ isShow: [subQuestion.isVisable],
206
+ isDisabled_default: [subQuestion.isReadOnly],
207
+ isShow_default: [subQuestion.isVisable]
208
+ }));
209
+ });
210
+ }
211
+ });
212
+ });
213
+ });
214
+ survey.surveyRules.forEach(rule => {
215
+ rule.ruleExps.forEach(ruleExp => {
216
+ this.fCtrls.ruleQuestionArray.push(this._formBuilder.group({
217
+ questionId: ruleExp.questionId
218
+ }));
219
+ });
220
+ });
221
+ }
222
+ haveInValidateQuestions() {
223
+ const currentPageIndex = this.fCtrls.currentPageIndex.value;
224
+ var invalidRecords = this.fCtrls.questionArray.value.filter(x => x.surveyPageIndex == currentPageIndex
225
+ && x.isRequired == true && x.isValid != true
226
+ && x.isDisabled == false && x.isShow == true && x.isMatrixGroup != true);
227
+ if (invalidRecords.length > 0) {
228
+ $(`#survey-page_${currentPageIndex}`).addClass('survey-page_submitted');
229
+ }
230
+ if (invalidRecords.length > 0) {
231
+ console.log(invalidRecords);
232
+ }
233
+ return invalidRecords.length > 0;
234
+ }
235
+ checkRules() {
236
+ this.surveyData.surveyRules.forEach(rule => {
237
+ this._checkRuleExpsUsecase.execute({
238
+ ruleExps: rule.ruleExps,
239
+ questions: this.fCtrls.questionArray.value
240
+ }).subscribe(result => {
241
+ var isPassed = result.exprestionResultArr.filter(x => x == false).length == 0;
242
+ if (isPassed) {
243
+ rule.ruleResultQuestions.forEach(resultQuestion => {
244
+ const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
245
+ var questionGroup = this.fCtrls.questionArray.at(index);
246
+ if (rule.logicActionId == LogicActionEnum.Show) {
247
+ questionGroup.controls.isShow.setValue(true);
248
+ }
249
+ else if (rule.logicActionId == LogicActionEnum.Hide) {
250
+ questionGroup.controls.isShow.setValue(false);
251
+ }
252
+ else if (rule.logicActionId == LogicActionEnum.Enable) {
253
+ questionGroup.controls.isDisabled.setValue(false);
254
+ }
255
+ else if (rule.logicActionId == LogicActionEnum.Disable) {
256
+ questionGroup.controls.isDisabled.setValue(true);
257
+ }
258
+ else if (rule.logicActionId == LogicActionEnum.SetAnswer) {
259
+ }
260
+ });
261
+ }
262
+ else {
263
+ rule.ruleResultQuestions.forEach(resultQuestion => {
264
+ const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
265
+ var questionGroup = this.fCtrls.questionArray.at(index);
266
+ questionGroup.patchValue({
267
+ isShow: questionGroup.value.isShow_default,
268
+ isDisabled: questionGroup.value.isDisabled_default
269
+ });
270
+ });
271
+ }
272
+ });
273
+ });
274
+ }
275
+ getNextShowedPage() {
276
+ var currentPageIndex = this.fCtrls.currentPageIndex.value;
277
+ var showedPages = this.showedSurveyPages;
278
+ var nextShowedPages = showedPages.filter(x => x > currentPageIndex);
279
+ if (nextShowedPages.length > 0) {
280
+ return nextShowedPages[0];
281
+ }
282
+ return null;
283
+ }
284
+ getPrevShowedPage() {
285
+ var currentPageIndex = this.fCtrls.currentPageIndex.value;
286
+ var showedPages = this.showedSurveyPages;
287
+ var prevShowedPages = showedPages.filter(x => x < currentPageIndex);
288
+ if (prevShowedPages.length > 0) {
289
+ return prevShowedPages[prevShowedPages.length - 1];
290
+ }
291
+ return null;
292
+ }
293
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibComponent, deps: [{ token: i1.SurveyLibService }, { token: i2.FormBuilder }, { token: i3.CheckRuleExpsUsecase }], target: i0.ɵɵFactoryTarget.Component }); }
294
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SurveryLibComponent, selector: "lib-survery-lib", outputs: { surveyResultEmit: "surveyResultEmit" }, ngImport: i0, template: "<div class=\"survay-card\" *ngIf=\"surveyData != null\">\r\n <div *ngFor=\"let surveyPage of surveyData?.surveyPages; let surveyPageIndex = index\"\r\n [attr.id]=\"'survey-page_'+surveyPageIndex\" [ngClass]=\"{'d-none': surveyPageIndex != fCtrls.currentPageIndex.value}\">\r\n <ng-container *ngFor=\"let item of surveyPage.surveyQuestionGroups\">\r\n <div class=\"survay-card\">\r\n <div class=\"survay-card-body\">\r\n <div class=\"survay-group\">\r\n <div class=\"title\">\r\n <h2 class=\"group-title\">\r\n {{item.questionGroupName}}\r\n </h2>\r\n <span class=\"group-sub-title \">\r\n {{item.questionGroupDescription}}\r\n </span>\r\n </div>\r\n <ng-container *ngFor=\"let question of item.surveyQuestions\">\r\n <lib-question-boolean-template #questionBooleanTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.Boolean\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-boolean-template>\r\n\r\n <lib-question-text-template #questionTextTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.TextInput\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"\r\n [isTextArea]=\"question.isAdvanceTextArea\" ></lib-question-text-template>\r\n\r\n <lib-question-radio-button-template #questionRadioButtonTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.RadioButton\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-radio-button-template>\r\n\r\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDown\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-dropdown-template>\r\n\r\n <lib-question-dropdown-multi-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDownMulti\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-dropdown-multi-template>\r\n \r\n <lib-question-check-box-template #questionCheckBoxTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.CheckBox\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-check-box-template>\r\n\r\n <lib-question-matrix-template #questionMatrixTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.Matrix\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-matrix-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"survay-card-footr\" *ngIf=\"surveyData != null\">\r\n <div class=\"container\" style=\" justify-content: start;\">\r\n <div class=\"survay-pagination fw-bold\" >\r\n <span>{{curruntShowedSurveyPages}}</span>\r\n <span class=\"ms-2 me-2\">of</span>\r\n <span>{{showedSurveyPages?.length}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".disable__btn{background-color:gray!important;cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.QuestionTextTemplateComponent, selector: "lib-question-text-template", inputs: ["isShow", "isTextArea", "setQuestion", "isDisabled"], outputs: ["emitter"] }, { kind: "component", type: i6.QuestionRadioButtonTemplateComponent, selector: "lib-question-radio-button-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i7.QuestionCheckBoxTemplateComponent, selector: "lib-question-check-box-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i8.QuestionDropdownTemplateComponent, selector: "lib-question-dropdown-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i9.QuestionMatrixTemplateComponent, selector: "lib-question-matrix-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i10.QuestionBooleanTemplateComponent, selector: "lib-question-boolean-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i11.QuestionDropdownMultiTemplateComponent, selector: "lib-question-dropdown-multi-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "pipe", type: i12.FilterQuestionPipe, name: "filterQuestion" }] }); }
295
+ }
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibComponent, decorators: [{
297
+ type: Component,
298
+ args: [{ selector: 'lib-survery-lib', template: "<div class=\"survay-card\" *ngIf=\"surveyData != null\">\r\n <div *ngFor=\"let surveyPage of surveyData?.surveyPages; let surveyPageIndex = index\"\r\n [attr.id]=\"'survey-page_'+surveyPageIndex\" [ngClass]=\"{'d-none': surveyPageIndex != fCtrls.currentPageIndex.value}\">\r\n <ng-container *ngFor=\"let item of surveyPage.surveyQuestionGroups\">\r\n <div class=\"survay-card\">\r\n <div class=\"survay-card-body\">\r\n <div class=\"survay-group\">\r\n <div class=\"title\">\r\n <h2 class=\"group-title\">\r\n {{item.questionGroupName}}\r\n </h2>\r\n <span class=\"group-sub-title \">\r\n {{item.questionGroupDescription}}\r\n </span>\r\n </div>\r\n <ng-container *ngFor=\"let question of item.surveyQuestions\">\r\n <lib-question-boolean-template #questionBooleanTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.Boolean\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-boolean-template>\r\n\r\n <lib-question-text-template #questionTextTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.TextInput\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"\r\n [isTextArea]=\"question.isAdvanceTextArea\" ></lib-question-text-template>\r\n\r\n <lib-question-radio-button-template #questionRadioButtonTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.RadioButton\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-radio-button-template>\r\n\r\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDown\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-dropdown-template>\r\n\r\n <lib-question-dropdown-multi-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDownMulti\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-dropdown-multi-template>\r\n \r\n <lib-question-check-box-template #questionCheckBoxTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.CheckBox\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-check-box-template>\r\n\r\n <lib-question-matrix-template #questionMatrixTemplate [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.Matrix\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\" ></lib-question-matrix-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"survay-card-footr\" *ngIf=\"surveyData != null\">\r\n <div class=\"container\" style=\" justify-content: start;\">\r\n <div class=\"survay-pagination fw-bold\" >\r\n <span>{{curruntShowedSurveyPages}}</span>\r\n <span class=\"ms-2 me-2\">of</span>\r\n <span>{{showedSurveyPages?.length}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".disable__btn{background-color:gray!important;cursor:not-allowed}\n"] }]
299
+ }], ctorParameters: function () { return [{ type: i1.SurveyLibService }, { type: i2.FormBuilder }, { type: i3.CheckRuleExpsUsecase }]; }, propDecorators: { surveyResultEmit: [{
300
+ type: Output
301
+ }] } });
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmVyeS1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VydmVyeS1saWIvc3JjL2xpYi9zdXJ2ZXJ5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3N1cnZleS1saWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUtqRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU0zQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBaUJwRSxNQUFNLE9BQU8sbUJBQW1CO0lBTzlCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixJQUFJLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUs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Q0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OEdBdlRVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDBHQzdCaEMsc2hKQWtFTTs7MkZEckNPLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7b0tBaUVqQixnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdXJ2ZXlMaWJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zdXJ2ZXktbGliLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VydmV5RHRvIH0gZnJvbSAnLi4vc2hhcmVkL2R0b3Mvc3VydmV5LmR0byc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQG5nLXN0YWNrL2Zvcm1zJztcbmltcG9ydCB7IFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlLCBSdWxlUXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2UsIFN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlIH0gZnJvbSAnLi4vc2hhcmVkL2Zvcm0taW50ZXJmYWNlcy9zdXJ2ZXJ5LWxpYi5mb3JtLWludGVyZmFjZSc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGVFbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL3F1ZXN0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyB2NCBhcyBndWlkR2VuZXJhdG9yIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBRdWVzdGlvbkFuc3dlck1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9xdWVzdGlvbi1hbnN3ZXIubW9kZWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvZ2ljUHJvcGVydHlFbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL0xvZ2ljLVByb3BlcnR5LmVudW0nO1xuaW1wb3J0IHsgUnVsZUV4cER0byB9IGZyb20gJy4uL3NoYXJlZC9kdG9zL3J1bGUtZXhwLmR0byc7XG5pbXBvcnQgeyBPcGVyYXRvckVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvb3BlcmF0b3IuZW51bSc7XG5pbXBvcnQgeyBMb2dpY0FjdGlvbkVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvbG9naWMtYWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgQ2hlY2tSdWxlRXhwc1VzZWNhc2UgfSBmcm9tICcuL3VzZWNhc2VzL2NoZWNrLXJ1bGUtZXhwcy51c2VjYXNlJztcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUmVzdWx0IH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9zdXJ2ZXJ5LXF1ZXN0aW9uLXJlc3VsdC5tb2RlbCc7XG5pbXBvcnQgeyBEZWZhdWx0UXVlc3Rpb25BbnN3ZXJEdG8gfSBmcm9tICcuLi9zaGFyZWQvZHRvcy9kZWZhdWx0LXF1ZXN0aW9uLWFuc3dlcnMuZHRvJztcbmltcG9ydCB7IFF1ZXN0aW9uQm9vbGVhblRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGUvcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tdGV4dC10ZW1wbGF0ZS9xdWVzdGlvbi10ZXh0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvQnV0dG9uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlL3F1ZXN0aW9uLXJhZGlvLWJ1dHRvbi10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25Ecm9wZG93blRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlL3F1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrQm94VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tY2hlY2stYm94LXRlbXBsYXRlL3F1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGUvcXVlc3Rpb24tbWF0cml4LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zdXJ2ZXJ5LWxpYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXJ2ZXktbGliLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3VydmV5LWxpYi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN1cnZlcnlMaWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHJlbG9hZERlZmF1bHRBbnN3ZXJJZCA9IGd1aWRHZW5lcmF0b3IoKSBhcyBzdHJpbmc7XG4gIHN1cnZleURhdGE6IFN1cnZleUR0bztcbiAgZGVmYXVsdEFuc3dlcnM6IERlZmF1bHRRdWVzdGlvbkFuc3dlckR0b1tdO1xuICByRm9ybTogRm9ybUdyb3VwPFN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPjtcblxuICBnZXQgZkN0cmxzKCkge1xuICAgIHJldHVybiB0aGlzLnJGb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHF1ZXN0aW9uVHlwZUVudW0oKSB7XG4gICAgcmV0dXJuIFF1ZXN0aW9uVHlwZUVudW07XG4gIH1cblxuICBnZXQgaXNGaXJzdFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWUgPT0gMDtcbiAgfVxuXG4gIGdldCBpc0xhc3RQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlID09ICh0aGlzLnN1cnZleURhdGE/LnN1cnZleVBhZ2VzLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgZ2V0IHNob3dlZFN1cnZleVBhZ2VzKCk6IG51bWJlcltdIHtcbiAgICB2YXIgcGFnZUFycjogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZVtpbmRleF07XG4gICAgICBpZiAocXVlc3Rpb24uaXNTaG93ID09IHRydWUgJiYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSAhPSB0aGlzLnF1ZXN0aW9uVHlwZUVudW0uTWF0cml4IHx8IHF1ZXN0aW9uLmlzTWF0cml4R3JvdXAgPT0gdHJ1ZSkpIHtcbiAgICAgICAgaWYocXVlc3Rpb24uc3VydmV5UGFnZUluZGV4ID09IDEpe1xuICAgICAgICAgIGNvbnNvbGUubG9nKHF1ZXN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBwYWdlQXJyLnB1c2gocXVlc3Rpb24uc3VydmV5UGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkaXN0aW5jdEFycmF5ID0gcGFnZUFyci5maWx0ZXIoKG4sIGkpID0+IHBhZ2VBcnIuaW5kZXhPZihuKSA9PT0gaSk7XG5cbiAgICByZXR1cm4gZGlzdGluY3RBcnJheS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICBnZXQgY3VycnVudFNob3dlZFN1cnZleVBhZ2VzKCl7XG4gICAgcmV0dXJuIHRoaXMuc2hvd2VkU3VydmV5UGFnZXMuZmluZEluZGV4KHg9PnggPT0gdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZSkgKyAxO1xuICB9XG5cbiAgZ2V0IHN1cnZleVJlc3VsdCgpOiB7IGFuc3dlcnM6IFN1cnZleVF1ZXN0aW9uUmVzdWx0W10sIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFBhZ2VJbmRleDogdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZSxcbiAgICAgIGFuc3dlcnM6XG4gICAgICAgIHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUuZmlsdGVyKHggPT4geC5pc01hdHJpeEdyb3VwICE9IHRydWUpLm1hcCh4ID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgU3VydmV5UGFnZUluZGV4OiB4LnN1cnZleVBhZ2VJbmRleCxcbiAgICAgICAgICAgIFF1ZXN0aW9uSWQ6IHgucXVlc3Rpb25JZCxcbiAgICAgICAgICAgIFF1ZXN0aW9uVHlwZTogeC5xdWVzdGlvblR5cGUsXG4gICAgICAgICAgICBBbnN3ZXJJZDogeC5hbnN3ZXJJZCxcbiAgICAgICAgICAgIEFuc3dlclRleHQ6IHguYW5zd2VyVGV4dCxcbiAgICAgICAgICAgIEFuc3dlcklkQXJyOiB4LmFuc3dlcklkQXJyXG4gICAgICAgICAgfSBhcyBTdXJ2ZXlRdWVzdGlvblJlc3VsdFxuICAgICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBzdXJ2ZXlSZXN1bHRFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxTdXJ2ZXlRdWVzdGlvblJlc3VsdFtdPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N1cnZleUxpYlNlcnZpY2U6IFN1cnZleUxpYlNlcnZpY2VcbiAgICAsIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfY2hlY2tSdWxlRXhwc1VzZWNhc2U6IENoZWNrUnVsZUV4cHNVc2VjYXNlKSB7XG5cbiAgICB0aGlzLnJGb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXA8U3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KHtcbiAgICAgIGN1cnJlbnRQYWdlSW5kZXg6IFswXSxcbiAgICAgIHF1ZXN0aW9uQXJyYXk6IHRoaXMuX2Zvcm1CdWlsZGVyLmFycmF5PFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPihbXSksXG4gICAgICBydWxlUXVlc3Rpb25BcnJheTogdGhpcy5fZm9ybUJ1aWxkZXIuYXJyYXk8UnVsZVF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPihbXSlcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1cnZleUxpYlNlcnZpY2Uuc3VydmV5RGF0YU9ic3J2LnN1YnNjcmliZShzdXJ2ZXkgPT4ge1xuICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5jbGVhcigpO1xuICAgICAgdGhpcy5mQ3RybHMucnVsZVF1ZXN0aW9uQXJyYXkuY2xlYXIoKTtcbiAgICAgIHRoaXMuc3VydmV5RGF0YSA9IG51bGw7XG5cbiAgICAgIGlmIChzdXJ2ZXkgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN1cnZleURhdGEgPSBzdXJ2ZXk7XG4gICAgICAgIHRoaXMubG9hZFF1ZXN0aW9ucyhzdXJ2ZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fc3VydmV5TGliU2VydmljZS5zdXJ2ZXlBbnN3ZXJzT2JzcnYuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuZGVmYXVsdEFuc3dlcnMgPSBbXTtcblxuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0QW5zd2VycyA9IFsuLi52YWx1ZS5kZWZhdWx0QW5zd2Vyc107XG4gICAgICAgIHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXguc2V0VmFsdWUodmFsdWUuY3VycmVudHBhZ2UpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbG9hZERlZmF1bHRBbnN3ZXJJZCA9IGd1aWRHZW5lcmF0b3IoKSBhcyBzdHJpbmc7XG4gICAgfSk7XG4gIH1cblxuICBvblBhZ2dpbmdOZXh0KCkge1xuICAgIHZhciBpc0hhdmVJbnZhbGlkUmVjb3JkcyA9IHRoaXMuaGF2ZUluVmFsaWRhdGVRdWVzdGlvbnMoKTtcbiAgICBpZiAoaXNIYXZlSW52YWxpZFJlY29yZHMgPT0gZmFsc2UpIHtcblxuICAgICAgY29uc3QgbmV4dFBhZ2VJbmRleCA9IHRoaXMuZ2V0TmV4dFNob3dlZFBhZ2UoKTtcblxuICAgICAgaWYgKG5leHRQYWdlSW5kZXggIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnNldFZhbHVlKG5leHRQYWdlSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uQXJyID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZS5maWx0ZXIoeCA9PiB4LmlzTWF0cml4R3JvdXAgIT0gdHJ1ZSkubWFwKHggPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBTdXJ2ZXlQYWdlSW5kZXg6IHguc3VydmV5UGFnZUluZGV4LFxuICAgICAgICAgICAgUXVlc3Rpb25JZDogeC5xdWVzdGlvbklkLFxuICAgICAgICAgICAgUXVlc3Rpb25UeXBlOiB4LnF1ZXN0aW9uVHlwZSxcbiAgICAgICAgICAgIEFuc3dlcklkOiB4LmFuc3dlcklkLFxuICAgICAgICAgICAgQW5zd2VyVGV4dDogeC5hbnN3ZXJUZXh0LFxuICAgICAgICAgICAgQW5zd2VySWRBcnI6IHguYW5zd2VySWRBcnJcbiAgICAgICAgICB9IGFzIFN1cnZleVF1ZXN0aW9uUmVzdWx0XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1cnZleVJlc3VsdEVtaXQuZW1pdChxdWVzdGlvbkFycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25QYWdnaW5nQ2hhbmdlKGluZGV4KSB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5yRm9ybS52YWx1ZTtcbiAgICBpZiAoaW5kZXggPCBmb3JtVmFsdWUuY3VycmVudFBhZ2VJbmRleCkge1xuICAgICAgdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC5zZXRWYWx1ZShpbmRleCk7XG4gICAgfSBlbHNlIGlmIChpbmRleCA9PSAoZm9ybVZhbHVlLmN1cnJlbnRQYWdlSW5kZXggKyAxKSkge1xuICAgICAgdGhpcy5vblBhZ2dpbmdOZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdnaW5nQmFjaygpIHtcbiAgICBjb25zdCBwcmV2UGFnZUluZGV4ID0gdGhpcy5nZXRQcmV2U2hvd2VkUGFnZSgpO1xuICAgIGlmIChwcmV2UGFnZUluZGV4ICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXguc2V0VmFsdWUocHJldlBhZ2VJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgb25VcGRhdGVBbnN3ZXJzKG1vZGVsOiBRdWVzdGlvbkFuc3dlck1vZGVsW10pIHtcbiAgICBtb2RlbC5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgdGhpcy5vblVwZGF0ZUFuc3dlcihlbGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uVXBkYXRlQW5zd2VyKG1vZGVsOiBRdWVzdGlvbkFuc3dlck1vZGVsKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbmRJbmRleCh4ID0+IHgucXVlc3Rpb25JZCA9PSBtb2RlbC5RdWVzdGlvbklkKTtcbiAgICB2YXIgcXVlc3Rpb25Hcm91cCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkuY29udHJvbHNbaW5kZXhdO1xuICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuaXNWYWxpZC5zZXRWYWx1ZShtb2RlbC5Jc1ZhbGlkKTtcblxuICAgIGlmIChxdWVzdGlvbkdyb3VwLnZhbHVlLnF1ZXN0aW9uVHlwZSA9PSB0aGlzLnF1ZXN0aW9uVHlwZUVudW0uVGV4dElucHV0KSB7XG4gICAgICBxdWVzdGlvbkdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICBhbnN3ZXJJZDogbW9kZWwuU3VydmV5QW5zd2VySWQsXG4gICAgICAgIGFuc3dlclRleHQ6IG1vZGVsLkFuc3dlclxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChxdWVzdGlvbkdyb3VwLnZhbHVlLnF1ZXN0aW9uVHlwZSA9PSB0aGlzLnF1ZXN0aW9uVHlwZUVudW0uQ2hlY2tCb3ggfHwgcXVlc3Rpb25Hcm91cC52YWx1ZS5xdWVzdGlvblR5cGUgPT0gdGhpcy5xdWVzdGlvblR5cGVFbnVtLkRyb3BEb3duTXVsdGkpIHtcbiAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuYW5zd2VySWRBcnIuc2V0VmFsdWUobW9kZWwuQW5zd2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5hbnN3ZXJJZC5zZXRWYWx1ZShtb2RlbC5BbnN3ZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZDdHJscy5ydWxlUXVlc3Rpb25BcnJheS52YWx1ZS5maW5kSW5kZXgoeCA9PiB4LnF1ZXN0aW9uSWQgPT0gbW9kZWwuUXVlc3Rpb25JZCkgPiAtMSkge1xuICAgICAgdGhpcy5jaGVja1J1bGVzKClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRRdWVzdGlvbnMoc3VydmV5OiBTdXJ2ZXlEdG8pIHtcbiAgICBzdXJ2ZXkuc3VydmV5UGFnZXMuZm9yRWFjaCgocGFnZSwgcGFnZUluZGV4KSA9PiB7XG4gICAgICBwYWdlLnN1cnZleVF1ZXN0aW9uR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuXG4gICAgICAgIGdyb3VwLnN1cnZleVF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXN0aW9uID0+IHtcblxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCAhPSA2KSB7XG4gICAgICAgICAgICB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnB1c2godGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXA8UXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KHtcbiAgICAgICAgICAgICAgc3VydmV5UGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IFtxdWVzdGlvbi5xdWVzdGlvbklkXSxcbiAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiBbcXVlc3Rpb24ucXVlc3Rpb25UeXBlSWRdLFxuICAgICAgICAgICAgICBpc01hdHJpeEdyb3VwOiBbZmFsc2VdLFxuICAgICAgICAgICAgICBhbnN3ZXJJZDogW251bGxdLFxuICAgICAgICAgICAgICBhbnN3ZXJJZEFycjogW251bGxdLFxuICAgICAgICAgICAgICBhbnN3ZXJUZXh0OiBbbnVsbF0sXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IFtxdWVzdGlvbi5pc1JlcXVpcmVkXSxcbiAgICAgICAgICAgICAgaXNWYWxpZDogW251bGxdLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBbcXVlc3Rpb24uaXNSZWFkT25seV0sXG4gICAgICAgICAgICAgIGlzU2hvdzogW3F1ZXN0aW9uLmlzVmlzYWJsZV0sXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWRfZGVmYXVsdDogW3F1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICAgICAgICBpc1Nob3dfZGVmYXVsdDogW3F1ZXN0aW9uLmlzVmlzYWJsZV1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5wdXNoKHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPih7XG4gICAgICAgICAgICAgIHN1cnZleVBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBbcXVlc3Rpb24ucXVlc3Rpb25JZF0sXG4gICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogW3F1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkXSxcbiAgICAgICAgICAgICAgaXNNYXRyaXhHcm91cDogW3RydWVdLFxuICAgICAgICAgICAgICBhbnN3ZXJJZDogW251bGxdLFxuICAgICAgICAgICAgICBhbnN3ZXJJZEFycjogW251bGxdLFxuICAgICAgICAgICAgICBhbnN3ZXJUZXh0OiBbbnVsbF0sXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IFtxdWVzdGlvbi5pc1JlcXVpcmVkXSxcbiAgICAgICAgICAgICAgaXNWYWxpZDogW251bGxdLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBbcXVlc3Rpb24uaXNSZWFkT25seV0sXG4gICAgICAgICAgICAgIGlzU2hvdzogW3F1ZXN0aW9uLmlzVmlzYWJsZV0sXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWRfZGVmYXVsdDogW3F1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICAgICAgICBpc1Nob3dfZGVmYXVsdDogW3F1ZXN0aW9uLmlzVmlzYWJsZV0sXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHF1ZXN0aW9uLnN1cnZleVN1YlF1ZXN0aW9ucy5mb3JFYWNoKHN1YlF1ZXN0aW9uID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5wdXNoKHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPih7XG4gICAgICAgICAgICAgICAgc3VydmV5UGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogW3N1YlF1ZXN0aW9uLnF1ZXN0aW9uSWRdLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogW3N1YlF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkXSxcbiAgICAgICAgICAgICAgICBpc01hdHJpeEdyb3VwOiBbZmFsc2VdLFxuICAgICAgICAgICAgICAgIGFuc3dlcklkOiBbbnVsbF0sXG4gICAgICAgICAgICAgICAgYW5zd2VySWRBcnI6IFtudWxsXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXJUZXh0OiBbbnVsbF0sXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogW3F1ZXN0aW9uLmlzUmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgIGlzVmFsaWQ6IFtudWxsXSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBbc3ViUXVlc3Rpb24uaXNSZWFkT25seV0sXG4gICAgICAgICAgICAgICAgaXNTaG93OiBbc3ViUXVlc3Rpb24uaXNWaXNhYmxlXSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkX2RlZmF1bHQ6IFtzdWJRdWVzdGlvbi5pc1JlYWRPbmx5XSxcbiAgICAgICAgICAgICAgICBpc1Nob3dfZGVmYXVsdDogW3N1YlF1ZXN0aW9uLmlzVmlzYWJsZV1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHN1cnZleS5zdXJ2ZXlSdWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgcnVsZS5ydWxlRXhwcy5mb3JFYWNoKHJ1bGVFeHAgPT4ge1xuICAgICAgICB0aGlzLmZDdHJscy5ydWxlUXVlc3Rpb25BcnJheS5wdXNoKHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFJ1bGVRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZT4oe1xuICAgICAgICAgIHF1ZXN0aW9uSWQ6IHJ1bGVFeHAucXVlc3Rpb25JZFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBoYXZlSW5WYWxpZGF0ZVF1ZXN0aW9ucygpIHtcbiAgICBjb25zdCBjdXJyZW50UGFnZUluZGV4ID0gdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZTtcbiAgICB2YXIgaW52YWxpZFJlY29yZHMgPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbHRlcih4ID0+IHguc3VydmV5UGFnZUluZGV4ID09IGN1cnJlbnRQYWdlSW5kZXhcbiAgICAgICYmIHguaXNSZXF1aXJlZCA9PSB0cnVlICYmIHguaXNWYWxpZCAhPSB0cnVlXG4gICAgICAmJiB4LmlzRGlzYWJsZWQgPT0gZmFsc2UgJiYgeC5pc1Nob3cgPT0gdHJ1ZSAmJiB4LmlzTWF0cml4R3JvdXAgIT0gdHJ1ZSk7XG4gICAgaWYgKGludmFsaWRSZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICQoYCNzdXJ2ZXktcGFnZV8ke2N1cnJlbnRQYWdlSW5kZXh9YCkuYWRkQ2xhc3MoJ3N1cnZleS1wYWdlX3N1Ym1pdHRlZCcpO1xuICAgIH1cblxuICAgIGlmIChpbnZhbGlkUmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhpbnZhbGlkUmVjb3Jkcyk7XG4gICAgfVxuICAgIHJldHVybiBpbnZhbGlkUmVjb3Jkcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1J1bGVzKCkge1xuXG4gICAgdGhpcy5zdXJ2ZXlEYXRhLnN1cnZleVJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICB0aGlzLl9jaGVja1J1bGVFeHBzVXNlY2FzZS5leGVjdXRlKHtcbiAgICAgICAgcnVsZUV4cHM6IHJ1bGUucnVsZUV4cHMsXG4gICAgICAgIHF1ZXN0aW9uczogdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZVxuICAgICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG5cbiAgICAgICAgdmFyIGlzUGFzc2VkID0gcmVzdWx0LmV4cHJlc3Rpb25SZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSBmYWxzZSkubGVuZ3RoID09IDA7XG4gICAgICAgIGlmIChpc1Bhc3NlZCkge1xuXG4gICAgICAgICAgcnVsZS5ydWxlUmVzdWx0UXVlc3Rpb25zLmZvckVhY2gocmVzdWx0UXVlc3Rpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbmRJbmRleCh4ID0+IHgucXVlc3Rpb25JZCA9PSByZXN1bHRRdWVzdGlvbi5xdWVzdGlvbklkKTtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbkdyb3VwID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5hdChpbmRleCk7XG4gICAgICAgICAgICBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5TaG93KSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuaXNTaG93LnNldFZhbHVlKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChydWxlLmxvZ2ljQWN0aW9uSWQgPT0gTG9naWNBY3Rpb25FbnVtLkhpZGUpIHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc1Nob3cuc2V0VmFsdWUoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChydWxlLmxvZ2ljQWN0aW9uSWQgPT0gTG9naWNBY3Rpb25FbnVtLkVuYWJsZSkge1xuICAgICAgICAgICAgICBxdWVzdGlvbkdyb3VwLmNvbnRyb2xzLmlzRGlzYWJsZWQuc2V0VmFsdWUoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChydWxlLmxvZ2ljQWN0aW9uSWQgPT0gTG9naWNBY3Rpb25FbnVtLkRpc2FibGUpIHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc0Rpc2FibGVkLnNldFZhbHVlKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChydWxlLmxvZ2ljQWN0aW9uSWQgPT0gTG9naWNBY3Rpb25FbnVtLlNldEFuc3dlcikge1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBydWxlLnJ1bGVSZXN1bHRRdWVzdGlvbnMuZm9yRWFjaChyZXN1bHRRdWVzdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUuZmluZEluZGV4KHggPT4geC5xdWVzdGlvbklkID09IHJlc3VsdFF1ZXN0aW9uLnF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uR3JvdXAgPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LmF0KGluZGV4KTtcbiAgICAgICAgICAgIHF1ZXN0aW9uR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgIGlzU2hvdzogcXVlc3Rpb25Hcm91cC52YWx1ZS5pc1Nob3dfZGVmYXVsdCxcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogcXVlc3Rpb25Hcm91cC52YWx1ZS5pc0Rpc2FibGVkX2RlZmF1bHRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE5leHRTaG93ZWRQYWdlKCkge1xuICAgIHZhciBjdXJyZW50UGFnZUluZGV4ID0gdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZTtcbiAgICB2YXIgc2hvd2VkUGFnZXMgPSB0aGlzLnNob3dlZFN1cnZleVBhZ2VzO1xuICAgIHZhciBuZXh0U2hvd2VkUGFnZXMgPSBzaG93ZWRQYWdlcy5maWx0ZXIoeCA9PiB4ID4gY3VycmVudFBhZ2VJbmRleCk7XG4gICAgaWYgKG5leHRTaG93ZWRQYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbmV4dFNob3dlZFBhZ2VzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJldlNob3dlZFBhZ2UoKSB7XG4gICAgdmFyIGN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlO1xuICAgIHZhciBzaG93ZWRQYWdlcyA9IHRoaXMuc2hvd2VkU3VydmV5UGFnZXM7XG4gICAgdmFyIHByZXZTaG93ZWRQYWdlcyA9IHNob3dlZFBhZ2VzLmZpbHRlcih4ID0+IHggPCBjdXJyZW50UGFnZUluZGV4KTtcbiAgICBpZiAocHJldlNob3dlZFBhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwcmV2U2hvd2VkUGFnZXNbcHJldlNob3dlZFBhZ2VzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkXCIgKm5nSWY9XCJzdXJ2ZXlEYXRhICE9IG51bGxcIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdXJ2ZXlQYWdlIG9mIHN1cnZleURhdGE/LnN1cnZleVBhZ2VzOyBsZXQgc3VydmV5UGFnZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgW2F0dHIuaWRdPVwiJ3N1cnZleS1wYWdlXycrc3VydmV5UGFnZUluZGV4XCIgW25nQ2xhc3NdPVwieydkLW5vbmUnOiBzdXJ2ZXlQYWdlSW5kZXggIT0gZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWV9XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1cnZleVBhZ2Uuc3VydmV5UXVlc3Rpb25Hcm91cHNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkLWJvZHlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2YXktZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7aXRlbS5xdWVzdGlvbkdyb3VwTmFtZX19XHJcbiAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLXN1Yi10aXRsZSBcIj5cclxuICAgICAgICAgICAgICAgIHt7aXRlbS5xdWVzdGlvbkdyb3VwRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGl0ZW0uc3VydmV5UXVlc3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlICNxdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgPT0gcXVlc3Rpb25UeXBlRW51bS5Cb29sZWFuXCJcclxuICAgICAgICAgICAgICAgIFtpc1Nob3ddPVwiIChxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc1Nob3dcIlxyXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzRGlzYWJsZWRcIiA+PC9saWItcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10ZXh0LXRlbXBsYXRlICNxdWVzdGlvblRleHRUZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgPT0gcXVlc3Rpb25UeXBlRW51bS5UZXh0SW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbaXNUZXh0QXJlYV09XCJxdWVzdGlvbi5pc0FkdmFuY2VUZXh0QXJlYVwiID48L2xpYi1xdWVzdGlvbi10ZXh0LXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXJhZGlvLWJ1dHRvbi10ZW1wbGF0ZSAjcXVlc3Rpb25SYWRpb0J1dHRvblRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLlJhZGlvQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFtpc1Nob3ddPVwiIChxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc1Nob3dcIlxyXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzRGlzYWJsZWRcIiA+PC9saWItcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlICNxdWVzdGlvbkRyb3Bkb3duVGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgKGVtaXR0ZXIpPVwib25VcGRhdGVBbnN3ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uRHJvcERvd25cIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiID48L2xpYi1xdWVzdGlvbi1kcm9wZG93bi10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLWRyb3Bkb3duLW11bHRpLXRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLkRyb3BEb3duTXVsdGlcIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiPjwvbGliLXF1ZXN0aW9uLWRyb3Bkb3duLW11bHRpLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1jaGVjay1ib3gtdGVtcGxhdGUgI3F1ZXN0aW9uQ2hlY2tCb3hUZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgPT0gcXVlc3Rpb25UeXBlRW51bS5DaGVja0JveFwiXHJcbiAgICAgICAgICAgICAgICBbaXNTaG93XT1cIiAocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNTaG93XCJcclxuICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cIihxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc0Rpc2FibGVkXCIgPjwvbGliLXF1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGUgI3F1ZXN0aW9uTWF0cml4VGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgKGVtaXR0ZXIpPVwib25VcGRhdGVBbnN3ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uTWF0cml4XCJcclxuICAgICAgICAgICAgICAgIFtpc1Nob3ddPVwiIChxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc1Nob3dcIlxyXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzRGlzYWJsZWRcIiA+PC9saWItcXVlc3Rpb24tbWF0cml4LXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzdXJ2YXktY2FyZC1mb290clwiICpuZ0lmPVwic3VydmV5RGF0YSAhPSBudWxsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCIganVzdGlmeS1jb250ZW50OiBzdGFydDtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1wYWdpbmF0aW9uIGZ3LWJvbGRcIiA+XHJcbiAgICAgICAgPHNwYW4+e3tjdXJydW50U2hvd2VkU3VydmV5UGFnZXN9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgbWUtMlwiPm9mPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7c2hvd2VkU3VydmV5UGFnZXM/Lmxlbmd0aH19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
@@ -0,0 +1,63 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { SurveryLibComponent } from './survery-lib.component';
3
+ import { CommonModule } from '@angular/common';
4
+ import { HttpClientModule } from '@angular/common/http';
5
+ import { ReactiveFormsModule, FormsModule } from '@angular/forms';
6
+ import { NgsFormsModule } from '@ng-stack/forms';
7
+ import { QuestionTextTemplateComponent } from './components/question-text-template/question-text-template.component';
8
+ import { QuestionRadioButtonTemplateComponent } from './components/question-radio-button-template/question-radio-button-template.component';
9
+ import { QuestionCheckBoxTemplateComponent } from './components/question-check-box-template/question-check-box-template.component';
10
+ import { QuestionDropdownTemplateComponent } from './components/question-dropdown-template/question-dropdown-template.component';
11
+ import { QuestionMatrixTemplateComponent } from './components/question-matrix-template/question-matrix-template.component';
12
+ import { QuestionBooleanTemplateComponent } from './components/question-boolean-template/question-boolean-template.component';
13
+ import { FilterQuestionPipe } from './pipes/filter-question.pipe';
14
+ import { DefaultQuestionAnswerPipe } from './pipes/default-question-answer.pipe';
15
+ import { DefaultQuestionAnswersPipe } from './pipes/default-question-answers.pipe';
16
+ import { QuestionDropdownMultiTemplateComponent } from './components/question-dropdown-multi-template/question-dropdown-multi-template.component';
17
+ import { NgSelectModule } from '@ng-select/ng-select';
18
+ import * as i0 from "@angular/core";
19
+ export class SurveryLibModule {
20
+ static forRoot() {
21
+ return {
22
+ ngModule: SurveryLibModule
23
+ };
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
26
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibModule, declarations: [SurveryLibComponent,
27
+ QuestionTextTemplateComponent,
28
+ QuestionRadioButtonTemplateComponent,
29
+ QuestionCheckBoxTemplateComponent,
30
+ QuestionDropdownTemplateComponent,
31
+ QuestionMatrixTemplateComponent,
32
+ QuestionBooleanTemplateComponent,
33
+ QuestionDropdownMultiTemplateComponent,
34
+ FilterQuestionPipe,
35
+ DefaultQuestionAnswerPipe,
36
+ DefaultQuestionAnswersPipe], imports: [CommonModule, HttpClientModule, ReactiveFormsModule, FormsModule, NgsFormsModule, NgSelectModule], exports: [SurveryLibComponent] }); }
37
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibModule, imports: [CommonModule, HttpClientModule, ReactiveFormsModule, FormsModule, NgsFormsModule, NgSelectModule] }); }
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibModule, decorators: [{
40
+ type: NgModule,
41
+ args: [{
42
+ declarations: [
43
+ SurveryLibComponent,
44
+ QuestionTextTemplateComponent,
45
+ QuestionRadioButtonTemplateComponent,
46
+ QuestionCheckBoxTemplateComponent,
47
+ QuestionDropdownTemplateComponent,
48
+ QuestionMatrixTemplateComponent,
49
+ QuestionBooleanTemplateComponent,
50
+ QuestionDropdownMultiTemplateComponent,
51
+ FilterQuestionPipe,
52
+ DefaultQuestionAnswerPipe,
53
+ DefaultQuestionAnswersPipe
54
+ ],
55
+ imports: [
56
+ CommonModule, HttpClientModule, ReactiveFormsModule, FormsModule, NgsFormsModule, NgSelectModule
57
+ ],
58
+ exports: [
59
+ SurveryLibComponent
60
+ ]
61
+ }]
62
+ }] });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmVyeS1saWIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VydmVyeS1saWIvc3JjL2xpYi9zdXJ2ZXJ5LWxpYi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDckgsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sc0ZBQXNGLENBQUM7QUFDNUksT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFDbkksT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDakksT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDM0gsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNEVBQTRFLENBQUM7QUFDOUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sMEZBQTBGLENBQUM7QUFDbEosT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQXdCdEQsTUFBTSxPQUFPLGdCQUFnQjtJQUNwQixNQUFNLENBQUMsT0FBTztRQUNuQixPQUFPO1lBQ0wsUUFBUSxFQUFFLGdCQUFnQjtTQUMzQixDQUFBO0lBQ0gsQ0FBQzs4R0FMVSxnQkFBZ0I7K0dBQWhCLGdCQUFnQixpQkFuQnpCLG1CQUFtQjtZQUNuQiw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLGlDQUFpQztZQUNqQyxpQ0FBaUM7WUFDakMsK0JBQStCO1lBQy9CLGdDQUFnQztZQUNoQyxzQ0FBc0M7WUFDdEMsa0JBQWtCO1lBQ2xCLHlCQUF5QjtZQUN6QiwwQkFBMEIsYUFHMUIsWUFBWSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRyxjQUFjLEVBQUUsY0FBYyxhQUdqRyxtQkFBbUI7K0dBR1YsZ0JBQWdCLFlBTnpCLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUcsY0FBYyxFQUFFLGNBQWM7OzJGQU14RixnQkFBZ0I7a0JBckI1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7d0JBQ25CLDZCQUE2Qjt3QkFDN0Isb0NBQW9DO3dCQUNwQyxpQ0FBaUM7d0JBQ2pDLGlDQUFpQzt3QkFDakMsK0JBQStCO3dCQUMvQixnQ0FBZ0M7d0JBQ2hDLHNDQUFzQzt3QkFDdEMsa0JBQWtCO3dCQUNsQix5QkFBeUI7d0JBQ3pCLDBCQUEwQjtxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUcsY0FBYyxFQUFFLGNBQWM7cUJBQ2xHO29CQUNELE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7cUJBQ3BCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1cnZlcnlMaWJDb21wb25lbnQgfSBmcm9tICcuL3N1cnZlcnktbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdzRm9ybXNNb2R1bGUgfSBmcm9tICdAbmctc3RhY2svZm9ybXMnO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tdGV4dC10ZW1wbGF0ZS9xdWVzdGlvbi10ZXh0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvQnV0dG9uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlL3F1ZXN0aW9uLXJhZGlvLWJ1dHRvbi10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja0JveFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZS9xdWVzdGlvbi1jaGVjay1ib3gtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXN0aW9uRHJvcGRvd25UZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xdWVzdGlvbi1kcm9wZG93bi10ZW1wbGF0ZS9xdWVzdGlvbi1kcm9wZG93bi10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGUvcXVlc3Rpb24tbWF0cml4LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlL3F1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbHRlclF1ZXN0aW9uUGlwZSB9IGZyb20gJy4vcGlwZXMvZmlsdGVyLXF1ZXN0aW9uLnBpcGUnO1xuaW1wb3J0IHsgRGVmYXVsdFF1ZXN0aW9uQW5zd2VyUGlwZSB9IGZyb20gJy4vcGlwZXMvZGVmYXVsdC1xdWVzdGlvbi1hbnN3ZXIucGlwZSc7XG5pbXBvcnQgeyBEZWZhdWx0UXVlc3Rpb25BbnN3ZXJzUGlwZSB9IGZyb20gJy4vcGlwZXMvZGVmYXVsdC1xdWVzdGlvbi1hbnN3ZXJzLnBpcGUnO1xuaW1wb3J0IHsgUXVlc3Rpb25Ecm9wZG93bk11bHRpVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tZHJvcGRvd24tbXVsdGktdGVtcGxhdGUvcXVlc3Rpb24tZHJvcGRvd24tbXVsdGktdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFN1cnZlcnlMaWJDb21wb25lbnQsXG4gICAgUXVlc3Rpb25UZXh0VGVtcGxhdGVDb21wb25lbnQsXG4gICAgUXVlc3Rpb25SYWRpb0J1dHRvblRlbXBsYXRlQ29tcG9uZW50LFxuICAgIFF1ZXN0aW9uQ2hlY2tCb3hUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICBRdWVzdGlvbkRyb3Bkb3duVGVtcGxhdGVDb21wb25lbnQsXG4gICAgUXVlc3Rpb25NYXRyaXhUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICBRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUNvbXBvbmVudCxcbiAgICBRdWVzdGlvbkRyb3Bkb3duTXVsdGlUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICBGaWx0ZXJRdWVzdGlvblBpcGUsXG4gICAgRGVmYXVsdFF1ZXN0aW9uQW5zd2VyUGlwZSxcbiAgICBEZWZhdWx0UXVlc3Rpb25BbnN3ZXJzUGlwZVxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLCBIdHRwQ2xpZW50TW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSAsIE5nc0Zvcm1zTW9kdWxlICxOZ1NlbGVjdE1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU3VydmVyeUxpYkNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFN1cnZlcnlMaWJNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxTdXJ2ZXJ5TGliTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBTdXJ2ZXJ5TGliTW9kdWxlXG4gICAgfVxuICB9XG4gfVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3VzZWNhc2VzL2Jhc2UvdXNlLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlQ2FzZTxTLCBUPiB7XHJcbiAgZXhlY3V0ZShwYXJhbXM6IFMpOiBPYnNlcnZhYmxlPFQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZUNhc2VXaXRob3V0T2JzZXJ2PFMsIFQ+IHtcclxuICBleGVjdXRlKHBhcmFtczogUyk6IFQ7XHJcbn0iXX0=