@glowgreen/gg-questionnaire-v2 0.0.44 → 0.0.46
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.
- package/bundles/glowgreen-gg-questionnaire-v2.umd.js +56 -69
- package/bundles/glowgreen-gg-questionnaire-v2.umd.js.map +1 -1
- package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js +1 -1
- package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js.map +1 -1
- package/esm2015/lib/services/filter.service.js +22 -25
- package/esm5/lib/services/filter.service.js +57 -70
- package/fesm2015/glowgreen-gg-questionnaire-v2.js +21 -24
- package/fesm2015/glowgreen-gg-questionnaire-v2.js.map +1 -1
- package/fesm5/glowgreen-gg-questionnaire-v2.js +56 -69
- package/fesm5/glowgreen-gg-questionnaire-v2.js.map +1 -1
- package/glowgreen-gg-questionnaire-v2.metadata.json +1 -1
- package/lib/services/filter.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -35,7 +35,7 @@ var FilterService = /** @class */ (function () {
|
|
|
35
35
|
* @return {?} An array of filtered sections with their filtered questions.
|
|
36
36
|
*/
|
|
37
37
|
function (sections, currentQuestionnaireForm, additionalData) {
|
|
38
|
-
var e_1, _a, e_2, _b, e_3, _c, e_4, _d
|
|
38
|
+
var e_1, _a, e_2, _b, e_3, _c, e_4, _d;
|
|
39
39
|
/** @type {?} */
|
|
40
40
|
var filteredSections = [];
|
|
41
41
|
try {
|
|
@@ -47,8 +47,8 @@ var FilterService = /** @class */ (function () {
|
|
|
47
47
|
/** @type {?} */
|
|
48
48
|
var filteredQuestions = [];
|
|
49
49
|
try {
|
|
50
|
-
for (var
|
|
51
|
-
var question =
|
|
50
|
+
for (var _e = (e_2 = void 0, tslib_1.__values(section.questions)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
51
|
+
var question = _f.value;
|
|
52
52
|
if (!this.meetsConditionGroups(question.conditionGroups, currentQuestionnaireForm, additionalData)) {
|
|
53
53
|
continue;
|
|
54
54
|
}
|
|
@@ -56,69 +56,56 @@ var FilterService = /** @class */ (function () {
|
|
|
56
56
|
if (question.type === 'repeater') {
|
|
57
57
|
/** @type {?} */
|
|
58
58
|
var items = (/** @type {?} */ (currentQuestionnaireForm.get([section.name, question.name])));
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
var
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
var repeaterQuestion = _l.value;
|
|
67
|
-
/** @type {?} */
|
|
68
|
-
var meetsConditions = this.meetsConditionGroups(repeaterQuestion.conditionGroups, currentQuestionnaireForm, additionalData, (/** @type {?} */ (repeaterItem)));
|
|
69
|
-
if (meetsConditions) {
|
|
70
|
-
this.setFetchForQuestion(repeaterQuestion, additionalData, currentQuestionnaireForm, (/** @type {?} */ (repeaterItem)));
|
|
71
|
-
filteredRepeaterItemQuestions.push(repeaterQuestion);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
76
|
-
finally {
|
|
59
|
+
if (items && items.controls) {
|
|
60
|
+
try {
|
|
61
|
+
for (var _g = (e_3 = void 0, tslib_1.__values(items.controls)), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
62
|
+
var repeaterItem = _h.value;
|
|
63
|
+
/** @type {?} */
|
|
64
|
+
var filteredRepeaterItemQuestions = [];
|
|
65
|
+
console.log('Filtering repeater item questions');
|
|
77
66
|
try {
|
|
78
|
-
|
|
67
|
+
for (var _j = (e_4 = void 0, tslib_1.__values(question.repeaterQuestions)), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
68
|
+
var repeaterQuestion = _k.value;
|
|
69
|
+
/** @type {?} */
|
|
70
|
+
var meetsConditions = this.meetsConditionGroups(repeaterQuestion.conditionGroups, currentQuestionnaireForm, additionalData, (/** @type {?} */ (repeaterItem)));
|
|
71
|
+
if (meetsConditions) {
|
|
72
|
+
repeaterQuestion.selectOptions = this.getFetchOptionsForQuestion(repeaterQuestion, additionalData, currentQuestionnaireForm, (/** @type {?} */ (repeaterItem)));
|
|
73
|
+
filteredRepeaterItemQuestions.push(repeaterQuestion);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
79
76
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
var filteredRepeaterItemQuestion = filteredRepeaterItemQuestions_1_1.value;
|
|
85
|
-
if (filteredRepeaterItemQuestion.type !== 'select') {
|
|
86
|
-
continue;
|
|
77
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
78
|
+
finally {
|
|
79
|
+
try {
|
|
80
|
+
if (_k && !_k.done && (_d = _j.return)) _d.call(_j);
|
|
87
81
|
}
|
|
88
|
-
|
|
82
|
+
finally { if (e_4) throw e_4.error; }
|
|
89
83
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (filteredRepeaterItemQuestions_1_1 && !filteredRepeaterItemQuestions_1_1.done && (_e = filteredRepeaterItemQuestions_1.return)) _e.call(filteredRepeaterItemQuestions_1);
|
|
84
|
+
/** @type {?} */
|
|
85
|
+
var index = items.controls.indexOf(repeaterItem);
|
|
86
|
+
if (!question.filteredRepeaterQuestions) {
|
|
87
|
+
question.filteredRepeaterQuestions = [];
|
|
95
88
|
}
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
/** @type {?} */
|
|
99
|
-
var index = items.controls.indexOf(repeaterItem);
|
|
100
|
-
if (!question.filteredRepeaterQuestions) {
|
|
101
|
-
question.filteredRepeaterQuestions = [];
|
|
89
|
+
question.filteredRepeaterQuestions[index] = filteredRepeaterItemQuestions;
|
|
102
90
|
}
|
|
103
|
-
question.filteredRepeaterQuestions[index] = filteredRepeaterItemQuestions;
|
|
104
91
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
92
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
93
|
+
finally {
|
|
94
|
+
try {
|
|
95
|
+
if (_h && !_h.done && (_c = _g.return)) _c.call(_g);
|
|
96
|
+
}
|
|
97
|
+
finally { if (e_3) throw e_3.error; }
|
|
110
98
|
}
|
|
111
|
-
finally { if (e_3) throw e_3.error; }
|
|
112
99
|
}
|
|
113
100
|
}
|
|
114
|
-
this.
|
|
101
|
+
question.selectOptions = this.getFetchOptionsForQuestion(question, additionalData, currentQuestionnaireForm);
|
|
115
102
|
filteredQuestions.push(question);
|
|
116
103
|
}
|
|
117
104
|
}
|
|
118
105
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
119
106
|
finally {
|
|
120
107
|
try {
|
|
121
|
-
if (
|
|
108
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
122
109
|
}
|
|
123
110
|
finally { if (e_2) throw e_2.error; }
|
|
124
111
|
}
|
|
@@ -146,7 +133,7 @@ var FilterService = /** @class */ (function () {
|
|
|
146
133
|
* @param {?=} repeaterItem
|
|
147
134
|
* @return {?}
|
|
148
135
|
*/
|
|
149
|
-
FilterService.prototype.
|
|
136
|
+
FilterService.prototype.getFetchOptionsForQuestion = /**
|
|
150
137
|
* @private
|
|
151
138
|
* @param {?} question
|
|
152
139
|
* @param {?} additionalData
|
|
@@ -155,8 +142,8 @@ var FilterService = /** @class */ (function () {
|
|
|
155
142
|
* @return {?}
|
|
156
143
|
*/
|
|
157
144
|
function (question, additionalData, currentQuestionnaireForm, repeaterItem) {
|
|
158
|
-
if (question.fetchPath) {
|
|
159
|
-
return;
|
|
145
|
+
if (!question.fetchPath) {
|
|
146
|
+
return question.selectOptions;
|
|
160
147
|
}
|
|
161
148
|
/** @type {?} */
|
|
162
149
|
var options = additionalData[question.fetchPath];
|
|
@@ -169,7 +156,7 @@ var FilterService = /** @class */ (function () {
|
|
|
169
156
|
if (!question.selectOptions) {
|
|
170
157
|
question.selectOptions = [];
|
|
171
158
|
}
|
|
172
|
-
|
|
159
|
+
return question.selectOptions.concat(options);
|
|
173
160
|
};
|
|
174
161
|
/**
|
|
175
162
|
* @private
|
|
@@ -182,7 +169,7 @@ var FilterService = /** @class */ (function () {
|
|
|
182
169
|
* @return {?}
|
|
183
170
|
*/
|
|
184
171
|
function (items) {
|
|
185
|
-
var
|
|
172
|
+
var e_5, _a;
|
|
186
173
|
if (!items) {
|
|
187
174
|
return null;
|
|
188
175
|
}
|
|
@@ -207,12 +194,12 @@ var FilterService = /** @class */ (function () {
|
|
|
207
194
|
}
|
|
208
195
|
}
|
|
209
196
|
}
|
|
210
|
-
catch (
|
|
197
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
211
198
|
finally {
|
|
212
199
|
try {
|
|
213
200
|
if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
|
|
214
201
|
}
|
|
215
|
-
finally { if (
|
|
202
|
+
finally { if (e_5) throw e_5.error; }
|
|
216
203
|
}
|
|
217
204
|
return convertedArray;
|
|
218
205
|
};
|
|
@@ -297,7 +284,7 @@ var FilterService = /** @class */ (function () {
|
|
|
297
284
|
* @return {?} A boolean stating if the condition group conditions has been met.
|
|
298
285
|
*/
|
|
299
286
|
function (conditionGroup, currentQuestionnaireForm, additionalData, repeaterItem) {
|
|
300
|
-
var
|
|
287
|
+
var e_6, _a;
|
|
301
288
|
if (!conditionGroup.conditions || conditionGroup.conditions.length === 0) {
|
|
302
289
|
return true;
|
|
303
290
|
}
|
|
@@ -309,12 +296,12 @@ var FilterService = /** @class */ (function () {
|
|
|
309
296
|
results.push(this.meetsCondition(condition, currentQuestionnaireForm, additionalData, repeaterItem));
|
|
310
297
|
}
|
|
311
298
|
}
|
|
312
|
-
catch (
|
|
299
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
313
300
|
finally {
|
|
314
301
|
try {
|
|
315
302
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
316
303
|
}
|
|
317
|
-
finally { if (
|
|
304
|
+
finally { if (e_6) throw e_6.error; }
|
|
318
305
|
}
|
|
319
306
|
switch (conditionGroup.relationship) {
|
|
320
307
|
case ConditionRelationship.Every:
|
|
@@ -365,7 +352,7 @@ var FilterService = /** @class */ (function () {
|
|
|
365
352
|
* @return {?} A boolean stating if the condition group conditions has been met.
|
|
366
353
|
*/
|
|
367
354
|
function (condition, currentQuestionnaireForm, additionalData, repeaterItem) {
|
|
368
|
-
var
|
|
355
|
+
var e_7, _a, e_8, _b;
|
|
369
356
|
/** @type {?} */
|
|
370
357
|
var v1s = this.getValuesForArray(condition.v1s, currentQuestionnaireForm, additionalData, repeaterItem);
|
|
371
358
|
/** @type {?} */
|
|
@@ -395,7 +382,7 @@ var FilterService = /** @class */ (function () {
|
|
|
395
382
|
for (var v2s_1 = tslib_1.__values(v2s), v2s_1_1 = v2s_1.next(); !v2s_1_1.done; v2s_1_1 = v2s_1.next()) {
|
|
396
383
|
var v2 = v2s_1_1.value;
|
|
397
384
|
try {
|
|
398
|
-
for (var v1s_1 = (
|
|
385
|
+
for (var v1s_1 = (e_8 = void 0, tslib_1.__values(v1s)), v1s_1_1 = v1s_1.next(); !v1s_1_1.done; v1s_1_1 = v1s_1.next()) {
|
|
399
386
|
var v1 = v1s_1_1.value;
|
|
400
387
|
switch (condition.type) {
|
|
401
388
|
case ConditionType.EqualTo:
|
|
@@ -429,21 +416,21 @@ var FilterService = /** @class */ (function () {
|
|
|
429
416
|
}
|
|
430
417
|
}
|
|
431
418
|
}
|
|
432
|
-
catch (
|
|
419
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
433
420
|
finally {
|
|
434
421
|
try {
|
|
435
422
|
if (v1s_1_1 && !v1s_1_1.done && (_b = v1s_1.return)) _b.call(v1s_1);
|
|
436
423
|
}
|
|
437
|
-
finally { if (
|
|
424
|
+
finally { if (e_8) throw e_8.error; }
|
|
438
425
|
}
|
|
439
426
|
}
|
|
440
427
|
}
|
|
441
|
-
catch (
|
|
428
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
442
429
|
finally {
|
|
443
430
|
try {
|
|
444
431
|
if (v2s_1_1 && !v2s_1_1.done && (_a = v2s_1.return)) _a.call(v2s_1);
|
|
445
432
|
}
|
|
446
|
-
finally { if (
|
|
433
|
+
finally { if (e_7) throw e_7.error; }
|
|
447
434
|
}
|
|
448
435
|
}
|
|
449
436
|
return result;
|
|
@@ -494,7 +481,7 @@ var FilterService = /** @class */ (function () {
|
|
|
494
481
|
* @return {?} An array of strings/values
|
|
495
482
|
*/
|
|
496
483
|
function (paths, currentQuestionnaireForm, additionalData, repeaterItem) {
|
|
497
|
-
var
|
|
484
|
+
var e_9, _a;
|
|
498
485
|
if (currentQuestionnaireForm) {
|
|
499
486
|
/** @type {?} */
|
|
500
487
|
var values = [];
|
|
@@ -506,12 +493,12 @@ var FilterService = /** @class */ (function () {
|
|
|
506
493
|
values.push(value);
|
|
507
494
|
}
|
|
508
495
|
}
|
|
509
|
-
catch (
|
|
496
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
510
497
|
finally {
|
|
511
498
|
try {
|
|
512
499
|
if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);
|
|
513
500
|
}
|
|
514
|
-
finally { if (
|
|
501
|
+
finally { if (e_9) throw e_9.error; }
|
|
515
502
|
}
|
|
516
503
|
return values;
|
|
517
504
|
}
|
|
@@ -610,4 +597,4 @@ var FilterService = /** @class */ (function () {
|
|
|
610
597
|
return FilterService;
|
|
611
598
|
}());
|
|
612
599
|
export { FilterService };
|
|
613
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2xvd2dyZWVuL2dnLXF1ZXN0aW9ubmFpcmUtdjIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7QUFJNUI7SUFLRTtJQUFnQixDQUFDO0lBRWpCOzs7Ozs7T0FNRzs7Ozs7Ozs7O0lBQ0ksc0NBQWM7Ozs7Ozs7O0lBQXJCLFVBQXNCLFFBQXdCLEVBQUUsd0JBQTBDLEVBQUUsY0FBdUI7OztZQUMzRyxnQkFBZ0IsR0FBRyxFQUFFOztZQUMzQixLQUFzQixJQUFBLGFBQUEsaUJBQUEsUUFBUSxDQUFBLGtDQUFBLHdEQUFFO2dCQUEzQixJQUFNLE9BQU8scUJBQUE7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLENBQUMsRUFBRTtvQkFDakcsU0FBUztpQkFDVjs7b0JBRUssaUJBQWlCLEdBQUcsRUFBRTs7b0JBQzVCLEtBQXVCLElBQUEsb0JBQUEsaUJBQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFO3dCQUFyQyxJQUFNLFFBQVEsV0FBQTt3QkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxFQUFFOzRCQUNsRyxTQUFTO3lCQUNWO3dCQUVELHdGQUF3Rjt3QkFDeEYsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTs7Z0NBQzFCLEtBQUssR0FBRyxtQkFBQSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFhOztnQ0FFdEYsS0FBMkIsSUFBQSxvQkFBQSxpQkFBQSxLQUFLLENBQUMsUUFBUSxDQUFBLENBQUEsZ0JBQUEsNEJBQUU7b0NBQXRDLElBQU0sWUFBWSxXQUFBOzt3Q0FDZiw2QkFBNkIsR0FBNEIsRUFBRTs7d0NBRWpFLEtBQStCLElBQUEsb0JBQUEsaUJBQUEsUUFBUSxDQUFDLGlCQUFpQixDQUFBLENBQUEsZ0JBQUEsNEJBQUU7NENBQXRELElBQU0sZ0JBQWdCLFdBQUE7O2dEQUVuQixlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUMvQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQ2hDLHdCQUF3QixFQUN4QixjQUFjLEVBQ2QsbUJBQUEsWUFBWSxFQUFhLENBQzFCOzRDQUVELElBQUksZUFBZSxFQUFFO2dEQUNuQixJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLG1CQUFBLFlBQVksRUFBYSxDQUFDLENBQUM7Z0RBQ2hILDZCQUE2QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOzZDQUN0RDt5Q0FDRjs7Ozs7Ozs7Ozt3Q0FFRCxLQUE0QyxJQUFBLGlEQUFBLGlCQUFBLDZCQUE2QixDQUFBLENBQUEsNEVBQUEsdUhBQUU7NENBQXRFLElBQU0sNEJBQTRCLDBDQUFBOzRDQUNyQyxJQUFJLDRCQUE0QixDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0RBQ2xELFNBQVM7NkNBQ1Y7NENBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDRCQUE0QixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO3lDQUNsRzs7Ozs7Ozs7Ozt3Q0FFSyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO29DQUVsRCxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFO3dDQUN2QyxRQUFRLENBQUMseUJBQXlCLEdBQUcsRUFBRSxDQUFDO3FDQUN6QztvQ0FFRCxRQUFRLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEdBQUcsNkJBQTZCLENBQUM7aUNBQzNFOzs7Ozs7Ozs7eUJBQ0Y7d0JBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLENBQUMsQ0FBQzt3QkFFN0UsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUNsQzs7Ozs7Ozs7O2dCQUVELElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDbEMsU0FBUztpQkFDVjtnQkFFRCxPQUFPLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO2dCQUN0QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDaEM7Ozs7Ozs7OztRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQzs7Ozs7Ozs7O0lBRU8sMkNBQW1COzs7Ozs7OztJQUEzQixVQUE0QixRQUFxQyxFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxZQUF3QjtRQUVuSSxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDdEIsT0FBTztTQUNSOztZQUVHLE9BQU8sR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNoRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztnQkFDM0QsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUM7WUFDdEgsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM3RDtRQUVELE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDM0IsUUFBUSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7U0FDN0I7UUFFRCxRQUFRLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Ozs7OztJQUVPLDBDQUFrQjs7Ozs7SUFBMUIsVUFBMkIsS0FBVTs7UUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QixLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QjtRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUM7U0FDYjs7WUFDSyxjQUFjLEdBQWtCLEVBQUU7O1lBQ3hDLEtBQW1CLElBQUEsVUFBQSxpQkFBQSxLQUFLLENBQUEsNEJBQUEsK0NBQUU7Z0JBQXJCLElBQU0sSUFBSSxrQkFBQTtnQkFDYixJQUFJLElBQUksRUFBRTtvQkFDUixJQUFJLElBQUksWUFBWSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUN0RCxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUMzQjt5QkFBTTt3QkFDTCxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7cUJBQ2pFO2lCQUNGO2FBQ0Y7Ozs7Ozs7OztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7Ozs7OztJQUVPLGlDQUFTOzs7OztJQUFqQixVQUFrQixJQUFTO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFHRDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7O0lBQ0ssNENBQW9COzs7Ozs7Ozs7O0lBQTVCLFVBQ0UsZUFBc0MsRUFDdEMsd0JBQTBDLEVBQzFDLGNBQXVCLEVBQ3ZCLFlBQXdCO1FBSjFCLGlCQVlDO1FBTkMsSUFBSSxDQUFDLGVBQWUsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxlQUFlLENBQUMsS0FBSzs7OztRQUFDLFVBQUMsQ0FBQztZQUM3QixPQUFPLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztRQUN0RyxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7O0lBQ0ssMkNBQW1COzs7Ozs7Ozs7O0lBQTNCLFVBQ0UsY0FBOEIsRUFDOUIsd0JBQTBDLEVBQzFDLGNBQXVCLEVBQ3ZCLFlBQXdCOztRQUV4QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEUsT0FBTyxJQUFJLENBQUM7U0FDYjs7WUFFSyxPQUFPLEdBQUcsRUFBRTs7WUFFbEIsS0FBd0IsSUFBQSxLQUFBLGlCQUFBLGNBQWMsQ0FBQyxVQUFVLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQTlDLElBQU0sU0FBUyxXQUFBO2dCQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBQ3RHOzs7Ozs7Ozs7UUFFRCxRQUFRLGNBQWMsQ0FBQyxZQUFZLEVBQUU7WUFDbkMsS0FBSyxxQkFBcUIsQ0FBQyxLQUFLO2dCQUM5QixPQUFPLE9BQU8sQ0FBQyxLQUFLOzs7O2dCQUFDLFVBQUMsQ0FBQztvQkFDckIsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDO2dCQUNwQixDQUFDLEVBQUMsQ0FBQztZQUNMLEtBQUsscUJBQXFCLENBQUMsR0FBRztnQkFDNUIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUk7Ozs7Z0JBQUMsVUFBQyxDQUFDO29CQUN0QixPQUFPLENBQUMsS0FBSyxJQUFJLENBQUM7Z0JBQ3BCLENBQUMsRUFBQyxDQUFDO1lBQ0w7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7O0lBQ0ssc0NBQWM7Ozs7Ozs7Ozs7SUFBdEIsVUFDRSxTQUFvQixFQUNwQix3QkFBbUMsRUFDbkMsY0FBdUIsRUFDdkIsWUFBd0I7OztZQUVsQixHQUFHLEdBQWUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FBQzs7WUFDL0csR0FBRyxHQUFlLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUM7O1lBRWpILE1BQU0sR0FBRyxLQUFLO1FBRWxCLFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRTtZQUN0QixLQUFLLGFBQWEsQ0FBQyxRQUFRO2dCQUN6QixNQUFNLEdBQUksR0FBRyxDQUFDLE1BQU07Ozs7Z0JBQUMsVUFBQyxFQUFFO29CQUN0QixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsRUFBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxRQUFRO2dCQUN6QixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU07Ozs7Z0JBQUMsVUFBQyxFQUFFO29CQUNyQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsRUFBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU07WUFDUixPQUFPLENBQUM7Z0JBQ04sS0FBZSxJQUFBLFFBQUEsaUJBQUEsR0FBRyxDQUFBLHdCQUFBLHlDQUFFO29CQUFmLElBQUksRUFBRSxnQkFBQTs7d0JBQ1QsS0FBZSxJQUFBLHVCQUFBLGlCQUFBLEdBQUcsQ0FBQSxDQUFBLHdCQUFBLHlDQUFFOzRCQUFmLElBQUksRUFBRSxnQkFBQTs0QkFDVCxRQUFRLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0NBQ3RCLEtBQUssYUFBYSxDQUFDLE9BQU87b0NBQ3hCLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ2hDLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ2hDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTt3Q0FBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO3FDQUFFO29DQUNqQyxNQUFNO2dDQUNSLEtBQUssYUFBYSxDQUFDLFVBQVU7b0NBQzNCLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ2hDLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ2hDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTt3Q0FBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO3FDQUFFO29DQUNqQyxNQUFNO2dDQUNSLEtBQUssYUFBYSxDQUFDLFdBQVc7b0NBQzVCLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ3BCLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ3BCLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTt3Q0FBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO3FDQUFFO29DQUNoQyxNQUFNO2dDQUNSLEtBQUssYUFBYSxDQUFDLFFBQVE7b0NBQ3pCLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ3BCLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ3BCLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTt3Q0FBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO3FDQUFFO29DQUNoQyxNQUFNOzZCQUNUO3lCQUNGOzs7Ozs7Ozs7aUJBQ0Y7Ozs7Ozs7O2FBQUE7U0FDSjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Ozs7OztJQUVPLHlDQUFpQjs7Ozs7SUFBekIsVUFBMEIsS0FBSztRQUM3QixRQUFRLEtBQUssRUFBRTtZQUNiLEtBQUssSUFBSTtnQkFDUCxPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7O0lBQ0sseUNBQWlCOzs7Ozs7Ozs7O0lBQXpCLFVBQ0UsS0FBb0IsRUFDcEIsd0JBQW1DLEVBQ25DLGNBQXVCLEVBQ3ZCLFlBQXdCOztRQUV4QixJQUFJLHdCQUF3QixFQUFFOztnQkFDdEIsTUFBTSxHQUFHLEVBQUU7O2dCQUNqQixLQUFtQixJQUFBLFVBQUEsaUJBQUEsS0FBSyxDQUFBLDRCQUFBLCtDQUFFO29CQUFyQixJQUFNLElBQUksa0JBQUE7O3dCQUNQLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUM7b0JBQ2xHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3BCOzs7Ozs7Ozs7WUFDRCxPQUFPLE1BQU0sQ0FBQztTQUNmO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRzs7Ozs7Ozs7Ozs7SUFDSyx5Q0FBaUI7Ozs7Ozs7Ozs7SUFBekIsVUFDRSxJQUFZLEVBQ1osd0JBQW1DLEVBQ25DLGNBQXVCLEVBQ3ZCLFlBQXdCO1FBRXhCLElBQUksd0JBQXdCLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsY0FBYyxHQUFHLEVBQUUsQ0FBQzthQUNyQjs7Z0JBRUcsT0FBTyxHQUFHLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFM0QsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksRUFBRTtnQkFDaEQsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDN0M7O2dCQUVLLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDdkUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRzs7Ozs7Ozs7O0lBQ0ssNENBQW9COzs7Ozs7OztJQUE1QixVQUE2QixJQUFZO1FBQ3ZDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxPQUFPO2dCQUNWLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNILENBQUM7O2dCQTlVRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7Ozt3QkFiRDtDQTBWQyxBQS9VRCxJQStVQztTQTVVWSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjdGlvbic7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZGl0aW9uJztcbmltcG9ydCB7IENvbmRpdGlvbkdyb3VwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25kaXRpb24tZ3JvdXAnO1xuaW1wb3J0IHsgQ29uZGl0aW9uVHlwZSB9IGZyb20gJy4uL2VudW1zL2NvbmRpdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgQ29uZGl0aW9uUmVsYXRpb25zaGlwIH0gZnJvbSAnLi4vZW51bXMvY29uZGl0aW9uLXJlbGF0aW9uc2hpcC5lbnVtJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9xdWVzdGlvbic7XG5pbXBvcnQgeyBSZXBlYXRlclF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBlYXRlci1xdWVzdGlvbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYW4gYXJyYXkgb2Ygc2VjdGlvbnMgYmFzZWQgb24gdGhlaXIgY29uZGl0aW9uIGdyb3Vwcy5cbiAgICogQHBhcmFtIHNlY3Rpb25zIFRoZSBhcnJheSBvZiBzZWN0aW9ucyB0byBmaWx0ZXIuXG4gICAqIEBwYXJhbSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gVGhlIGN1cnJlbnQgZm9ybSBkYXRhLCBjYW4gYmUgbnVsbC91bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZpbHRlcmVkIHNlY3Rpb25zIHdpdGggdGhlaXIgZmlsdGVyZWQgcXVlc3Rpb25zLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGZpbHRlclNlY3Rpb25zKHNlY3Rpb25zOiBBcnJheTxTZWN0aW9uPiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAgfCBudWxsLCBhZGRpdGlvbmFsRGF0YT86IE9iamVjdCk6IEFycmF5PFNlY3Rpb24+IHtcbiAgICBjb25zdCBmaWx0ZXJlZFNlY3Rpb25zID0gW107XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICBpZiAoIXRoaXMubWVldHNDb25kaXRpb25Hcm91cHMoc2VjdGlvbi5jb25kaXRpb25Hcm91cHMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZFF1ZXN0aW9ucyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBzZWN0aW9uLnF1ZXN0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMubWVldHNDb25kaXRpb25Hcm91cHMocXVlc3Rpb24uY29uZGl0aW9uR3JvdXBzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgaXQncyBhIHJlcGVhdGVyIHdlIG5lZWQgdG8gZG8gYSBsb3Qgb2YgZXh0cmEgZmlsdGVyaW5nIGR1ZSB0byBwZXIgaXRlbSBjb25kaXRpb25zLlxuICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gJ3JlcGVhdGVyJykge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5O1xuXG4gICAgICAgICAgZm9yIChjb25zdCByZXBlYXRlckl0ZW0gb2YgaXRlbXMuY29udHJvbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmVwZWF0ZXJJdGVtUXVlc3Rpb25zOiBBcnJheTxSZXBlYXRlclF1ZXN0aW9uPiA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcGVhdGVyUXVlc3Rpb24gb2YgcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMpIHtcblxuICAgICAgICAgICAgICBjb25zdCBtZWV0c0NvbmRpdGlvbnMgPSB0aGlzLm1lZXRzQ29uZGl0aW9uR3JvdXBzKFxuICAgICAgICAgICAgICAgIHJlcGVhdGVyUXVlc3Rpb24uY29uZGl0aW9uR3JvdXBzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRGF0YSxcbiAgICAgICAgICAgICAgICByZXBlYXRlckl0ZW0gYXMgRm9ybUdyb3VwXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKG1lZXRzQ29uZGl0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmV0Y2hGb3JRdWVzdGlvbihyZXBlYXRlclF1ZXN0aW9uLCBhZGRpdGlvbmFsRGF0YSwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCByZXBlYXRlckl0ZW0gYXMgRm9ybUdyb3VwKTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFJlcGVhdGVySXRlbVF1ZXN0aW9ucy5wdXNoKHJlcGVhdGVyUXVlc3Rpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyZWRSZXBlYXRlckl0ZW1RdWVzdGlvbiBvZiAgZmlsdGVyZWRSZXBlYXRlckl0ZW1RdWVzdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUmVwZWF0ZXJJdGVtUXVlc3Rpb24udHlwZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuc2V0RmV0Y2hGb3JRdWVzdGlvbihmaWx0ZXJlZFJlcGVhdGVySXRlbVF1ZXN0aW9uLCBhZGRpdGlvbmFsRGF0YSwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtcy5jb250cm9scy5pbmRleE9mKHJlcGVhdGVySXRlbSk7XG5cbiAgICAgICAgICAgIGlmICghcXVlc3Rpb24uZmlsdGVyZWRSZXBlYXRlclF1ZXN0aW9ucykge1xuICAgICAgICAgICAgICBxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHF1ZXN0aW9uLmZpbHRlcmVkUmVwZWF0ZXJRdWVzdGlvbnNbaW5kZXhdID0gZmlsdGVyZWRSZXBlYXRlckl0ZW1RdWVzdGlvbnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRGZXRjaEZvclF1ZXN0aW9uKHF1ZXN0aW9uLCBhZGRpdGlvbmFsRGF0YSwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKTtcblxuICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9ucy5wdXNoKHF1ZXN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbHRlcmVkUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc2VjdGlvbi5xdWVzdGlvbnMgPSBmaWx0ZXJlZFF1ZXN0aW9ucztcbiAgICAgIGZpbHRlcmVkU2VjdGlvbnMucHVzaChzZWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyZWRTZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgc2V0RmV0Y2hGb3JRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24gfCBSZXBlYXRlclF1ZXN0aW9uLCBhZGRpdGlvbmFsRGF0YSwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCByZXBlYXRlckl0ZW0/OiBGb3JtR3JvdXApIHtcblxuICAgIGlmIChxdWVzdGlvbi5mZXRjaFBhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgb3B0aW9ucyA9IGFkZGl0aW9uYWxEYXRhW3F1ZXN0aW9uLmZldGNoUGF0aF07XG4gICAgaWYgKHF1ZXN0aW9uLmZldGNoU2VsZWN0b3JzICYmIHF1ZXN0aW9uLmZldGNoU2VsZWN0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFsdWVzRm9yQXJyYXkocXVlc3Rpb24uZmV0Y2hTZWxlY3RvcnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEsIHJlcGVhdGVySXRlbSk7XG4gICAgICBvcHRpb25zID0gXy5nZXQoYWRkaXRpb25hbERhdGFbcXVlc3Rpb24uZmV0Y2hQYXRoXSwgdmFsdWVzKTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gdGhpcy5nZXRGaW5hbEZldGNoQXJyYXkob3B0aW9ucyk7XG5cbiAgICBpZiAoIXF1ZXN0aW9uLnNlbGVjdE9wdGlvbnMpIHtcbiAgICAgIHF1ZXN0aW9uLnNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICBxdWVzdGlvbi5zZWxlY3RPcHRpb25zID0gcXVlc3Rpb24uc2VsZWN0T3B0aW9ucy5jb25jYXQob3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbmFsRmV0Y2hBcnJheShpdGVtczogYW55KTogQXJyYXk8T2JqZWN0PiB7XG4gICAgaWYgKCFpdGVtcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIGl0ZW1zID0gXy5rZXlzKGl0ZW1zKTtcbiAgICB9XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY29udmVydGVkQXJyYXk6IEFycmF5PE9iamVjdD4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0ICYmIGl0ZW0udmFsdWUgJiYgaXRlbS5sYWJlbCkge1xuICAgICAgICAgIGNvbnZlcnRlZEFycmF5LnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udmVydGVkQXJyYXkucHVzaCh7bGFiZWw6IHRoaXMudXBwZXJjYXNlKGl0ZW0pLCB2YWx1ZTogaXRlbX0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0ZWRBcnJheTtcbiAgfVxuXG4gIHByaXZhdGUgdXBwZXJjYXNlKGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgaXRlbS5zbGljZSgxKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBlYWNoIGNvbmRpdGlvbiBncm91cHMgY29uZGl0aW9ucyBoYXZlIGJlZW4gbWV0LlxuICAgKiBAcGFyYW0gY29uZGl0aW9uR3JvdXBzIFRoZSBhcnJheSBvZiBjb25kaXRpb24gZ3JvdXBzLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gc3RhdGluZyBpZiB0aGUgY29uZGl0aW9uIGdyb3VwcyBjb25kaXRpb25zIGhhcyBiZWVuIG1ldC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgbWVldHNDb25kaXRpb25Hcm91cHMoXG4gICAgY29uZGl0aW9uR3JvdXBzOiBBcnJheTxDb25kaXRpb25Hcm91cD4sXG4gICAgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAgfCBudWxsLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHJlcGVhdGVySXRlbT86IEZvcm1Hcm91cFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbmRpdGlvbkdyb3VwcyB8fCBjb25kaXRpb25Hcm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmRpdGlvbkdyb3Vwcy5ldmVyeSgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubWVldHNDb25kaXRpb25Hcm91cCh4LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhLCByZXBlYXRlckl0ZW0pID09PSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGNvbmRpdGlvbiBncm91cHMgY29uZGl0aW9ucyBoYXZlIGJlZW4gbWV0LlxuICAgKiBAcGFyYW0gY29uZGl0aW9uR3JvdXAgVGhlIGNvbmRpdGlvbiBncm91cCB0byBjaGVjay5cbiAgICogQHBhcmFtIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSBUaGUgY3VycmVudCBmb3JtIGRhdGEsIGNhbiBiZSBudWxsL3VuZGVmaW5lZC5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHN0YXRpbmcgaWYgdGhlIGNvbmRpdGlvbiBncm91cCBjb25kaXRpb25zIGhhcyBiZWVuIG1ldC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgbWVldHNDb25kaXRpb25Hcm91cChcbiAgICBjb25kaXRpb25Hcm91cDogQ29uZGl0aW9uR3JvdXAsXG4gICAgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAgfCBudWxsLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHJlcGVhdGVySXRlbT86IEZvcm1Hcm91cFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbmRpdGlvbkdyb3VwLmNvbmRpdGlvbnMgfHwgY29uZGl0aW9uR3JvdXAuY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbkdyb3VwLmNvbmRpdGlvbnMpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh0aGlzLm1lZXRzQ29uZGl0aW9uKGNvbmRpdGlvbiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSwgcmVwZWF0ZXJJdGVtKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb25kaXRpb25Hcm91cC5yZWxhdGlvbnNoaXApIHtcbiAgICAgIGNhc2UgQ29uZGl0aW9uUmVsYXRpb25zaGlwLkV2ZXJ5OlxuICAgICAgICByZXR1cm4gcmVzdWx0cy5ldmVyeSgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB4ID09PSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgQ29uZGl0aW9uUmVsYXRpb25zaGlwLkFueTpcbiAgICAgICAgcmV0dXJuICEhcmVzdWx0cy5maW5kKCh4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHggPT09IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGNvbmRpdGlvbiBoYXMgYmVlbiBtZXQuXG4gICAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBjaGVjay5cbiAgICogQHBhcmFtIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSBUaGUgY3VycmVudCBmb3JtIGRhdGEsIGNhbiBiZSBudWxsL3VuZGVmaW5lZC5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHN0YXRpbmcgaWYgdGhlIGNvbmRpdGlvbiBncm91cCBjb25kaXRpb25zIGhhcyBiZWVuIG1ldC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgbWVldHNDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBDb25kaXRpb24sXG4gICAgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAsXG4gICAgYWRkaXRpb25hbERhdGE/OiBPYmplY3QsXG4gICAgcmVwZWF0ZXJJdGVtPzogRm9ybUdyb3VwXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHYxczogQXJyYXk8YW55PiA9IHRoaXMuZ2V0VmFsdWVzRm9yQXJyYXkoY29uZGl0aW9uLnYxcywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSwgcmVwZWF0ZXJJdGVtKTtcbiAgICBjb25zdCB2MnM6IEFycmF5PGFueT4gPSB0aGlzLmdldFZhbHVlc0ZvckFycmF5KGNvbmRpdGlvbi52MnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEsIHJlcGVhdGVySXRlbSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG5cbiAgICBzd2l0Y2ggKGNvbmRpdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIENvbmRpdGlvblR5cGUuRXhjbHVkZXM6XG4gICAgICAgIHJlc3VsdCA9ICB2MXMuZmlsdGVyKCh2MSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2MnMuaW5kZXhPZih2MSkgPiAtMTtcbiAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29uZGl0aW9uVHlwZS5JbmNsdWRlczpcbiAgICAgICAgcmVzdWx0ID0gdjFzLmZpbHRlcigodjEpID0+IHtcbiAgICAgICAgICByZXR1cm4gdjJzLmluZGV4T2YodjEpID4gLTE7XG4gICAgICAgIH0pLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBmb3IgKGxldCB2MiBvZiB2MnMpIHtcbiAgICAgICAgICBmb3IgKGxldCB2MSBvZiB2MXMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBDb25kaXRpb25UeXBlLkVxdWFsVG86XG4gICAgICAgICAgICAgICAgdjEgPSB0aGlzLmdldFN0cmluZ0ZvclZhbHVlKHYxKTtcbiAgICAgICAgICAgICAgICB2MiA9IHRoaXMuZ2V0U3RyaW5nRm9yVmFsdWUodjIpO1xuICAgICAgICAgICAgICAgIGlmICh2MSA9PT0gdjIpIHsgcmVzdWx0ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIENvbmRpdGlvblR5cGUuTm90RXF1YWxUbzpcbiAgICAgICAgICAgICAgICB2MSA9IHRoaXMuZ2V0U3RyaW5nRm9yVmFsdWUodjEpO1xuICAgICAgICAgICAgICAgIHYyID0gdGhpcy5nZXRTdHJpbmdGb3JWYWx1ZSh2Mik7XG4gICAgICAgICAgICAgICAgaWYgKHYxICE9PSB2MikgeyByZXN1bHQgPSB0cnVlOyB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQ29uZGl0aW9uVHlwZS5HcmVhdGVyVGhhbjpcbiAgICAgICAgICAgICAgICB2MSA9IHBhcnNlRmxvYXQodjEpO1xuICAgICAgICAgICAgICAgIHYyID0gcGFyc2VGbG9hdCh2Mik7XG4gICAgICAgICAgICAgICAgaWYgKHYxID49IHYyKSB7IHJlc3VsdCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBDb25kaXRpb25UeXBlLkxlc3NUaGFuOlxuICAgICAgICAgICAgICAgIHYxID0gcGFyc2VGbG9hdCh2MSk7XG4gICAgICAgICAgICAgICAgdjIgPSBwYXJzZUZsb2F0KHYyKTtcbiAgICAgICAgICAgICAgICBpZiAodjEgPD0gdjIpIHsgcmVzdWx0ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldFN0cmluZ0ZvclZhbHVlKHZhbHVlKSB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBudWxsOlxuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdmFsdWVzIGZvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAgKiBAcGFyYW0gcGF0aHMgVGhlIGFycmF5IG9mIHN0cmluZ3MgdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gVGhlIGN1cnJlbnQgZm9ybSBkYXRhLCBjYW4gYmUgbnVsbC91bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MvdmFsdWVzXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdldFZhbHVlc0ZvckFycmF5KFxuICAgIHBhdGhzOiBBcnJheTxzdHJpbmc+LFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHJlcGVhdGVySXRlbT86IEZvcm1Hcm91cFxuICApOiBBcnJheTxhbnk+IHtcbiAgICBpZiAoY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGb3JTdHJpbmcocGF0aCwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSwgcmVwZWF0ZXJJdGVtKTtcbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhdGhzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgY3VycmVudCB2YWx1ZSBmb3IgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSBwYXRoIFRoZSBzdHJpbmcgdmFsdWUgdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gVGhlIGN1cnJlbnQgZm9ybSBkYXRhLCBjYW4gYmUgbnVsbC91bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIEEgc3RyaW5nL3ZhbHVlLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZUZvclN0cmluZyhcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXAsXG4gICAgYWRkaXRpb25hbERhdGE/OiBPYmplY3QsXG4gICAgcmVwZWF0ZXJJdGVtPzogRm9ybUdyb3VwXG4gICkge1xuICAgIGlmIChjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0pIHtcbiAgICAgIGlmICghYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgYWRkaXRpb25hbERhdGEgPSB7fTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvbnRyb2wgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KHBhdGgudG9TdHJpbmcoKSk7XG5cbiAgICAgIGlmICgoIWNvbnRyb2wgfHwgIWNvbnRyb2wudmFsdWUpICYmIHJlcGVhdGVySXRlbSkge1xuICAgICAgICBjb250cm9sID0gcmVwZWF0ZXJJdGVtLmdldChwYXRoLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wgPyBjb250cm9sLnZhbHVlIDogdGhpcy5jb252ZXJ0U3RyaW5nVG9WYWx1ZShwYXRoKTtcbiAgICAgIHJldHVybiBfLmdldChhZGRpdGlvbmFsRGF0YSwgcGF0aCwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0U3RyaW5nVG9WYWx1ZShwYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSB2YWx1ZS5cbiAgICogRWcuIHRydWUvZmFsc2UuXG4gICAqIEBwYXJhbSBwYXRoIFRoZSBzdHJpbmcgdmFsdWUgdG8gY2hlY2sgZm9yIGNvbnZlcnNpb247XG4gICAqIEByZXR1cm5zIEVpdGhlciBhIHN0cmluZyBvciB0aGUgY29udmVydGVkIHZhbHVlLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0U3RyaW5nVG9WYWx1ZShwYXRoOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHBhdGgpIHtcbiAgICAgIGNhc2UgJ3RydWUnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2ZhbHNlJzpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2xvd2dyZWVuL2dnLXF1ZXN0aW9ubmFpcmUtdjIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7QUFJNUI7SUFLRTtJQUFnQixDQUFDO0lBRWpCOzs7Ozs7T0FNRzs7Ozs7Ozs7O0lBQ0ksc0NBQWM7Ozs7Ozs7O0lBQXJCLFVBQXNCLFFBQXdCLEVBQUUsd0JBQTBDLEVBQUUsY0FBdUI7OztZQUMzRyxnQkFBZ0IsR0FBRyxFQUFFOztZQUMzQixLQUFzQixJQUFBLGFBQUEsaUJBQUEsUUFBUSxDQUFBLGtDQUFBLHdEQUFFO2dCQUEzQixJQUFNLE9BQU8scUJBQUE7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLENBQUMsRUFBRTtvQkFDakcsU0FBUztpQkFDVjs7b0JBRUssaUJBQWlCLEdBQUcsRUFBRTs7b0JBQzVCLEtBQXVCLElBQUEsb0JBQUEsaUJBQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFO3dCQUFyQyxJQUFNLFFBQVEsV0FBQTt3QkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxFQUFFOzRCQUNsRyxTQUFTO3lCQUNWO3dCQUVELHdGQUF3Rjt3QkFDeEYsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFL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QGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWN0aW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25kaXRpb24nO1xuaW1wb3J0IHsgQ29uZGl0aW9uR3JvdXAgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmRpdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBDb25kaXRpb25UeXBlIH0gZnJvbSAnLi4vZW51bXMvY29uZGl0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBDb25kaXRpb25SZWxhdGlvbnNoaXAgfSBmcm9tICcuLi9lbnVtcy9jb25kaXRpb24tcmVsYXRpb25zaGlwLmVudW0nO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9uJztcbmltcG9ydCB7IFJlcGVhdGVyUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcGVhdGVyLXF1ZXN0aW9uJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICAvKipcbiAgICogRmlsdGVycyBhbiBhcnJheSBvZiBzZWN0aW9ucyBiYXNlZCBvbiB0aGVpciBjb25kaXRpb24gZ3JvdXBzLlxuICAgKiBAcGFyYW0gc2VjdGlvbnMgVGhlIGFycmF5IG9mIHNlY3Rpb25zIHRvIGZpbHRlci5cbiAgICogQHBhcmFtIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSBUaGUgY3VycmVudCBmb3JtIGRhdGEsIGNhbiBiZSBudWxsL3VuZGVmaW5lZC5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmlsdGVyZWQgc2VjdGlvbnMgd2l0aCB0aGVpciBmaWx0ZXJlZCBxdWVzdGlvbnMuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyU2VjdGlvbnMoc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCB8IG51bGwsIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0KTogQXJyYXk8U2VjdGlvbj4ge1xuICAgIGNvbnN0IGZpbHRlcmVkU2VjdGlvbnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgIGlmICghdGhpcy5tZWV0c0NvbmRpdGlvbkdyb3VwcyhzZWN0aW9uLmNvbmRpdGlvbkdyb3VwcywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkUXVlc3Rpb25zID0gW107XG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5tZWV0c0NvbmRpdGlvbkdyb3VwcyhxdWVzdGlvbi5jb25kaXRpb25Hcm91cHMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBpdCdzIGEgcmVwZWF0ZXIgd2UgbmVlZCB0byBkbyBhIGxvdCBvZiBleHRyYSBmaWx0ZXJpbmcgZHVlIHRvIHBlciBpdGVtIGNvbmRpdGlvbnMuXG4gICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSAncmVwZWF0ZXInKSB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KFtzZWN0aW9uLm5hbWUsIHF1ZXN0aW9uLm5hbWVdKSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgICBpZiAoaXRlbXMgJiYgaXRlbXMuY29udHJvbHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVwZWF0ZXJJdGVtIG9mIGl0ZW1zLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmVwZWF0ZXJJdGVtUXVlc3Rpb25zOiBBcnJheTxSZXBlYXRlclF1ZXN0aW9uPiA9IFtdO1xuXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaWx0ZXJpbmcgcmVwZWF0ZXIgaXRlbSBxdWVzdGlvbnMnKTtcblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcGVhdGVyUXVlc3Rpb24gb2YgcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1lZXRzQ29uZGl0aW9ucyA9IHRoaXMubWVldHNDb25kaXRpb25Hcm91cHMoXG4gICAgICAgICAgICAgICAgICByZXBlYXRlclF1ZXN0aW9uLmNvbmRpdGlvbkdyb3VwcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhLFxuICAgICAgICAgICAgICAgICAgcmVwZWF0ZXJJdGVtIGFzIEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAobWVldHNDb25kaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICByZXBlYXRlclF1ZXN0aW9uLnNlbGVjdE9wdGlvbnMgPSB0aGlzLmdldEZldGNoT3B0aW9uc0ZvclF1ZXN0aW9uKFxuICAgICAgICAgICAgICAgICAgICByZXBlYXRlclF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgICAgICAgICAgICAgICByZXBlYXRlckl0ZW0gYXMgRm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgZmlsdGVyZWRSZXBlYXRlckl0ZW1RdWVzdGlvbnMucHVzaChyZXBlYXRlclF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmNvbnRyb2xzLmluZGV4T2YocmVwZWF0ZXJJdGVtKTtcblxuICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uLmZpbHRlcmVkUmVwZWF0ZXJRdWVzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zID0gW107XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zW2luZGV4XSA9IGZpbHRlcmVkUmVwZWF0ZXJJdGVtUXVlc3Rpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgcXVlc3Rpb24uc2VsZWN0T3B0aW9ucyA9IHRoaXMuZ2V0RmV0Y2hPcHRpb25zRm9yUXVlc3Rpb24ocXVlc3Rpb24sIGFkZGl0aW9uYWxEYXRhLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0pO1xuXG4gICAgICAgIGZpbHRlcmVkUXVlc3Rpb25zLnB1c2gocXVlc3Rpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVyZWRRdWVzdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzZWN0aW9uLnF1ZXN0aW9ucyA9IGZpbHRlcmVkUXVlc3Rpb25zO1xuICAgICAgZmlsdGVyZWRTZWN0aW9ucy5wdXNoKHNlY3Rpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJlZFNlY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGZXRjaE9wdGlvbnNGb3JRdWVzdGlvbihcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24gfCBSZXBlYXRlclF1ZXN0aW9uLFxuICAgIGFkZGl0aW9uYWxEYXRhLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICByZXBlYXRlckl0ZW0/OiBGb3JtR3JvdXBcbiAgKSB7XG5cbiAgICBpZiAoIXF1ZXN0aW9uLmZldGNoUGF0aCkge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLnNlbGVjdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgbGV0IG9wdGlvbnMgPSBhZGRpdGlvbmFsRGF0YVtxdWVzdGlvbi5mZXRjaFBhdGhdO1xuICAgIGlmIChxdWVzdGlvbi5mZXRjaFNlbGVjdG9ycyAmJiBxdWVzdGlvbi5mZXRjaFNlbGVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhbHVlc0ZvckFycmF5KHF1ZXN0aW9uLmZldGNoU2VsZWN0b3JzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhLCByZXBlYXRlckl0ZW0pO1xuICAgICAgb3B0aW9ucyA9IF8uZ2V0KGFkZGl0aW9uYWxEYXRhW3F1ZXN0aW9uLmZldGNoUGF0aF0sIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IHRoaXMuZ2V0RmluYWxGZXRjaEFycmF5KG9wdGlvbnMpO1xuXG4gICAgaWYgKCFxdWVzdGlvbi5zZWxlY3RPcHRpb25zKSB7XG4gICAgICBxdWVzdGlvbi5zZWxlY3RPcHRpb25zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXN0aW9uLnNlbGVjdE9wdGlvbnMuY29uY2F0KG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaW5hbEZldGNoQXJyYXkoaXRlbXM6IGFueSk6IEFycmF5PE9iamVjdD4ge1xuICAgIGlmICghaXRlbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICBpdGVtcyA9IF8ua2V5cyhpdGVtcyk7XG4gICAgfVxuICAgIGlmIChpdGVtcy5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbnZlcnRlZEFycmF5OiBBcnJheTxPYmplY3Q+ID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE9iamVjdCAmJiBpdGVtLnZhbHVlICYmIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRBcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnZlcnRlZEFycmF5LnB1c2goe2xhYmVsOiB0aGlzLnVwcGVyY2FzZShpdGVtKSwgdmFsdWU6IGl0ZW19KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29udmVydGVkQXJyYXk7XG4gIH1cblxuICBwcml2YXRlIHVwcGVyY2FzZShpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gaXRlbS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGl0ZW0uc2xpY2UoMSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZWFjaCBjb25kaXRpb24gZ3JvdXBzIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIG1ldC5cbiAgICogQHBhcmFtIGNvbmRpdGlvbkdyb3VwcyBUaGUgYXJyYXkgb2YgY29uZGl0aW9uIGdyb3Vwcy5cbiAgICogQHBhcmFtIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSBUaGUgY3VycmVudCBmb3JtIGRhdGEsIGNhbiBiZSBudWxsL3VuZGVmaW5lZC5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHN0YXRpbmcgaWYgdGhlIGNvbmRpdGlvbiBncm91cHMgY29uZGl0aW9ucyBoYXMgYmVlbiBtZXQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIG1lZXRzQ29uZGl0aW9uR3JvdXBzKFxuICAgIGNvbmRpdGlvbkdyb3VwczogQXJyYXk8Q29uZGl0aW9uR3JvdXA+LFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwIHwgbnVsbCxcbiAgICBhZGRpdGlvbmFsRGF0YT86IE9iamVjdCxcbiAgICByZXBlYXRlckl0ZW0/OiBGb3JtR3JvdXBcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjb25kaXRpb25Hcm91cHMgfHwgY29uZGl0aW9uR3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjb25kaXRpb25Hcm91cHMuZXZlcnkoKHgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLm1lZXRzQ29uZGl0aW9uR3JvdXAoeCwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSwgcmVwZWF0ZXJJdGVtKSA9PT0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjb25kaXRpb24gZ3JvdXBzIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIG1ldC5cbiAgICogQHBhcmFtIGNvbmRpdGlvbkdyb3VwIFRoZSBjb25kaXRpb24gZ3JvdXAgdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gVGhlIGN1cnJlbnQgZm9ybSBkYXRhLCBjYW4gYmUgbnVsbC91bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiBzdGF0aW5nIGlmIHRoZSBjb25kaXRpb24gZ3JvdXAgY29uZGl0aW9ucyBoYXMgYmVlbiBtZXQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIG1lZXRzQ29uZGl0aW9uR3JvdXAoXG4gICAgY29uZGl0aW9uR3JvdXA6IENvbmRpdGlvbkdyb3VwLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwIHwgbnVsbCxcbiAgICBhZGRpdGlvbmFsRGF0YT86IE9iamVjdCxcbiAgICByZXBlYXRlckl0ZW0/OiBGb3JtR3JvdXBcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjb25kaXRpb25Hcm91cC5jb25kaXRpb25zIHx8IGNvbmRpdGlvbkdyb3VwLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25Hcm91cC5jb25kaXRpb25zKSB7XG4gICAgICByZXN1bHRzLnB1c2godGhpcy5tZWV0c0NvbmRpdGlvbihjb25kaXRpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEsIHJlcGVhdGVySXRlbSkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29uZGl0aW9uR3JvdXAucmVsYXRpb25zaGlwKSB7XG4gICAgICBjYXNlIENvbmRpdGlvblJlbGF0aW9uc2hpcC5FdmVyeTpcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHgpID0+IHtcbiAgICAgICAgICByZXR1cm4geCA9PT0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIENvbmRpdGlvblJlbGF0aW9uc2hpcC5Bbnk6XG4gICAgICAgIHJldHVybiAhIXJlc3VsdHMuZmluZCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB4ID09PSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjb25kaXRpb24gaGFzIGJlZW4gbWV0LlxuICAgKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gY2hlY2suXG4gICAqIEBwYXJhbSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gVGhlIGN1cnJlbnQgZm9ybSBkYXRhLCBjYW4gYmUgbnVsbC91bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiBzdGF0aW5nIGlmIHRoZSBjb25kaXRpb24gZ3JvdXAgY29uZGl0aW9ucyBoYXMgYmVlbiBtZXQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIG1lZXRzQ29uZGl0aW9uKFxuICAgIGNvbmRpdGlvbjogQ29uZGl0aW9uLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHJlcGVhdGVySXRlbT86IEZvcm1Hcm91cFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCB2MXM6IEFycmF5PGFueT4gPSB0aGlzLmdldFZhbHVlc0ZvckFycmF5KGNvbmRpdGlvbi52MXMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEsIHJlcGVhdGVySXRlbSk7XG4gICAgY29uc3QgdjJzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRWYWx1ZXNGb3JBcnJheShjb25kaXRpb24udjJzLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhLCByZXBlYXRlckl0ZW0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgc3dpdGNoIChjb25kaXRpb24udHlwZSkge1xuICAgICAgY2FzZSBDb25kaXRpb25UeXBlLkV4Y2x1ZGVzOlxuICAgICAgICByZXN1bHQgPSAgdjFzLmZpbHRlcigodjEpID0+IHtcbiAgICAgICAgICByZXR1cm4gdjJzLmluZGV4T2YodjEpID4gLTE7XG4gICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbmRpdGlvblR5cGUuSW5jbHVkZXM6XG4gICAgICAgIHJlc3VsdCA9IHYxcy5maWx0ZXIoKHYxKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHYycy5pbmRleE9mKHYxKSA+IC0xO1xuICAgICAgICB9KS5sZW5ndGggIT09IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZm9yIChsZXQgdjIgb2YgdjJzKSB7XG4gICAgICAgICAgZm9yIChsZXQgdjEgb2YgdjFzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi50eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgQ29uZGl0aW9uVHlwZS5FcXVhbFRvOlxuICAgICAgICAgICAgICAgIHYxID0gdGhpcy5nZXRTdHJpbmdGb3JWYWx1ZSh2MSk7XG4gICAgICAgICAgICAgICAgdjIgPSB0aGlzLmdldFN0cmluZ0ZvclZhbHVlKHYyKTtcbiAgICAgICAgICAgICAgICBpZiAodjEgPT09IHYyKSB7IHJlc3VsdCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBDb25kaXRpb25UeXBlLk5vdEVxdWFsVG86XG4gICAgICAgICAgICAgICAgdjEgPSB0aGlzLmdldFN0cmluZ0ZvclZhbHVlKHYxKTtcbiAgICAgICAgICAgICAgICB2MiA9IHRoaXMuZ2V0U3RyaW5nRm9yVmFsdWUodjIpO1xuICAgICAgICAgICAgICAgIGlmICh2MSAhPT0gdjIpIHsgcmVzdWx0ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIENvbmRpdGlvblR5cGUuR3JlYXRlclRoYW46XG4gICAgICAgICAgICAgICAgdjEgPSBwYXJzZUZsb2F0KHYxKTtcbiAgICAgICAgICAgICAgICB2MiA9IHBhcnNlRmxvYXQodjIpO1xuICAgICAgICAgICAgICAgIGlmICh2MSA+PSB2MikgeyByZXN1bHQgPSB0cnVlOyB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQ29uZGl0aW9uVHlwZS5MZXNzVGhhbjpcbiAgICAgICAgICAgICAgICB2MSA9IHBhcnNlRmxvYXQodjEpO1xuICAgICAgICAgICAgICAgIHYyID0gcGFyc2VGbG9hdCh2Mik7XG4gICAgICAgICAgICAgICAgaWYgKHYxIDw9IHYyKSB7IHJlc3VsdCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdHJpbmdGb3JWYWx1ZSh2YWx1ZSkge1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHZhbHVlcyBmb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICogQHBhcmFtIHBhdGhzIFRoZSBhcnJheSBvZiBzdHJpbmdzIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzL3ZhbHVlc1xuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNGb3JBcnJheShcbiAgICBwYXRoczogQXJyYXk8c3RyaW5nPixcbiAgICBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCxcbiAgICBhZGRpdGlvbmFsRGF0YT86IE9iamVjdCxcbiAgICByZXBlYXRlckl0ZW0/OiBGb3JtR3JvdXBcbiAgKTogQXJyYXk8YW55PiB7XG4gICAgaWYgKGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRm9yU3RyaW5nKHBhdGgsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEsIHJlcGVhdGVySXRlbSk7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXRocztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGN1cnJlbnQgdmFsdWUgZm9yIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgc3RyaW5nIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtIFRoZSBjdXJyZW50IGZvcm0gZGF0YSwgY2FuIGJlIG51bGwvdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJucyBBIHN0cmluZy92YWx1ZS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2V0VmFsdWVGb3JTdHJpbmcoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHJlcGVhdGVySXRlbT86IEZvcm1Hcm91cFxuICApIHtcbiAgICBpZiAoY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtKSB7XG4gICAgICBpZiAoIWFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgIGFkZGl0aW9uYWxEYXRhID0ge307XG4gICAgICB9XG5cbiAgICAgIGxldCBjb250cm9sID0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChwYXRoLnRvU3RyaW5nKCkpO1xuXG4gICAgICBpZiAoKCFjb250cm9sIHx8ICFjb250cm9sLnZhbHVlKSAmJiByZXBlYXRlckl0ZW0pIHtcbiAgICAgICAgY29udHJvbCA9IHJlcGVhdGVySXRlbS5nZXQocGF0aC50b1N0cmluZygpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sID8gY29udHJvbC52YWx1ZSA6IHRoaXMuY29udmVydFN0cmluZ1RvVmFsdWUocGF0aCk7XG4gICAgICByZXR1cm4gXy5nZXQoYWRkaXRpb25hbERhdGEsIHBhdGgsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFN0cmluZ1RvVmFsdWUocGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgdmFsdWUuXG4gICAqIEVnLiB0cnVlL2ZhbHNlLlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgc3RyaW5nIHZhbHVlIHRvIGNoZWNrIGZvciBjb252ZXJzaW9uO1xuICAgKiBAcmV0dXJucyBFaXRoZXIgYSBzdHJpbmcgb3IgdGhlIGNvbnZlcnRlZCB2YWx1ZS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFN0cmluZ1RvVmFsdWUocGF0aDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICBjYXNlICd0cnVlJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdmYWxzZSc6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -75,32 +75,29 @@ class FilterService {
|
|
|
75
75
|
if (question.type === 'repeater') {
|
|
76
76
|
/** @type {?} */
|
|
77
77
|
const items = (/** @type {?} */ (currentQuestionnaireForm.get([section.name, question.name])));
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const filteredRepeaterItemQuestions = [];
|
|
81
|
-
for (const repeaterQuestion of question.repeaterQuestions) {
|
|
78
|
+
if (items && items.controls) {
|
|
79
|
+
for (const repeaterItem of items.controls) {
|
|
82
80
|
/** @type {?} */
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
const filteredRepeaterItemQuestions = [];
|
|
82
|
+
console.log('Filtering repeater item questions');
|
|
83
|
+
for (const repeaterQuestion of question.repeaterQuestions) {
|
|
84
|
+
/** @type {?} */
|
|
85
|
+
const meetsConditions = this.meetsConditionGroups(repeaterQuestion.conditionGroups, currentQuestionnaireForm, additionalData, (/** @type {?} */ (repeaterItem)));
|
|
86
|
+
if (meetsConditions) {
|
|
87
|
+
repeaterQuestion.selectOptions = this.getFetchOptionsForQuestion(repeaterQuestion, additionalData, currentQuestionnaireForm, (/** @type {?} */ (repeaterItem)));
|
|
88
|
+
filteredRepeaterItemQuestions.push(repeaterQuestion);
|
|
89
|
+
}
|
|
87
90
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
|
|
91
|
+
/** @type {?} */
|
|
92
|
+
const index = items.controls.indexOf(repeaterItem);
|
|
93
|
+
if (!question.filteredRepeaterQuestions) {
|
|
94
|
+
question.filteredRepeaterQuestions = [];
|
|
92
95
|
}
|
|
93
|
-
|
|
96
|
+
question.filteredRepeaterQuestions[index] = filteredRepeaterItemQuestions;
|
|
94
97
|
}
|
|
95
|
-
/** @type {?} */
|
|
96
|
-
const index = items.controls.indexOf(repeaterItem);
|
|
97
|
-
if (!question.filteredRepeaterQuestions) {
|
|
98
|
-
question.filteredRepeaterQuestions = [];
|
|
99
|
-
}
|
|
100
|
-
question.filteredRepeaterQuestions[index] = filteredRepeaterItemQuestions;
|
|
101
98
|
}
|
|
102
99
|
}
|
|
103
|
-
this.
|
|
100
|
+
question.selectOptions = this.getFetchOptionsForQuestion(question, additionalData, currentQuestionnaireForm);
|
|
104
101
|
filteredQuestions.push(question);
|
|
105
102
|
}
|
|
106
103
|
if (filteredQuestions.length === 0) {
|
|
@@ -119,9 +116,9 @@ class FilterService {
|
|
|
119
116
|
* @param {?=} repeaterItem
|
|
120
117
|
* @return {?}
|
|
121
118
|
*/
|
|
122
|
-
|
|
123
|
-
if (question.fetchPath) {
|
|
124
|
-
return;
|
|
119
|
+
getFetchOptionsForQuestion(question, additionalData, currentQuestionnaireForm, repeaterItem) {
|
|
120
|
+
if (!question.fetchPath) {
|
|
121
|
+
return question.selectOptions;
|
|
125
122
|
}
|
|
126
123
|
/** @type {?} */
|
|
127
124
|
let options = additionalData[question.fetchPath];
|
|
@@ -134,7 +131,7 @@ class FilterService {
|
|
|
134
131
|
if (!question.selectOptions) {
|
|
135
132
|
question.selectOptions = [];
|
|
136
133
|
}
|
|
137
|
-
|
|
134
|
+
return question.selectOptions.concat(options);
|
|
138
135
|
}
|
|
139
136
|
/**
|
|
140
137
|
* @private
|