@glowgreen/gg-questionnaire-v2 0.0.110 → 0.0.112

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.
@@ -19,6 +19,8 @@ export class FormConstructorService {
19
19
  * @author Will Poulson
20
20
  */
21
21
  generateFormsForQuestionnaire(questionnaire, currentQuestionnaire, currentQuestionnaireForm, additionalData, skipFilter) {
22
+ console.log('zero');
23
+ console.log(additionalData);
22
24
  const sections = skipFilter ?
23
25
  questionnaire.sections :
24
26
  this.filterService.filterSections(questionnaire.sections, currentQuestionnaireForm, additionalData);
@@ -26,13 +28,15 @@ export class FormConstructorService {
26
28
  if (noChange && !skipFilter) {
27
29
  return null;
28
30
  }
29
- const questionnaireForms = this.generateFormsForSections(sections, currentQuestionnaireForm);
31
+ const questionnaireForms = this.generateFormsForSections(sections, currentQuestionnaireForm, additionalData);
30
32
  return { sections: sections, forms: questionnaireForms };
31
33
  }
32
- generateFormsForSections(sections, currentQuestionnaireForm) {
34
+ generateFormsForSections(sections, currentQuestionnaireForm, additionalData) {
35
+ console.log('one');
36
+ console.log(additionalData);
33
37
  const questionnaireForms = this.fb.group({});
34
38
  for (const section of sections) {
35
- const sectionForms = this.generateFormsForSection(section, currentQuestionnaireForm);
39
+ const sectionForms = this.generateFormsForSection(section, currentQuestionnaireForm, additionalData);
36
40
  questionnaireForms.addControl(section.name, sectionForms);
37
41
  }
38
42
  return questionnaireForms;
@@ -44,13 +48,15 @@ export class FormConstructorService {
44
48
  * @returns A filtered form group.
45
49
  * @author Will Poulson
46
50
  */
47
- generateFormsForSection(section, currentQuestionnaireForm) {
51
+ generateFormsForSection(section, currentQuestionnaireForm, additionalData) {
52
+ console.log('two');
53
+ console.log(additionalData);
48
54
  const sectionForms = this.fb.group({});
49
55
  for (const question of section.questions) {
50
56
  if (question.type === QuestionType.Info) {
51
57
  continue;
52
58
  }
53
- const questionControl = this.generateControlForQuestion(question, section, currentQuestionnaireForm);
59
+ const questionControl = this.generateControlForQuestion(question, section, currentQuestionnaireForm, additionalData);
54
60
  sectionForms.addControl(question.name, questionControl);
55
61
  }
56
62
  return sectionForms;
@@ -61,9 +67,43 @@ export class FormConstructorService {
61
67
  * @returns An abstract control.
62
68
  * @author Will Poulson
63
69
  */
64
- generateControlForQuestion(question, section, currentQuestionnaireForm) {
70
+ generateControlForQuestion(question, section, currentQuestionnaireForm, additionalData) {
65
71
  const convertedValidators = this.convertValidators(question.validators);
66
- const defaultValue = question.defaultValue ? question.defaultValue : null;
72
+ let defaultValue = question.defaultValue ? question.defaultValue : null;
73
+ console.log('three');
74
+ console.log(additionalData);
75
+ if (defaultValue !== null) {
76
+ defaultValue = this.filterService.getValueForString(defaultValue, currentQuestionnaireForm, additionalData);
77
+ }
78
+ console.log('default');
79
+ console.log(defaultValue);
80
+ const titleRegEx = /(\{\{([^\}]+)\}\})/gi;
81
+ let titlePlaceholdersFound = null;
82
+ console.log('default');
83
+ console.log(question);
84
+ while ((titlePlaceholdersFound = titleRegEx.exec(question.title)) !== null) {
85
+ let titleReplacementValue = this.filterService.getValueForString(titlePlaceholdersFound[2], currentQuestionnaireForm, additionalData);
86
+ console.log('m1');
87
+ const titleReplaceRe = new RegExp('\{\{' + titlePlaceholdersFound[2] + '\}\}', 'g');
88
+ titleReplacementValue = titleReplacementValue.replace(/\w\S*/g, function (txt) {
89
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
90
+ });
91
+ question.title = question.title.replace(titleReplaceRe, titleReplacementValue);
92
+ }
93
+ const subTitleRegEx = /(\{\{([^\}]+)\}\})/gi;
94
+ let subTitlePlaceholdersFound = null;
95
+ while ((subTitlePlaceholdersFound = subTitleRegEx.exec(question.subtitle)) !== null) {
96
+ let subTitleReplacementValue = this.filterService.getValueForString(subTitlePlaceholdersFound[2], currentQuestionnaireForm, additionalData);
97
+ console.log('m2');
98
+ const subTitleReplaceRe = new RegExp('\{\{' + subTitlePlaceholdersFound[2] + '\}\}', 'g');
99
+ subTitleReplacementValue = subTitleReplacementValue.replace(/\w\S*/g, function (txt) {
100
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
101
+ });
102
+ question.subtitle = question.subtitle.replace(subTitleReplaceRe, subTitleReplacementValue);
103
+ }
104
+ console.log('final');
105
+ console.log(question);
106
+ console.log('====');
67
107
  switch (question.type) {
68
108
  case QuestionType.Repeater:
69
109
  const newArray = this.fb.array([], convertedValidators);
@@ -223,4 +263,4 @@ FormConstructorService.ctorParameters = () => [
223
263
  { type: FormBuilder },
224
264
  { type: FilterService }
225
265
  ];
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb25zdHJ1Y3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ctcXVlc3Rpb25uYWlyZS12Mi9zcmMvbGliL3NlcnZpY2VzL2Zvcm0tY29uc3RydWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQXdELFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBSTFILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBUS9ELE1BQU0sT0FBTyxzQkFBc0I7SUFFakMsWUFDVSxFQUFlLEVBQ2YsYUFBNEI7UUFENUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ2xDLENBQUM7SUFFTDs7Ozs7O09BTUc7SUFDSSw2QkFBNkIsQ0FDbEMsYUFBNEIsRUFDNUIsb0JBQW1DLEVBQ25DLHdCQUFtQyxFQUNuQyxjQUF1QixFQUN2QixVQUFvQjtRQUVwQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUMzQixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV0RyxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsSUFBSSxDQUFDLFFBQVEsS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxRixJQUFJLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FB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Q0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzVFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2lCQUM5QzthQUNGO1NBQ0Y7SUFDSCxDQUFDOzs7O1lBelBGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBZFEsV0FBVztZQUtYLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycywgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjdGlvbic7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZSc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4vZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWxpZGF0b3InO1xuaW1wb3J0IHsgVmFsaWRhdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy92YWxpZGF0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSZXBlYXRlclF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBlYXRlci1xdWVzdGlvbic7XG5pbXBvcnQgeyBDaGVja2xpc3RJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja2xpc3QtaXRlbSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db25zdHJ1Y3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZVxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgZm9ybSBncm91cCBiYXNlZCBvbiB0aGUgcXVlc3Rpb25uYWlyZSBkYXRhLlxuICAgKiBUaGlzIGZvcm0gZ3JvdXAgaGFzIGJlZW4gZmlsdGVyZWQgZG93biBiYXNlZCBvbiB0aGUgY29uZGl0aW9ucyBvZiB0aGUgc2VjdGlvbnMgYW5kIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHF1ZXN0aW9ubmFpcmUgVGhlIHF1ZXN0aW9ubmFpcmUgZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZWQgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICBxdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHNraXBGaWx0ZXI/OiBib29sZWFuXG4gICk6IHtzZWN0aW9uczogQXJyYXk8U2VjdGlvbj47IGZvcm1zOiBGb3JtR3JvdXB9IHtcbiAgICBjb25zdCBzZWN0aW9ucyA9IHNraXBGaWx0ZXIgP1xuICAgICAgcXVlc3Rpb25uYWlyZS5zZWN0aW9ucyA6XG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyU2VjdGlvbnMocXVlc3Rpb25uYWlyZS5zZWN0aW9ucywgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSk7XG5cbiAgICBjb25zdCBub0NoYW5nZSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSAmJiAoc2VjdGlvbnMgPT09IGN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zKTtcblxuICAgIGlmIChub0NoYW5nZSAmJiAhc2tpcEZpbHRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlc3Rpb25uYWlyZUZvcm1zID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgcmV0dXJuIHtzZWN0aW9uczogc2VjdGlvbnMsIGZvcm1zOiBxdWVzdGlvbm5haXJlRm9ybXN9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGNvbnN0IHF1ZXN0aW9ubmFpcmVGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBzZWN0aW9uRm9ybXMgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JTZWN0aW9uKHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBxdWVzdGlvbm5haXJlRm9ybXMuYWRkQ29udHJvbChzZWN0aW9uLm5hbWUsIHNlY3Rpb25Gb3Jtcyk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbm5haXJlRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHNlY3Rpb24gZGF0YS5cbiAgICogVGhpcyBmb3JtIGdyb3VwIGhhcyBiZWVuIGZpbHRlcmVkIGRvd24gYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHNlY3Rpb24gVGhlIHNlY3Rpb24gZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZXJlZCBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3Qgc2VjdGlvbkZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gUXVlc3Rpb25UeXBlLkluZm8pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXN0aW9uQ29udHJvbCA9IHRoaXMuZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb24sIHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBzZWN0aW9uRm9ybXMuYWRkQ29udHJvbChxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbkNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gc2VjdGlvbkZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYW4gYXN0cmFjdCBmb3JtIGNvbnRyb2wgYmFzZWQgb24gdGhlIHF1ZXN0aW9uIGRhdGEuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24gZGF0YSB0byBidWlsZCB0aGUgYWJzdHJhY3QgY29udHJvbCBvbi5cbiAgICogQHJldHVybnMgQW4gYWJzdHJhY3QgY29udHJvbC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uLCBzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMocXVlc3Rpb24udmFsaWRhdG9ycyk7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcXVlc3Rpb24uZGVmYXVsdFZhbHVlID8gcXVlc3Rpb24uZGVmYXVsdFZhbHVlIDogbnVsbDtcbiAgICBzd2l0Y2ggKHF1ZXN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLlJlcGVhdGVyOlxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IHRoaXMuZmIuYXJyYXkoW10sIGNvbnZlcnRlZFZhbGlkYXRvcnMpO1xuICAgICAgICBjb25zdCBjdXJyZW50QXJyYXkgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPyAoY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5KSA6IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50QXJyYXkgJiYgcXVlc3Rpb24uZmlsdGVyZWRSZXBlYXRlclF1ZXN0aW9ucykge1xuICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBjdXJyZW50QXJyYXkuY29udHJvbHMpIHtcblxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50QXJyYXkuY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRRdWVzdGlvbnMgPSBxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zW2luZGV4XTtcblxuICAgICAgICAgICAgaWYgKCFmaWx0ZXJlZFF1ZXN0aW9ucykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRRdWVzdGlvbk5hbWVzID0gZmlsdGVyZWRRdWVzdGlvbnMubWFwKHggPT4geC5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3V0UXVlc3Rpb25zID0gcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMuZmlsdGVyKHggPT4gIWZpbHRlcmVkUXVlc3Rpb25OYW1lcy5pbmNsdWRlcyh4Lm5hbWUpKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXJlZE91dFF1ZXN0aW9uIG9mIGZpbHRlcmVkT3V0UXVlc3Rpb25zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29udHJvbCA9IGNvbnRyb2wuZ2V0KGZpbHRlcmVkT3V0UXVlc3Rpb24ubmFtZSk7XG4gICAgICAgICAgICAgIGNoaWxkQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtdKTtcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyZWRRdWVzdGlvbiBvZiBmaWx0ZXJlZFF1ZXN0aW9ucykge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZENvbnRyb2wgPSBjb250cm9sLmdldChmaWx0ZXJlZFF1ZXN0aW9uLm5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmIChjaGlsZENvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgdmFsdWUganVzdCBza2lwIGl0LCBubyBuZWVkIHRvIHJlZG8gdGhlIHZhbGlkYXRvcnMgZWFjaCB0aW1lLlxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMoZmlsdGVyZWRRdWVzdGlvbi52YWxpZGF0b3JzKTtcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnNldFZhbGlkYXRvcnMoY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICAgIGNoaWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50QXJyYXkgPyBjdXJyZW50QXJyYXkgOiBuZXdBcnJheTtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLkNoZWNrbGlzdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVHcm91cEZvckNoZWNrbGlzdChxdWVzdGlvbiwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICBjYXNlIFF1ZXN0aW9uVHlwZS5TbGlkZXI6XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2woZGVmYXVsdFZhbHVlLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMgfSk7IC8vIFJlbW92ZSB1cGRhdGUgb24gYmx1ciBmb3Igc2xpZGVycy5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2woZGVmYXVsdFZhbHVlLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMsIHVwZGF0ZU9uOiAnYmx1cicgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgZm9ybSBncm91cCBmb3IgYSBjaGVja2xpc3QgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24uIE11c3QgYmUgb2YgdHlwZSBjaGVja2xpc3Qgb3IgZWxzZSBudWxsIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyBBIGZvcm0gZ3JvdXAuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlR3JvdXBGb3JDaGVja2xpc3QocXVlc3Rpb246IFF1ZXN0aW9uLCBjb252ZXJ0ZWRWYWxpZGF0b3JzKSB7XG4gICAgaWYgKHF1ZXN0aW9uLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5DaGVja2xpc3QgfHwgcXVlc3Rpb24uY2hlY2tsaXN0SXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGVja2xpc3RGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCBjaGVja2xpc3RJdGVtIG9mIHF1ZXN0aW9uLmNoZWNrbGlzdEl0ZW1zKSB7XG4gICAgICBjb25zdCBjaGVja2xpc3RJdGVtQ29udHJvbCA9IHRoaXMuZmIuY29udHJvbChudWxsLCBjb252ZXJ0ZWRWYWxpZGF0b3JzKTtcbiAgICAgIGNoZWNrbGlzdEZvcm1zLmFkZENvbnRyb2woY2hlY2tsaXN0SXRlbS5uYW1lLCBjaGVja2xpc3RJdGVtQ29udHJvbCk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja2xpc3RGb3JtcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgZm9ybSB0ZW1wbGF0ZSBmb3IgYSByZXBlYXRlciBxdWVzdGlvbi5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIFRoZSBxdWVzdGlvbi4gTXVzdCBiZSBvZiB0eXBlIHJlcGVhdGVyIG9yIGVsc2UgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHJldHVybnMgQSBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlRm9ybXNGb3JSZXBlYXRlcihxdWVzdGlvbjogUXVlc3Rpb24sIGluZGV4PzogYW55KTogRm9ybUdyb3VwIHtcbiAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyIHx8IHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coJ1F1ZXN0aW9uIGlzbnQgYSByZXBlYXRlciBvciBoYXMgbm8gcXVlc3Rpb25zLCByZXR1cm5pbmcgbnVsbCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwZWF0ZXJGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG5cbiAgICBmb3IgKGNvbnN0IHJlcGVhdGVyUXVlc3Rpb24gb2YgcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlcGVhdGVyUXVlc3Rpb25Db250cm9sID0gdGhpcy5nZW5lcmF0ZUNvbnRyb2xGb3JSZXBlYXRlclF1ZXN0aW9uKHJlcGVhdGVyUXVlc3Rpb24pO1xuICAgICAgcmVwZWF0ZXJGb3Jtcy5hZGRDb250cm9sKHJlcGVhdGVyUXVlc3Rpb24ubmFtZSwgcmVwZWF0ZXJRdWVzdGlvbkNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiByZXBlYXRlckZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIGNvbnRyb2wgZm9yIGEgcmVwZWF0ZXJzIHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gcmVwZWF0ZXJRdWVzdGlvbiBBIHJlcGVhdGVyIHF1ZXN0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBhYnN0cmFjdCBjb250cm9sLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbnRyb2xGb3JSZXBlYXRlclF1ZXN0aW9uKHJlcGVhdGVyUXVlc3Rpb246IFJlcGVhdGVyUXVlc3Rpb24pOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnMgPSB0aGlzLmNvbnZlcnRWYWxpZGF0b3JzKHJlcGVhdGVyUXVlc3Rpb24udmFsaWRhdG9ycyk7XG4gICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbChudWxsLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMsIHVwZGF0ZU9uOiByZXBlYXRlclF1ZXN0aW9uLnR5cGUgPT09ICdzZWxlY3QnID8gJ2NoYW5nZScgOiAnYmx1cicgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgdmFsaWRhdG9ycyBpbnRvIGZvcm0gdmFsaWRhdG9ycy5cbiAgICogQHBhcmFtIHZhbGlkYXRvcnMgVGhlIHVuY292ZXJ0ZWQgYXJyYXkgb2YgdmFsaWRhdG9ycy5cbiAgICogQHJldHVybnMgQSBjb252ZXJlZCBhcnJheSBvZiBmb3JtIHZhbGlkYXRvcnMuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvcj4pOiBBcnJheTxWYWxpZGF0b3JGbj4ge1xuICAgIGlmICghdmFsaWRhdG9ycyB8fCB2YWxpZGF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBjb252ZXJ0ZWRWYWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWRWYWxpZGF0b3IgPSB0aGlzLmNvbnZlcnRWYWxpZGF0b3IodmFsaWRhdG9yKTtcbiAgICAgIGlmIChjb252ZXJ0ZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgY29udmVydGVkVmFsaWRhdG9ycy5wdXNoKGNvbnZlcnRlZFZhbGlkYXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0ZWRWYWxpZGF0b3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc2luZ2xlIHZhbGlkYXRvciBpbnRvIGEgZm9ybSB2YWxpZGF0b3IuXG4gICAqIEBwYXJhbSB2YWxpZGF0b3IgVGhlIHVuY29udmVydGVkIHZhbGlkYXRvci5cbiAgICogQHJldHVybnMgQSBjb252ZXJ0ZWQgZm9ybSB2YWxpZGF0b3IuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRWYWxpZGF0b3IodmFsaWRhdG9yOiBWYWxpZGF0b3IpOiBWYWxpZGF0b3JGbiB8IG51bGwge1xuICAgIHN3aXRjaCAodmFsaWRhdG9yLnR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGUuUmVxdWlyZWQ6XG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JzLnJlcXVpcmVkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIGZvcm1zIGZvciByZXBlYXRlcnMgZnJvbSBzYXZlZCBzdGF0ZS5cbiAgICogQHBhcmFtIHNhdmVkU3RhdGUgVGhlIHNhdmVkIHN0YXRlIHRvIGxvYWQuXG4gICAqIEBwYXJhbSBzZWN0aW9ucyBUaGUgc2VjdGlvbnMgYWxyZWFkeSBnZW5lcmF0ZWQgYnkgdGhlIGZvcm0gY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0UmVwZWF0ZXJGcm9tc0Zyb21TdGF0ZShzYXZlZFN0YXRlOiBhbnksIHNlY3Rpb25zOiBBcnJheTxTZWN0aW9uPiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXApIHtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5SZXBlYXRlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwZWF0ZXJBcnJheSA9IHNhdmVkU3RhdGVbc2VjdGlvbi5uYW1lXVtxdWVzdGlvbi5uYW1lXTtcbiAgICAgICAgaWYgKCFyZXBlYXRlckFycmF5IHx8IHJlcGVhdGVyQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBlYXRlckZvcm1BcnJheSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQoW3NlY3Rpb24ubmFtZSwgcXVlc3Rpb24ubmFtZV0pIGFzIEZvcm1BcnJheTtcblxuICAgICAgICBpZiAocmVwZWF0ZXJGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoID09PSByZXBlYXRlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGVhY2ggaXRlbSB0aGF0IHVzZWQgdG8gYmUgdGhlcmUgcHVzaCBhIG5ldyBlbXB0eSB0ZW1wbGF0ZSB0aGVyZSB0byBiZSBwb3B1bGF0ZWQuXG4gICAgICAgIGZvciAoY29uc3QgcmVwZWF0ZXJJdGVtIG9mIHJlcGVhdGVyQXJyYXkpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcGVhdGVyQXJyYXkuaW5kZXhPZihyZXBlYXRlckl0ZW0pO1xuICAgICAgICAgIGNvbnN0IHJlcGVhdGVySXRlbVRlbXBsYXRlID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yUmVwZWF0ZXIocXVlc3Rpb24sIGluZGV4KTtcbiAgICAgICAgICByZXBlYXRlckZvcm1BcnJheS5wdXNoKHJlcGVhdGVySXRlbVRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb25zdHJ1Y3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ctcXVlc3Rpb25uYWlyZS12Mi9zcmMvbGliL3NlcnZpY2VzL2Zvcm0tY29uc3RydWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQXdELFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBSTFILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBUS9ELE1BQU0sT0FBTyxzQkFBc0I7SUFFakMsWUFDVSxFQUFlLEVBQ2YsYUFBNEI7UUFENUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ2xDLENBQUM7SUFFTDs7Ozs7O09BTUc7SUFDSSw2QkFBNkIsQ0FDbEMsYUFBNEIsRUFDNUIsb0JBQW1DLEVBQ25DLHdCQUFtQyxFQUNuQyxjQUF1QixFQUN2QixVQUFvQjtRQUdwQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFNUIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDM0IsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFdEcsTUFBTSxRQUFRLEdBQUcsd0JBQXdCLElBQUksQ0FBQyxRQUFRLEtBQUss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LElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ2hELFNBQVM7aUJBQ1Y7Z0JBRUQsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBYyxDQUFDO2dCQUVuRyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtvQkFDOUQsU0FBUztpQkFDVjtnQkFFRCx1RkFBdUY7Z0JBQ3ZGLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO29CQUN4QyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNsRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzVFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2lCQUM5QzthQUNGO1NBQ0Y7SUFDSCxDQUFDOzs7O1lBN1RGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBZFEsV0FBVztZQUtYLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycywgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjdGlvbic7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZSc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4vZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWxpZGF0b3InO1xuaW1wb3J0IHsgVmFsaWRhdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy92YWxpZGF0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSZXBlYXRlclF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBlYXRlci1xdWVzdGlvbic7XG5pbXBvcnQgeyBDaGVja2xpc3RJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVja2xpc3QtaXRlbSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db25zdHJ1Y3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZVxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgZm9ybSBncm91cCBiYXNlZCBvbiB0aGUgcXVlc3Rpb25uYWlyZSBkYXRhLlxuICAgKiBUaGlzIGZvcm0gZ3JvdXAgaGFzIGJlZW4gZmlsdGVyZWQgZG93biBiYXNlZCBvbiB0aGUgY29uZGl0aW9ucyBvZiB0aGUgc2VjdGlvbnMgYW5kIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHF1ZXN0aW9ubmFpcmUgVGhlIHF1ZXN0aW9ubmFpcmUgZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZWQgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICBxdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLFxuICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLFxuICAgIGFkZGl0aW9uYWxEYXRhPzogT2JqZWN0LFxuICAgIHNraXBGaWx0ZXI/OiBib29sZWFuXG4gICk6IHtzZWN0aW9uczogQXJyYXk8U2VjdGlvbj47IGZvcm1zOiBGb3JtR3JvdXB9IHtcblxuICAgIGNvbnNvbGUubG9nKCd6ZXJvJyk7XG4gICAgY29uc29sZS5sb2coYWRkaXRpb25hbERhdGEpO1xuXG4gICAgY29uc3Qgc2VjdGlvbnMgPSBza2lwRmlsdGVyID9cbiAgICAgIHF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMgOlxuICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlclNlY3Rpb25zKHF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSwgYWRkaXRpb25hbERhdGEpO1xuXG4gICAgY29uc3Qgbm9DaGFuZ2UgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gJiYgKHNlY3Rpb25zID09PSBjdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucyk7XG5cbiAgICBpZiAobm9DaGFuZ2UgJiYgIXNraXBGaWx0ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXN0aW9ubmFpcmVGb3JtcyA9IHRoaXMuZ2VuZXJhdGVGb3Jtc0ZvclNlY3Rpb25zKHNlY3Rpb25zLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sIGFkZGl0aW9uYWxEYXRhKTtcbiAgICByZXR1cm4ge3NlY3Rpb25zOiBzZWN0aW9ucywgZm9ybXM6IHF1ZXN0aW9ubmFpcmVGb3Jtc307XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRm9ybXNGb3JTZWN0aW9ucyhzZWN0aW9uczogQXJyYXk8U2VjdGlvbj4sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybTogRm9ybUdyb3VwLCBhZGRpdGlvbmFsRGF0YSkge1xuICAgIGNvbnNvbGUubG9nKCdvbmUnKTtcbiAgICBjb25zb2xlLmxvZyhhZGRpdGlvbmFsRGF0YSk7XG4gICAgY29uc3QgcXVlc3Rpb25uYWlyZUZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25Gb3JtcyA9IHRoaXMuZ2VuZXJhdGVGb3Jtc0ZvclNlY3Rpb24oc2VjdGlvbiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSk7XG4gICAgICBxdWVzdGlvbm5haXJlRm9ybXMuYWRkQ29udHJvbChzZWN0aW9uLm5hbWUsIHNlY3Rpb25Gb3Jtcyk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbm5haXJlRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHNlY3Rpb24gZGF0YS5cbiAgICogVGhpcyBmb3JtIGdyb3VwIGhhcyBiZWVuIGZpbHRlcmVkIGRvd24gYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHNlY3Rpb24gVGhlIHNlY3Rpb24gZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZXJlZCBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCwgYWRkaXRpb25hbERhdGEpOiBGb3JtR3JvdXAge1xuICAgIGNvbnNvbGUubG9nKCd0d28nKTtcbiAgICBjb25zb2xlLmxvZyhhZGRpdGlvbmFsRGF0YSk7XG5cbiAgICBjb25zdCBzZWN0aW9uRm9ybXM6IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBRdWVzdGlvblR5cGUuSW5mbykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlc3Rpb25Db250cm9sID0gdGhpcy5nZW5lcmF0ZUNvbnRyb2xGb3JRdWVzdGlvbihxdWVzdGlvbiwgc2VjdGlvbiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLCBhZGRpdGlvbmFsRGF0YSk7XG4gICAgICBzZWN0aW9uRm9ybXMuYWRkQ29udHJvbChxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbkNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gc2VjdGlvbkZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYW4gYXN0cmFjdCBmb3JtIGNvbnRyb2wgYmFzZWQgb24gdGhlIHF1ZXN0aW9uIGRhdGEuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24gZGF0YSB0byBidWlsZCB0aGUgYWJzdHJhY3QgY29udHJvbCBvbi5cbiAgICogQHJldHVybnMgQW4gYWJzdHJhY3QgY29udHJvbC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDb250cm9sRm9yUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uLCBzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCwgYWRkaXRpb25hbERhdGEpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnMgPSB0aGlzLmNvbnZlcnRWYWxpZGF0b3JzKHF1ZXN0aW9uLnZhbGlkYXRvcnMpO1xuICAgIGxldCBkZWZhdWx0VmFsdWUgPSBxdWVzdGlvbi5kZWZhdWx0VmFsdWUgPyBxdWVzdGlvbi5kZWZhdWx0VmFsdWUgOiBudWxsO1xuXG4gICAgY29uc29sZS5sb2coJ3RocmVlJyk7XG4gICAgY29uc29sZS5sb2coYWRkaXRpb25hbERhdGEpO1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmdldFZhbHVlRm9yU3RyaW5nKFxuICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgICAgYWRkaXRpb25hbERhdGEpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdkZWZhdWx0Jyk7XG4gICAgY29uc29sZS5sb2coZGVmYXVsdFZhbHVlKTtcblxuICAgIGNvbnN0IHRpdGxlUmVnRXg6IFJlZ0V4cCA9IC8oXFx7XFx7KFteXFx9XSspXFx9XFx9KS9naTtcbiAgICBsZXQgdGl0bGVQbGFjZWhvbGRlcnNGb3VuZCA9IG51bGw7XG5cbiAgICBjb25zb2xlLmxvZygnZGVmYXVsdCcpO1xuICAgIGNvbnNvbGUubG9nKHF1ZXN0aW9uKTtcblxuICAgIHdoaWxlICgodGl0bGVQbGFjZWhvbGRlcnNGb3VuZCA9IHRpdGxlUmVnRXguZXhlYyhxdWVzdGlvbi50aXRsZSkpICE9PSBudWxsKSB7XG4gICAgICBsZXQgdGl0bGVSZXBsYWNlbWVudFZhbHVlID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmdldFZhbHVlRm9yU3RyaW5nKFxuICAgICAgICB0aXRsZVBsYWNlaG9sZGVyc0ZvdW5kWzJdLFxuICAgICAgICBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhKTtcbiAgICAgIGNvbnNvbGUubG9nKCdtMScpO1xuICAgICAgY29uc3QgdGl0bGVSZXBsYWNlUmUgPSBuZXcgUmVnRXhwKCdcXHtcXHsnICsgdGl0bGVQbGFjZWhvbGRlcnNGb3VuZFsyXSArICdcXH1cXH0nLCAnZycpO1xuXG4gICAgICB0aXRsZVJlcGxhY2VtZW50VmFsdWUgPSB0aXRsZVJlcGxhY2VtZW50VmFsdWUucmVwbGFjZShcbiAgICAgICAgL1xcd1xcUyovZyxcbiAgICAgICAgZnVuY3Rpb24odHh0KSB7XG4gICAgICAgICAgcmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHF1ZXN0aW9uLnRpdGxlID0gcXVlc3Rpb24udGl0bGUucmVwbGFjZSh0aXRsZVJlcGxhY2VSZSwgdGl0bGVSZXBsYWNlbWVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJUaXRsZVJlZ0V4OiBSZWdFeHAgPSAvKFxce1xceyhbXlxcfV0rKVxcfVxcfSkvZ2k7XG4gICAgbGV0IHN1YlRpdGxlUGxhY2Vob2xkZXJzRm91bmQgPSBudWxsO1xuXG4gICAgd2hpbGUgKChzdWJUaXRsZVBsYWNlaG9sZGVyc0ZvdW5kID0gc3ViVGl0bGVSZWdFeC5leGVjKHF1ZXN0aW9uLnN1YnRpdGxlKSkgIT09IG51bGwpIHtcbiAgICAgIGxldCBzdWJUaXRsZVJlcGxhY2VtZW50VmFsdWUgPSB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0VmFsdWVGb3JTdHJpbmcoXG4gICAgICAgIHN1YlRpdGxlUGxhY2Vob2xkZXJzRm91bmRbMl0sXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgICAgYWRkaXRpb25hbERhdGEpO1xuICAgICAgY29uc29sZS5sb2coJ20yJyk7XG4gICAgICBjb25zdCBzdWJUaXRsZVJlcGxhY2VSZSA9IG5ldyBSZWdFeHAoJ1xce1xceycgKyBzdWJUaXRsZVBsYWNlaG9sZGVyc0ZvdW5kWzJdICsgJ1xcfVxcfScsICdnJyk7XG4gICAgICBzdWJUaXRsZVJlcGxhY2VtZW50VmFsdWUgPSBzdWJUaXRsZVJlcGxhY2VtZW50VmFsdWUucmVwbGFjZShcbiAgICAgICAgL1xcd1xcUyovZyxcbiAgICAgICAgZnVuY3Rpb24odHh0KSB7XG4gICAgICAgICAgcmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHF1ZXN0aW9uLnN1YnRpdGxlID0gcXVlc3Rpb24uc3VidGl0bGUucmVwbGFjZShzdWJUaXRsZVJlcGxhY2VSZSwgc3ViVGl0bGVSZXBsYWNlbWVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnZmluYWwnKTtcbiAgICBjb25zb2xlLmxvZyhxdWVzdGlvbik7XG4gICAgY29uc29sZS5sb2coJz09PT0nKTtcbiAgICBzd2l0Y2ggKHF1ZXN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLlJlcGVhdGVyOlxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IHRoaXMuZmIuYXJyYXkoW10sIGNvbnZlcnRlZFZhbGlkYXRvcnMpO1xuICAgICAgICBjb25zdCBjdXJyZW50QXJyYXkgPSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPyAoY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5KSA6IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50QXJyYXkgJiYgcXVlc3Rpb24uZmlsdGVyZWRSZXBlYXRlclF1ZXN0aW9ucykge1xuICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBjdXJyZW50QXJyYXkuY29udHJvbHMpIHtcblxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50QXJyYXkuY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRRdWVzdGlvbnMgPSBxdWVzdGlvbi5maWx0ZXJlZFJlcGVhdGVyUXVlc3Rpb25zW2luZGV4XTtcblxuICAgICAgICAgICAgaWYgKCFmaWx0ZXJlZFF1ZXN0aW9ucykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRRdWVzdGlvbk5hbWVzID0gZmlsdGVyZWRRdWVzdGlvbnMubWFwKHggPT4geC5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3V0UXVlc3Rpb25zID0gcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMuZmlsdGVyKHggPT4gIWZpbHRlcmVkUXVlc3Rpb25OYW1lcy5pbmNsdWRlcyh4Lm5hbWUpKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXJlZE91dFF1ZXN0aW9uIG9mIGZpbHRlcmVkT3V0UXVlc3Rpb25zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29udHJvbCA9IGNvbnRyb2wuZ2V0KGZpbHRlcmVkT3V0UXVlc3Rpb24ubmFtZSk7XG4gICAgICAgICAgICAgIGNoaWxkQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtdKTtcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyZWRRdWVzdGlvbiBvZiBmaWx0ZXJlZFF1ZXN0aW9ucykge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZENvbnRyb2wgPSBjb250cm9sLmdldChmaWx0ZXJlZFF1ZXN0aW9uLm5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmIChjaGlsZENvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgdmFsdWUganVzdCBza2lwIGl0LCBubyBuZWVkIHRvIHJlZG8gdGhlIHZhbGlkYXRvcnMgZWFjaCB0aW1lLlxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMoZmlsdGVyZWRRdWVzdGlvbi52YWxpZGF0b3JzKTtcbiAgICAgICAgICAgICAgY2hpbGRDb250cm9sLnNldFZhbGlkYXRvcnMoY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICAgIGNoaWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50QXJyYXkgPyBjdXJyZW50QXJyYXkgOiBuZXdBcnJheTtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLkNoZWNrbGlzdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVHcm91cEZvckNoZWNrbGlzdChxdWVzdGlvbiwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICBjYXNlIFF1ZXN0aW9uVHlwZS5TbGlkZXI6XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2woZGVmYXVsdFZhbHVlLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMgfSk7IC8vIFJlbW92ZSB1cGRhdGUgb24gYmx1ciBmb3Igc2xpZGVycy5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2woZGVmYXVsdFZhbHVlLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMsIHVwZGF0ZU9uOiAnYmx1cicgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgZm9ybSBncm91cCBmb3IgYSBjaGVja2xpc3QgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24uIE11c3QgYmUgb2YgdHlwZSBjaGVja2xpc3Qgb3IgZWxzZSBudWxsIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyBBIGZvcm0gZ3JvdXAuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlR3JvdXBGb3JDaGVja2xpc3QocXVlc3Rpb246IFF1ZXN0aW9uLCBjb252ZXJ0ZWRWYWxpZGF0b3JzKSB7XG4gICAgaWYgKHF1ZXN0aW9uLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5DaGVja2xpc3QgfHwgcXVlc3Rpb24uY2hlY2tsaXN0SXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGVja2xpc3RGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCBjaGVja2xpc3RJdGVtIG9mIHF1ZXN0aW9uLmNoZWNrbGlzdEl0ZW1zKSB7XG4gICAgICBjb25zdCBjaGVja2xpc3RJdGVtQ29udHJvbCA9IHRoaXMuZmIuY29udHJvbChudWxsLCBjb252ZXJ0ZWRWYWxpZGF0b3JzKTtcbiAgICAgIGNoZWNrbGlzdEZvcm1zLmFkZENvbnRyb2woY2hlY2tsaXN0SXRlbS5uYW1lLCBjaGVja2xpc3RJdGVtQ29udHJvbCk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja2xpc3RGb3JtcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgZm9ybSB0ZW1wbGF0ZSBmb3IgYSByZXBlYXRlciBxdWVzdGlvbi5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIFRoZSBxdWVzdGlvbi4gTXVzdCBiZSBvZiB0eXBlIHJlcGVhdGVyIG9yIGVsc2UgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHJldHVybnMgQSBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlRm9ybXNGb3JSZXBlYXRlcihxdWVzdGlvbjogUXVlc3Rpb24sIGluZGV4PzogYW55KTogRm9ybUdyb3VwIHtcbiAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyIHx8IHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coJ1F1ZXN0aW9uIGlzbnQgYSByZXBlYXRlciBvciBoYXMgbm8gcXVlc3Rpb25zLCByZXR1cm5pbmcgbnVsbCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwZWF0ZXJGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG5cbiAgICBmb3IgKGNvbnN0IHJlcGVhdGVyUXVlc3Rpb24gb2YgcXVlc3Rpb24ucmVwZWF0ZXJRdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlcGVhdGVyUXVlc3Rpb25Db250cm9sID0gdGhpcy5nZW5lcmF0ZUNvbnRyb2xGb3JSZXBlYXRlclF1ZXN0aW9uKHJlcGVhdGVyUXVlc3Rpb24pO1xuICAgICAgcmVwZWF0ZXJGb3Jtcy5hZGRDb250cm9sKHJlcGVhdGVyUXVlc3Rpb24ubmFtZSwgcmVwZWF0ZXJRdWVzdGlvbkNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiByZXBlYXRlckZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIGNvbnRyb2wgZm9yIGEgcmVwZWF0ZXJzIHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gcmVwZWF0ZXJRdWVzdGlvbiBBIHJlcGVhdGVyIHF1ZXN0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBhYnN0cmFjdCBjb250cm9sLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbnRyb2xGb3JSZXBlYXRlclF1ZXN0aW9uKHJlcGVhdGVyUXVlc3Rpb246IFJlcGVhdGVyUXVlc3Rpb24pOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnMgPSB0aGlzLmNvbnZlcnRWYWxpZGF0b3JzKHJlcGVhdGVyUXVlc3Rpb24udmFsaWRhdG9ycyk7XG4gICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbChudWxsLCB7IHZhbGlkYXRvcnM6IGNvbnZlcnRlZFZhbGlkYXRvcnMsIHVwZGF0ZU9uOiByZXBlYXRlclF1ZXN0aW9uLnR5cGUgPT09ICdzZWxlY3QnID8gJ2NoYW5nZScgOiAnYmx1cicgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgdmFsaWRhdG9ycyBpbnRvIGZvcm0gdmFsaWRhdG9ycy5cbiAgICogQHBhcmFtIHZhbGlkYXRvcnMgVGhlIHVuY292ZXJ0ZWQgYXJyYXkgb2YgdmFsaWRhdG9ycy5cbiAgICogQHJldHVybnMgQSBjb252ZXJlZCBhcnJheSBvZiBmb3JtIHZhbGlkYXRvcnMuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvcj4pOiBBcnJheTxWYWxpZGF0b3JGbj4ge1xuICAgIGlmICghdmFsaWRhdG9ycyB8fCB2YWxpZGF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBjb252ZXJ0ZWRWYWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWRWYWxpZGF0b3IgPSB0aGlzLmNvbnZlcnRWYWxpZGF0b3IodmFsaWRhdG9yKTtcbiAgICAgIGlmIChjb252ZXJ0ZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgY29udmVydGVkVmFsaWRhdG9ycy5wdXNoKGNvbnZlcnRlZFZhbGlkYXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0ZWRWYWxpZGF0b3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc2luZ2xlIHZhbGlkYXRvciBpbnRvIGEgZm9ybSB2YWxpZGF0b3IuXG4gICAqIEBwYXJhbSB2YWxpZGF0b3IgVGhlIHVuY29udmVydGVkIHZhbGlkYXRvci5cbiAgICogQHJldHVybnMgQSBjb252ZXJ0ZWQgZm9ybSB2YWxpZGF0b3IuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRWYWxpZGF0b3IodmFsaWRhdG9yOiBWYWxpZGF0b3IpOiBWYWxpZGF0b3JGbiB8IG51bGwge1xuICAgIHN3aXRjaCAodmFsaWRhdG9yLnR5cGUpIHtcbiAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGUuUmVxdWlyZWQ6XG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JzLnJlcXVpcmVkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIGZvcm1zIGZvciByZXBlYXRlcnMgZnJvbSBzYXZlZCBzdGF0ZS5cbiAgICogQHBhcmFtIHNhdmVkU3RhdGUgVGhlIHNhdmVkIHN0YXRlIHRvIGxvYWQuXG4gICAqIEBwYXJhbSBzZWN0aW9ucyBUaGUgc2VjdGlvbnMgYWxyZWFkeSBnZW5lcmF0ZWQgYnkgdGhlIGZvcm0gY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0UmVwZWF0ZXJGcm9tc0Zyb21TdGF0ZShzYXZlZFN0YXRlOiBhbnksIHNlY3Rpb25zOiBBcnJheTxTZWN0aW9uPiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXApIHtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5SZXBlYXRlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwZWF0ZXJBcnJheSA9IHNhdmVkU3RhdGVbc2VjdGlvbi5uYW1lXVtxdWVzdGlvbi5uYW1lXTtcbiAgICAgICAgaWYgKCFyZXBlYXRlckFycmF5IHx8IHJlcGVhdGVyQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBlYXRlckZvcm1BcnJheSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQoW3NlY3Rpb24ubmFtZSwgcXVlc3Rpb24ubmFtZV0pIGFzIEZvcm1BcnJheTtcblxuICAgICAgICBpZiAocmVwZWF0ZXJGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoID09PSByZXBlYXRlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGVhY2ggaXRlbSB0aGF0IHVzZWQgdG8gYmUgdGhlcmUgcHVzaCBhIG5ldyBlbXB0eSB0ZW1wbGF0ZSB0aGVyZSB0byBiZSBwb3B1bGF0ZWQuXG4gICAgICAgIGZvciAoY29uc3QgcmVwZWF0ZXJJdGVtIG9mIHJlcGVhdGVyQXJyYXkpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcGVhdGVyQXJyYXkuaW5kZXhPZihyZXBlYXRlckl0ZW0pO1xuICAgICAgICAgIGNvbnN0IHJlcGVhdGVySXRlbVRlbXBsYXRlID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yUmVwZWF0ZXIocXVlc3Rpb24sIGluZGV4KTtcbiAgICAgICAgICByZXBlYXRlckZvcm1BcnJheS5wdXNoKHJlcGVhdGVySXRlbVRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -213,34 +213,21 @@ export class QuestionnaireService {
213
213
  if (!data) {
214
214
  return null;
215
215
  }
216
- const regexp = /(\{\{([^\}]+)\}\})/gi;
217
- let placeholdersFound = null;
218
- while ((placeholdersFound = regexp.exec(data.title)) !== null) {
219
- let replacementValue = this.filterService.getValueForString(placeholdersFound[2], this.currentQuestionnaireForm, this.additionalData);
220
- const replace_re = new RegExp('\{\{' + placeholdersFound[2] + '\}\}', 'g');
221
- replacementValue = replacementValue.replace(/\w\S*/g, function (txt) {
222
- return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
223
- });
224
- data.title = data.title.replace(replace_re, replacementValue);
225
- }
226
- const regexp2 = /(\{\{([^\}]+)\}\})/gi;
227
- let subTitlePlaceholdersFound = null;
228
- while ((subTitlePlaceholdersFound = regexp2.exec(data.subtitle)) !== null) {
229
- let replacementValue2 = this.filterService.getValueForString(subTitlePlaceholdersFound[2], this.currentQuestionnaireForm, this.additionalData);
230
- const replace_re2 = new RegExp('\{\{' + subTitlePlaceholdersFound[2] + '\}\}', 'g');
231
- replacementValue2 = replacementValue2.replace(/\w\S*/g, function (txt) {
232
- return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
233
- });
234
- data.subtitle = data.subtitle.replace(replace_re2, replacementValue2);
235
- }
236
216
  const formControl = this.currentSection.formGroup.get(data.name);
237
- if (data.defaultValue !== null && data.defaultValue !== '') {
238
- const oriDefaultValue = data.defaultValue;
239
- data.defaultValue = this.filterService.getValueForString(data.defaultValue, this.currentQuestionnaireForm, this.additionalData);
240
- if (oriDefaultValue !== data.defaultValue) {
217
+ /*
218
+ if (data.defaultValue !== null && data.defaultValue !== '') {
219
+ const oriDefaultValue = data.defaultValue;
220
+ data.defaultValue = this.filterService.getValueForString(
221
+ data.defaultValue,
222
+ this.currentQuestionnaireForm,
223
+ this.additionalData);
224
+
225
+ if (oriDefaultValue !== data.defaultValue) {
241
226
  formControl.patchValue(data.defaultValue);
227
+ }
228
+
242
229
  }
243
- }
230
+ */
244
231
  return {
245
232
  data: data,
246
233
  formControl: formControl
@@ -503,4 +490,4 @@ QuestionnaireService.ctorParameters = () => [
503
490
  { type: FilterService },
504
491
  { type: undefined, decorators: [{ type: Inject, args: ['options',] }] }
505
492
  ];
506
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ctcXVlc3Rpb25uYWlyZS12Mi9zcmMvbGliL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUE4QixTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlwRixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBS2pELE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQ1UsY0FBc0MsRUFDdEMsYUFBNEIsRUFDVCxPQUE2QjtRQUZoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDVCxZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQXJCbkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUQseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFlakUsY0FBUyxHQUFHLElBQUksQ0FBQztJQU1yQixDQUFDO0lBRUw7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCLENBQUMsYUFBNEIsRUFBRSxVQUFtQixFQUFFLGNBQXVCO1FBQ2pHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FB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WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnN0cnVjdG9yU2VydmljZSB9IGZyb20gJy4vZm9ybS1jb25zdHJ1Y3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9ubmFpcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWN0aW9uJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9xdWVzdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmVPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9xdWVzdGlvbm5haXJlLW9wdGlvbnMnO1xuaW1wb3J0IHsgUXVlc3Rpb25UeXBlIH0gZnJvbSAnLi4vZW51bXMvcXVlc3Rpb24tdHlwZS5lbnVtJztcblxuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4vZmlsdGVyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlU2VydmljZSB7XG4gIHB1YmxpYyBkYXRhQ2hhbmdlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgc2VjdGlvbkZpbmlzaGVkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJpdmF0ZSBvcmlnaW5hbFF1ZXN0aW9ubmFpcmU6IFF1ZXN0aW9ubmFpcmU7XG5cbiAgcHJpdmF0ZSBjdXJyZW50UXVlc3Rpb25uYWlyZTogUXVlc3Rpb25uYWlyZTtcbiAgcHJpdmF0ZSBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cDtcblxuICBwcml2YXRlIGN1cnJlbnRTZWN0aW9uTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGN1cnJlbnRRdWVzdGlvbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHF1ZXN0aW9ubmFpcmVWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHF1ZXN0aW9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwdWJsaWMgYWRkaXRpb25hbERhdGE6IE9iamVjdDtcblxuICBwcml2YXRlIHNraXBwYWJsZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQ29uc3R1Y3RvcjogRm9ybUNvbnN0cnVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXG4gICAgQEluamVjdCgnb3B0aW9ucycpIHByaXZhdGUgb3B0aW9uczogUXVlc3Rpb25uYWlyZU9wdGlvbnNcbiAgKSB7IH1cblxuICAvKipcbiAgICogTG9hZHMgYSBxdWVzdGlvbm5haXJlIGZyb20gZGF0YS5cbiAgICogQHBhcmFtIHF1ZXN0aW9ubmFpcmUgVGhlIHF1ZXN0aW9ubmFpcmUgZGF0YSB0byBsb2FkLCBvZnRlbiBwYXJzZWQgSlNPTiBmcm9tIHRoZSBlZGl0b3IuXG4gICAqIEBwYXJhbSBzYXZlZFN0YXRlIFRoZSBzYXZlZCBzdGF0ZSBvZiB0aGUgcXVlc3Rpb25uYWlyZSwgb2Z0ZW4gZnJvbSBsb2NhbHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIG51bGxcbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBsb2FkUXVlc3Rpb25uYWlyZShxdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlLCBzYXZlZFN0YXRlPzogT2JqZWN0LCBhZGRpdGlvbmFsRGF0YT86IE9iamVjdCkge1xuICAgIHRoaXMub3JpZ2luYWxRdWVzdGlvbm5haXJlID0gXy5jbG9uZURlZXAocXVlc3Rpb25uYWlyZSk7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZSA9IF8uY2xvbmVEZWVwKHF1ZXN0aW9ubmFpcmUpO1xuXG4gICAgdGhpcy5hZGRpdGlvbmFsRGF0YSA9IGFkZGl0aW9uYWxEYXRhO1xuXG4gICAgaWYgKHNhdmVkU3RhdGUgJiYgT2JqZWN0LmtleXMoc2F2ZWRTdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbmV3RGF0YSA9IHRoaXMuZm9ybUNvbnN0dWN0b3IuZ2VuZXJhdGVGb3Jtc0ZvclF1ZXN0aW9ubmFpcmUoXG4gICAgICAgIF8uY2xvbmVEZWVwKHRoaXMub3JpZ2luYWxRdWVzdGlvbm5haXJlKSxcbiAgICAgICAgXy5jbG9uZURlZXAodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZSksXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuXG4gICAgICBpZiAobmV3RGF0YSkge1xuICAgICAgICB0aGlzLmZvcm1Db25zdHVjdG9yLmNvbnN0cnVjdFJlcGVhdGVyRnJvbXNGcm9tU3RhdGUoc2F2ZWRTdGF0ZSwgbmV3RGF0YS5zZWN0aW9ucywgbmV3RGF0YS5mb3Jtcyk7XG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtID0gbmV3RGF0YS5mb3JtcztcbiAgICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0ucGF0Y2hWYWx1ZShzYXZlZFN0YXRlKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUXVlc3Rpb25uYWlyZShzYXZlZFN0YXRlKTtcblxuXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNraXBUb0ZpcnN0U2VjdGlvbikge1xuICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5jb250cm9scylbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5za2lwVG9GaXJzdFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLmN1cnJlbnRTZWN0aW9uLmZvcm1Hcm91cC5jb250cm9scylbMF07XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY3VycmVudCBxdWVzdGlvbm5haXJlLCB1c2VkIHdoZW4gYSB2YWx1ZSBpcyB1cGRhdGVkIHRvIGNoZWNrIGNvbmRpdGlvbnMuXG4gICAqIEBwYXJhbSBzYXZlZFN0YXRlIFRoZSBzYXZlZCBzdGF0ZSBvZiB0aGUgcXVlc3Rpb25uYWlyZSwgb2Z0ZW4gZnJvbSBsb2NhbHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIG51bGxcbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVRdWVzdGlvbm5haXJlKHNhdmVkU3RhdGU/OiBPYmplY3QpIHtcbiAgICBjb25zdCBvbGRMZW5ndGggPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLm1hcCh4ID0+IHgucXVlc3Rpb25zLmxlbmd0aCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG5cbiAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5mb3JtQ29uc3R1Y3Rvci5nZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICAgIF8uY2xvbmVEZWVwKHRoaXMub3JpZ2luYWxRdWVzdGlvbm5haXJlKSxcbiAgICAgIF8uY2xvbmVEZWVwKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUpLFxuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0sXG4gICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhXG4gICAgKTtcblxuICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSA9IG5ld0RhdGEuZm9ybXM7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zID0gbmV3RGF0YS5zZWN0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoc2F2ZWRTdGF0ZSAmJiBPYmplY3Qua2V5cyhzYXZlZFN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5wYXRjaFZhbHVlKHNhdmVkU3RhdGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXN0aW9ubmFpcmVWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5kYXRhQ2hhbmdlZEV2ZW50LmVtaXQoKTtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25uYWlyZSh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbiAmJiB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5xdWVzdGlvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJGaWVsZHModGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YS5jbGVhcmZpZWxkcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLm1hcCh4ID0+IHgucXVlc3Rpb25zLmxlbmd0aCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG5cbiAgICBpZiAob2xkTGVuZ3RoICE9PSBuZXdMZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KFtzZWN0aW9uLm5hbWUsIHF1ZXN0aW9uLm5hbWVdKTtcbiAgICAgICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLnZhbHVlID09PSBudWxsICYmIHF1ZXN0aW9uLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShxdWVzdGlvbi5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBZGRpdGlvbmFsRGF0YShwYXlsb2FkOiBhbnkpIHtcbiAgICB0aGlzLmFkZGl0aW9uYWxEYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmFkZGl0aW9uYWxEYXRhLCBwYXlsb2FkKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9ubmFpcmUodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJBZGRpdGlvbmFsRGF0YSgpIHtcbiAgICB0aGlzLmFkZGl0aW9uYWxEYXRhID0ge307XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvbm5haXJlKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS52YWxpZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNGaXJzdFF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2VjdGlvbiB8fCAhdGhpcy5jdXJyZW50UXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5pbmRleE9mKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEpO1xuICAgIHJldHVybiBjdXJyZW50SW5kZXggPT09IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzTGFzdFF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2VjdGlvbiB8fCAhdGhpcy5jdXJyZW50UXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5pbmRleE9mKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEpO1xuICAgIGNvbnN0IG1heEluZGV4ID0gIHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnMubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gY3VycmVudEluZGV4ID09PSBtYXhJbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNGaXJzdFNlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTZWN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5pbmRleE9mKHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YSk7XG4gICAgcmV0dXJuIGN1cnJlbnRJbmRleCA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNMYXN0U2VjdGlvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFNlY3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhKTtcbiAgICBjb25zdCBtYXhJbmRleCA9ICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGN1cnJlbnRJbmRleCA9PT0gbWF4SW5kZXg7XG4gIH1cblxuICBwdWJsaWMgc2VjdGlvblZhbGlkKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQobmFtZSkudmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCB0aGUgZmllbGRzIHBhcnNlZFxuICAgKiBAcGFyYW0gY2xlYXJmaWVsZHMgQW4gYXJyYXkgb2Ygc3RyaW5ncywgcGF0aHMgdG8gY2xlYXIuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGNsZWFyRmllbGRzKGNsZWFyZmllbGRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKCFjbGVhcmZpZWxkcyB8fCBjbGVhcmZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNsZWFyZmllbGQgb2YgY2xlYXJmaWVsZHMpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQoY2xlYXJmaWVsZCk7XG5cbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2wucmVzZXQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5sb2FkcyB0aGUgY3VycmVudCBxdWVzdGlvbm5haXJlLlxuICAgKiBVc2VmdWwgd2hlbiBleGl0aW5nIGEgcXVlc3Rpb25uYWlyZSBwYWdlIG9yIGNvbXBsZXRpbmcgYSBxdWVzdGlvbm5haXJlLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIHVubG9hZFF1ZXN0aW9ubmFpcmUoKSB7XG4gICAgdGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRTZWN0aW9uTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbk5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hZGRpdGlvbmFsRGF0YSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHNlbGVjdGVkIHNlY3Rpb24uXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzZWN0aW9uIGRhdGEgYW5kIHRoZSByZWxhdGVkIGZvcm0gZ3JvdXAuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRTZWN0aW9uKCk6IHsgZGF0YTogU2VjdGlvbjsgZm9ybUdyb3VwOiBGb3JtR3JvdXA7IH0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFNlY3Rpb25OYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5maW5kKCh4KSA9PiB7XG4gICAgICByZXR1cm4geC5uYW1lID09PSB0aGlzLmN1cnJlbnRTZWN0aW9uTmFtZTtcbiAgICB9KTtcblxuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBmb3JtR3JvdXA6IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChkYXRhLm5hbWUpIGFzIEZvcm1Hcm91cFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbGwgdGhlIGF2YWlhbGJsZSBzZWN0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWxsIGF2YWlhbGJsZSBzZWN0aW9ucy5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgYXZhaWxhYmxlU2VjdGlvbnMoKTogQXJyYXk8U2VjdGlvbj4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZSB8fCAhdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IGRhdGEgZm9yIHRoZSBlbnRpcmUgcXVlc3Rpb25uYWlyZS5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG9mIGRhdGEuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnREYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSA/IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldFJhd1ZhbHVlKCkgOiB7fTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgcXVlc3Rpb24uXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBxdWVzdGlvbiBkYXRhIGFuZCB0aGUgcmVsYXRlZCBmb3JtIGNvbnRyb2wuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRRdWVzdGlvbigpOiB7IGRhdGE6IFF1ZXN0aW9uOyBmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbDsgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5jdXJyZW50UXVlc3Rpb25OYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5maW5kKCh4KSA9PiB7XG4gICAgICByZXR1cm4geC5uYW1lID09PSB0aGlzLmN1cnJlbnRRdWVzdGlvbk5hbWU7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ2V4cDogUmVnRXhwID0gLyhcXHtcXHsoW15cXH1dKylcXH1cXH0pL2dpO1xuICAgIGxldCBwbGFjZWhvbGRlcnNGb3VuZCA9IG51bGw7XG5cbiAgICB3aGlsZSAoKHBsYWNlaG9sZGVyc0ZvdW5kID0gcmVnZXhwLmV4ZWMoZGF0YS50aXRsZSkpICE9PSBudWxsKSB7XG4gICAgICBsZXQgcmVwbGFjZW1lbnRWYWx1ZSA9IHRoaXMuZmlsdGVyU2VydmljZS5nZXRWYWx1ZUZvclN0cmluZyhcbiAgICAgICAgcGxhY2Vob2xkZXJzRm91bmRbMl0sXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhKTtcbiAgICAgIGNvbnN0IHJlcGxhY2VfcmUgPSBuZXcgUmVnRXhwKCdcXHtcXHsnICsgcGxhY2Vob2xkZXJzRm91bmRbMl0gKyAnXFx9XFx9JywgJ2cnKTtcbiAgICAgIHJlcGxhY2VtZW50VmFsdWUgPSByZXBsYWNlbWVudFZhbHVlLnJlcGxhY2UoXG4gICAgICAgIC9cXHdcXFMqL2csXG4gICAgICAgIGZ1bmN0aW9uKHR4dCkge1xuICAgICAgICAgIHJldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBkYXRhLnRpdGxlID0gZGF0YS50aXRsZS5yZXBsYWNlKHJlcGxhY2VfcmUsIHJlcGxhY2VtZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ2V4cDI6IFJlZ0V4cCA9IC8oXFx7XFx7KFteXFx9XSspXFx9XFx9KS9naTtcbiAgICBsZXQgc3ViVGl0bGVQbGFjZWhvbGRlcnNGb3VuZCA9IG51bGw7XG5cbiAgICB3aGlsZSAoKHN1YlRpdGxlUGxhY2Vob2xkZXJzRm91bmQgPSByZWdleHAyLmV4ZWMoZGF0YS5zdWJ0aXRsZSkpICE9PSBudWxsKSB7XG4gICAgICBsZXQgcmVwbGFjZW1lbnRWYWx1ZTIgPSB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0VmFsdWVGb3JTdHJpbmcoXG4gICAgICAgIHN1YlRpdGxlUGxhY2Vob2xkZXJzRm91bmRbMl0sXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhKTtcblxuICAgICAgY29uc3QgcmVwbGFjZV9yZTIgPSBuZXcgUmVnRXhwKCdcXHtcXHsnICsgc3ViVGl0bGVQbGFjZWhvbGRlcnNGb3VuZFsyXSArICdcXH1cXH0nLCAnZycpO1xuICAgICAgcmVwbGFjZW1lbnRWYWx1ZTIgPSByZXBsYWNlbWVudFZhbHVlMi5yZXBsYWNlKFxuICAgICAgICAvXFx3XFxTKi9nLFxuICAgICAgICBmdW5jdGlvbih0eHQpIHtcbiAgICAgICAgICByZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgZGF0YS5zdWJ0aXRsZSA9IGRhdGEuc3VidGl0bGUucmVwbGFjZShyZXBsYWNlX3JlMiwgcmVwbGFjZW1lbnRWYWx1ZTIpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5jdXJyZW50U2VjdGlvbi5mb3JtR3JvdXAuZ2V0KGRhdGEubmFtZSkgYXMgQWJzdHJhY3RDb250cm9sO1xuXG4gICAgaWYgKGRhdGEuZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRhdGEuZGVmYXVsdFZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3Qgb3JpRGVmYXVsdFZhbHVlID0gZGF0YS5kZWZhdWx0VmFsdWU7XG4gICAgICBkYXRhLmRlZmF1bHRWYWx1ZSA9IHRoaXMuZmlsdGVyU2VydmljZS5nZXRWYWx1ZUZvclN0cmluZyhcbiAgICAgICAgZGF0YS5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhKTtcblxuICAgICAgaWYgKG9yaURlZmF1bHRWYWx1ZSAhPT0gZGF0YS5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkYXRhLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGZvcm1Db250cm9sOiBmb3JtQ29udHJvbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBuZXh0IHF1ZXN0aW9uLlxuICAgKiBJZiB0aGVyZSBpcyBubyBxdWVzdGlvbiB0byBuYXZpZ2F0ZSB0byBpdCB3aWxsIHJlamVjdCB3aXRoIGEgb3V0IG9mIGJvdW5kcyBleGNlcHRpb24uXG4gICAqIElmIGFsbG93U2tpcFJlcXVpcmVkRmllbGQgaXMgZmFsc2UgdGhlbiBpdCB3aWxsIHJlamVjdCBpZiB0aGUgY3VycmVudCBxdWVzdGlvbiBpcyBpbnZhbGlkLlxuICAgKiBJZiBlbWl0U2VjdGlvbkZpbmlzaEV2ZW50IGlzIHRydWUgdGhlbiBpdCB3aWxsIGVtaXQgYW4gZXZlbnQgaWYgaXQncyBuYXZpZ2F0aW5nIHBhc3QgdGhlIGxlbmd0aCBvZiBxdWVzdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgcXVlc3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIG5leHRRdWVzdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYWxsb3dTa2lwUmVxdWlyZWRGaWVsZCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgJiYgIXRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdCgnQ3VycmVudCBxdWVzdGlvbiBpcyBpbnZhbGlkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5nZXRDdXJyZW50UXVlc3Rpb25JbmRleCgpLnRoZW4oKGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBsYXN0UXVlc3Rpb25JbmRleCA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgaXNMYXN0UXVlc3Rpb24gPSBsYXN0UXVlc3Rpb25JbmRleCA9PT0gY3VycmVudEluZGV4O1xuXG4gICAgICAgIGlmIChpc0xhc3RRdWVzdGlvbikge1xuICAgICAgICAgIHRoaXMuc2VjdGlvbkZpbmlzaGVkRXZlbnQuZW1pdCgpO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUXVlc3Rpb24obmV3SW5kZXgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgcXVlc3Rpb24uXG4gICAqIElmIHRoZXJlIGlzIG5vIHF1ZXN0aW9uIHRvIG5hdmlnYXRlIHRvIGl0IHdpbGwgcmVqZWN0IHdpdGggYSBvdXQgb2YgYm91bmRzIGV4Y2VwdGlvbi5cbiAgICogSWYgYWxsb3dOYXZpZ2F0ZUJhY2t3YXJkcyBpcyBmYWxzZSB0aGVuIGl0IHdpbGwgcmVqZWN0LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHF1ZXN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBwcmV2UXVlc3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93TmF2aWdhdGVCYWNrd2FyZHMpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnVGhpcyBxdWVzdGlvbm5haXJlIGRvZXMgbm90IGFsbG93IGZvciBiYWNrd2FyZHMgbmF2aWdhdGlvbicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdldEN1cnJlbnRRdWVzdGlvbkluZGV4KCkudGhlbigoY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gY3VycmVudEluZGV4IC0gMTtcblxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9RdWVzdGlvbihuZXdJbmRleCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBxdWVzdGlvbnMgaW5kZXguXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyBhIG51bWJlci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudFF1ZXN0aW9uSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5pbmRleE9mKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEpO1xuXG4gICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCdDb3VsZCBub3QgZmluZCBjdXJyZW50IHF1ZXN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKGN1cnJlbnRJbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGEgcXVlc3Rpb24gaXMgaW4gYm91bmRzIHRoZW4gbmF2aWdhdGVzIHRvIGl0LlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHF1ZXN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvUXVlc3Rpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5sZW5ndGggLSAxIDwgaW5kZXggfHwgaW5kZXggPCAwKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoJ091dCBvZiBib3VuZHMgZXhjZXB0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZSA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnNbaW5kZXhdLm5hbWU7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBzZWN0aW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHNlY3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIG5leHRTZWN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdldEN1cnJlbnRTZWN0aW9uSW5kZXgoKS50aGVuKChjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9TZWN0aW9uKG5ld0luZGV4KS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHNlY3Rpb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgc2VjdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgcHJldlNlY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ2V0Q3VycmVudFNlY3Rpb25JbmRleCgpLnRoZW4oKGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1NlY3Rpb24obmV3SW5kZXgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2VjdGlvbiBpbmRleC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGEgbnVtYmVyLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDdXJyZW50U2VjdGlvbkluZGV4KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMuaW5kZXhPZih0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEpO1xuXG4gICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCdDb3VsZCBub3QgZmluZCBjdXJyZW50IHNlY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUoY3VycmVudEluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgYSBzZWN0aW9uIGlzIGluIGJvdW5kcyB0aGVuIG5hdmlnYXRlcyB0byBpdC5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBuYXZpZ2F0ZSB0by5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBzZWN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvU2VjdGlvbihpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmxlbmd0aCAtIDEgPCBpbmRleCB8fCBpbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnT3V0IG9mIGJvdW5kcyBleGNlcHRpb24nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zW2luZGV4XS5uYW1lO1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnN3ZXJzIHRoZSBjdXJyZW50IHF1ZXN0aW9uIHdpdGggdGhlIHBhcnNlZCB2YWx1ZS5cbiAgICogQHBhcmFtIGFuc3dlciBUaGUgdmFsdWUgdG8gYW5zd2VyIHRoZSBxdWVzdGlvbiB3aXRoLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGFuc3dlckN1cnJlbnRRdWVzdGlvbihhbnN3ZXI6IGFueSwgc2VuZFRvTmV4dFF1ZXN0aW9uPzogYm9vbGVhbikge1xuICAgIGlmICghc2VuZFRvTmV4dFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbnN3ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNraXBwYWJsZSkgeyAvLyBUaW1lb3V0IHRvIHByZXZlbnQgc2tpcHBpbmcgZ2xpdGNoLlxuICAgICAgdGhpcy5za2lwcGFibGUgPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbnN3ZXIpO1xuICAgICAgICB0aGlzLm5leHRRdWVzdGlvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2tpcHBhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAxNTApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVwZWF0ZXIgaXRlbSB0byB0aGUgY3VycmVudCBxdWVzdGlvbi5cbiAgICogQ3VycmVudCBxdWVzdGlvbiBtdXN0IGJlIG9mIHR5cGUgUmVwZWF0ZXIuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGhhcyBiZWVuIGFkZGVkLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGFkZFJlcGVhdGVySXRlbSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEudHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoYEN1cnJlbnQgcXVlc3Rpb24gaXNuJ3QgYSByZXBlYXRlcmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXBlYXRlckZvcm0gPSB0aGlzLmZvcm1Db25zdHVjdG9yLmdlbmVyYXRlRm9ybXNGb3JSZXBlYXRlcih0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhKTtcblxuICAgICAgaWYgKCFyZXBlYXRlckZvcm0pIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChgUmVwZWF0ZXIgdGVtcGxhdGUgZmFpbGVkIHRvIGdlbmVyYXRlLiBNYXkgYmUgZHVlIHRvIHRoZSByZXBlYXRlciBoYXZpbmcgbm8gaXRlbXMgaW4gdGhlIGVkaXRvci5gKTtcbiAgICAgIH1cblxuXG4gICAgICBpZiAoISh0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChgVGhlIGN1cnJlbnQgcXVlc3Rpb25zIGNvbnRyb2wgaXNuJ3Qgb2YgdHlwZSBGb3JtQXJyYXlgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wucHVzaChyZXBlYXRlckZvcm0pO1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcmVwZWF0ZXIgaXRlbSBvbiB0aGUgY3VycmVudCBxdWVzdGlvbi5cbiAgICogQ3VycmVudCBxdWVzdGlvbiBtdXN0IGJlIG9mIHR5cGUgUmVwZWF0ZXIuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggYXQgd2hpY2ggdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgcmVwZWF0ZXIgaXRlbSBoYXMgYmVlbiByZW1vdmVkLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIHJlbW92ZVJlcGVhdGVySXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5SZXBlYXRlcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBDdXJyZW50IHF1ZXN0aW9uIGlzbid0IGEgcmVwZWF0ZXJgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEodGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoYFRoZSBjdXJyZW50IHF1ZXN0aW9ucyBjb250cm9sIGlzbid0IG9mIHR5cGUgRm9ybUFycmF5YCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGlzcGxheSB0ZXh0IGZvciBhIGdpdmVuIHJlcGVhdGVyIGl0ZW1cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBhdCB3aGljaCB0byBnZXQgdGhlIGxhYmVsIGZvci5cbiAgICogQHJldHVybnMgQSBzdHJpbmcgd2hpY2ggaXMgdGhlIGRpc3BsYXkgdGV4dC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXRSZXBlYXRlckl0ZW1MYWJlbChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sIHx8ICEodGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwZWF0ZXJJdGVtID0gdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wuY29udHJvbHNbaW5kZXhdO1xuXG4gICAgaWYgKCFyZXBlYXRlckl0ZW0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEucmVwZWF0ZXJEaXNwbGF5TmFtZTtcbiAgICBjb25zdCBzcGxpdFRlbXBsYXRlID0gdGVtcGxhdGUuc3BsaXQoJyAnKTtcblxuICAgIGNvbnN0IGRpc3BsYXlBcnJheSA9IFtdO1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGVJdGVtIG9mIHNwbGl0VGVtcGxhdGUpIHtcbiAgICAgIGlmICh0ZW1wbGF0ZUl0ZW0ubWF0Y2goL1xcWy4qP1xcXS8pKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0ZW1wbGF0ZUl0ZW0ucmVwbGFjZSgvW1xcW1xcXSddKy9nLCAnJyk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSByZXBlYXRlckl0ZW0uZ2V0KHBhdGgpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChpdGVtICYmIGl0ZW0udmFsdWUgPyBpdGVtLnZhbHVlIDogJz8nKTtcbiAgICAgICAgZGlzcGxheUFycmF5LnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGxheUFycmF5LnB1c2godGVtcGxhdGVJdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkaXNwbGF5ID0gZGlzcGxheUFycmF5LmpvaW4oJyAnKTtcbiAgICByZXR1cm4gZGlzcGxheTtcbiAgfVxufVxuIl19
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ctcXVlc3Rpb25uYWlyZS12Mi9zcmMvbGliL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUE4QixTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlwRixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBS2pELE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQ1UsY0FBc0MsRUFDdEMsYUFBNEIsRUFDVCxPQUE2QjtRQUZoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDVCxZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQXJCbkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUQseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFlakUsY0FBUyxHQUFHLElBQUksQ0FBQztJQU1yQixDQUFDO0lBRUw7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCLENBQUMsYUFBNEIsRUFBRSxVQUFtQixFQUFFLGNBQXVCO1FBQ2pHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FB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LENBQUM7UUFDdkMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7OztZQXJrQkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFkUSxzQkFBc0I7WUFVdEIsYUFBYTs0Q0EyQmpCLE1BQU0sU0FBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db25zdHJ1Y3RvclNlcnZpY2UgfSBmcm9tICcuL2Zvcm0tY29uc3RydWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBRdWVzdGlvbm5haXJlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9xdWVzdGlvbm5haXJlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjdGlvbic7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBRdWVzdGlvbm5haXJlT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZS1vcHRpb25zJztcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZSB9IGZyb20gJy4uL2VudW1zL3F1ZXN0aW9uLXR5cGUuZW51bSc7XG5cbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL2ZpbHRlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25uYWlyZVNlcnZpY2Uge1xuICBwdWJsaWMgZGF0YUNoYW5nZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIHNlY3Rpb25GaW5pc2hlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByaXZhdGUgb3JpZ2luYWxRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlO1xuXG4gIHByaXZhdGUgY3VycmVudFF1ZXN0aW9ubmFpcmU6IFF1ZXN0aW9ubmFpcmU7XG4gIHByaXZhdGUgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXA7XG5cbiAgcHJpdmF0ZSBjdXJyZW50U2VjdGlvbk5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBjdXJyZW50UXVlc3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBxdWVzdGlvbm5haXJlVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBxdWVzdGlvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHVibGljIGFkZGl0aW9uYWxEYXRhOiBPYmplY3Q7XG5cbiAgcHJpdmF0ZSBza2lwcGFibGUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUNvbnN0dWN0b3I6IEZvcm1Db25zdHJ1Y3RvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ29wdGlvbnMnKSBwcml2YXRlIG9wdGlvbnM6IFF1ZXN0aW9ubmFpcmVPcHRpb25zXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgcXVlc3Rpb25uYWlyZSBmcm9tIGRhdGEuXG4gICAqIEBwYXJhbSBxdWVzdGlvbm5haXJlIFRoZSBxdWVzdGlvbm5haXJlIGRhdGEgdG8gbG9hZCwgb2Z0ZW4gcGFyc2VkIEpTT04gZnJvbSB0aGUgZWRpdG9yLlxuICAgKiBAcGFyYW0gc2F2ZWRTdGF0ZSBUaGUgc2F2ZWQgc3RhdGUgb2YgdGhlIHF1ZXN0aW9ubmFpcmUsIG9mdGVuIGZyb20gbG9jYWxzdG9yYWdlLlxuICAgKiBAcmV0dXJucyBudWxsXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgbG9hZFF1ZXN0aW9ubmFpcmUocXVlc3Rpb25uYWlyZTogUXVlc3Rpb25uYWlyZSwgc2F2ZWRTdGF0ZT86IE9iamVjdCwgYWRkaXRpb25hbERhdGE/OiBPYmplY3QpIHtcbiAgICB0aGlzLm9yaWdpbmFsUXVlc3Rpb25uYWlyZSA9IF8uY2xvbmVEZWVwKHF1ZXN0aW9ubmFpcmUpO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUgPSBfLmNsb25lRGVlcChxdWVzdGlvbm5haXJlKTtcblxuICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSBhZGRpdGlvbmFsRGF0YTtcblxuICAgIGlmIChzYXZlZFN0YXRlICYmIE9iamVjdC5rZXlzKHNhdmVkU3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSB0aGlzLmZvcm1Db25zdHVjdG9yLmdlbmVyYXRlRm9ybXNGb3JRdWVzdGlvbm5haXJlKFxuICAgICAgICBfLmNsb25lRGVlcCh0aGlzLm9yaWdpbmFsUXVlc3Rpb25uYWlyZSksXG4gICAgICAgIF8uY2xvbmVEZWVwKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUpLFxuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsRGF0YSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcblxuICAgICAgaWYgKG5ld0RhdGEpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29uc3R1Y3Rvci5jb25zdHJ1Y3RSZXBlYXRlckZyb21zRnJvbVN0YXRlKHNhdmVkU3RhdGUsIG5ld0RhdGEuc2VjdGlvbnMsIG5ld0RhdGEuZm9ybXMpO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSA9IG5ld0RhdGEuZm9ybXM7XG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnBhdGNoVmFsdWUoc2F2ZWRTdGF0ZSk7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9ubmFpcmUoc2F2ZWRTdGF0ZSk7XG5cblxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5za2lwVG9GaXJzdFNlY3Rpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25OYW1lID0gT2JqZWN0LmtleXModGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uY29udHJvbHMpWzBdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2tpcFRvRmlyc3RRdWVzdGlvbikge1xuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25OYW1lID0gT2JqZWN0LmtleXModGhpcy5jdXJyZW50U2VjdGlvbi5mb3JtR3JvdXAuY29udHJvbHMpWzBdO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgcXVlc3Rpb25uYWlyZSwgdXNlZCB3aGVuIGEgdmFsdWUgaXMgdXBkYXRlZCB0byBjaGVjayBjb25kaXRpb25zLlxuICAgKiBAcGFyYW0gc2F2ZWRTdGF0ZSBUaGUgc2F2ZWQgc3RhdGUgb2YgdGhlIHF1ZXN0aW9ubmFpcmUsIG9mdGVuIGZyb20gbG9jYWxzdG9yYWdlLlxuICAgKiBAcmV0dXJucyBudWxsXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlUXVlc3Rpb25uYWlyZShzYXZlZFN0YXRlPzogT2JqZWN0KSB7XG4gICAgY29uc3Qgb2xkTGVuZ3RoID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5tYXAoeCA9PiB4LnF1ZXN0aW9ucy5sZW5ndGgpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuXG4gICAgY29uc3QgbmV3RGF0YSA9IHRoaXMuZm9ybUNvbnN0dWN0b3IuZ2VuZXJhdGVGb3Jtc0ZvclF1ZXN0aW9ubmFpcmUoXG4gICAgICBfLmNsb25lRGVlcCh0aGlzLm9yaWdpbmFsUXVlc3Rpb25uYWlyZSksXG4gICAgICBfLmNsb25lRGVlcCh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlKSxcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgdGhpcy5hZGRpdGlvbmFsRGF0YVxuICAgICk7XG5cbiAgICBpZiAobmV3RGF0YSkge1xuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPSBuZXdEYXRhLmZvcm1zO1xuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucyA9IG5ld0RhdGEuc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKHNhdmVkU3RhdGUgJiYgT2JqZWN0LmtleXMoc2F2ZWRTdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0ucGF0Y2hWYWx1ZShzYXZlZFN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbm5haXJlVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlc3Rpb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5xdWVzdGlvbm5haXJlVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZGF0YUNoYW5nZWRFdmVudC5lbWl0KCk7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9ubmFpcmUodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb24gJiYgdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyRmllbGRzKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEuY2xlYXJmaWVsZHMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3TGVuZ3RoID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5tYXAoeCA9PiB4LnF1ZXN0aW9ucy5sZW5ndGgpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuXG4gICAgaWYgKG9sZExlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSk7XG4gICAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSA9PT0gbnVsbCAmJiBxdWVzdGlvbi5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUocXVlc3Rpb24uZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQWRkaXRpb25hbERhdGEocGF5bG9hZDogYW55KSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsRGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5hZGRpdGlvbmFsRGF0YSwgcGF5bG9hZCk7XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvbm5haXJlKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyQWRkaXRpb25hbERhdGEoKSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsRGF0YSA9IHt9O1xuICAgIHRoaXMudXBkYXRlUXVlc3Rpb25uYWlyZSh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0udmFsaWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRmlyc3RRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFNlY3Rpb24gfHwgIXRoaXMuY3VycmVudFF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnMuaW5kZXhPZih0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhKTtcbiAgICByZXR1cm4gY3VycmVudEluZGV4ID09PSAwO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0xhc3RRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFNlY3Rpb24gfHwgIXRoaXMuY3VycmVudFF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnMuaW5kZXhPZih0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhKTtcbiAgICBjb25zdCBtYXhJbmRleCA9ICB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGN1cnJlbnRJbmRleCA9PT0gbWF4SW5kZXg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRmlyc3RTZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2VjdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMuaW5kZXhPZih0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEpO1xuICAgIHJldHVybiBjdXJyZW50SW5kZXggPT09IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzTGFzdFNlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTZWN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5pbmRleE9mKHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YSk7XG4gICAgY29uc3QgbWF4SW5kZXggPSAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBjdXJyZW50SW5kZXggPT09IG1heEluZGV4O1xuICB9XG5cbiAgcHVibGljIHNlY3Rpb25WYWxpZChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KG5hbWUpLnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgdGhlIGZpZWxkcyBwYXJzZWRcbiAgICogQHBhcmFtIGNsZWFyZmllbGRzIEFuIGFycmF5IG9mIHN0cmluZ3MsIHBhdGhzIHRvIGNsZWFyLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhckZpZWxkcyhjbGVhcmZpZWxkczogQXJyYXk8c3RyaW5nPikge1xuICAgIGlmICghY2xlYXJmaWVsZHMgfHwgY2xlYXJmaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbGVhcmZpZWxkIG9mIGNsZWFyZmllbGRzKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KGNsZWFyZmllbGQpO1xuXG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb250cm9sLnJlc2V0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVubG9hZHMgdGhlIGN1cnJlbnQgcXVlc3Rpb25uYWlyZS5cbiAgICogVXNlZnVsIHdoZW4gZXhpdGluZyBhIHF1ZXN0aW9ubmFpcmUgcGFnZSBvciBjb21wbGV0aW5nIGEgcXVlc3Rpb25uYWlyZS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyB1bmxvYWRRdWVzdGlvbm5haXJlKCkge1xuICAgIHRoaXMub3JpZ2luYWxRdWVzdGlvbm5haXJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYWRkaXRpb25hbERhdGEgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBzZWxlY3RlZCBzZWN0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc2VjdGlvbiBkYXRhIGFuZCB0aGUgcmVsYXRlZCBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50U2VjdGlvbigpOiB7IGRhdGE6IFNlY3Rpb247IGZvcm1Hcm91cDogRm9ybUdyb3VwOyB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTZWN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMuZmluZCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHgubmFtZSA9PT0gdGhpcy5jdXJyZW50U2VjdGlvbk5hbWU7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZm9ybUdyb3VwOiB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXQoZGF0YS5uYW1lKSBhcyBGb3JtR3JvdXBcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHRoZSBhdmFpYWxibGUgc2VjdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsbCBhdmFpYWxibGUgc2VjdGlvbnMuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF2YWlsYWJsZVNlY3Rpb25zKCk6IEFycmF5PFNlY3Rpb24+IHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUgfHwgIXRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBkYXRhIGZvciB0aGUgZW50aXJlIHF1ZXN0aW9ubmFpcmUuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBvZiBkYXRhLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0gPyB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXRSYXdWYWx1ZSgpIDoge307XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHNlbGVjdGVkIHF1ZXN0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcXVlc3Rpb24gZGF0YSBhbmQgdGhlIHJlbGF0ZWQgZm9ybSBjb250cm9sLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UXVlc3Rpb24oKTogeyBkYXRhOiBRdWVzdGlvbjsgZm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGw7IH0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnMuZmluZCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHgubmFtZSA9PT0gdGhpcy5jdXJyZW50UXVlc3Rpb25OYW1lO1xuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLmdldChkYXRhLm5hbWUpIGFzIEFic3RyYWN0Q29udHJvbDtcbi8qXG4gICAgaWYgKGRhdGEuZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRhdGEuZGVmYXVsdFZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3Qgb3JpRGVmYXVsdFZhbHVlID0gZGF0YS5kZWZhdWx0VmFsdWU7XG4gICAgICBkYXRhLmRlZmF1bHRWYWx1ZSA9IHRoaXMuZmlsdGVyU2VydmljZS5nZXRWYWx1ZUZvclN0cmluZyhcbiAgICAgICAgZGF0YS5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLFxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxEYXRhKTtcblxuICAgICAgaWYgKG9yaURlZmF1bHRWYWx1ZSAhPT0gZGF0YS5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkYXRhLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICB9XG4qL1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZm9ybUNvbnRyb2w6IGZvcm1Db250cm9sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgcXVlc3Rpb24uXG4gICAqIElmIHRoZXJlIGlzIG5vIHF1ZXN0aW9uIHRvIG5hdmlnYXRlIHRvIGl0IHdpbGwgcmVqZWN0IHdpdGggYSBvdXQgb2YgYm91bmRzIGV4Y2VwdGlvbi5cbiAgICogSWYgYWxsb3dTa2lwUmVxdWlyZWRGaWVsZCBpcyBmYWxzZSB0aGVuIGl0IHdpbGwgcmVqZWN0IGlmIHRoZSBjdXJyZW50IHF1ZXN0aW9uIGlzIGludmFsaWQuXG4gICAqIElmIGVtaXRTZWN0aW9uRmluaXNoRXZlbnQgaXMgdHJ1ZSB0aGVuIGl0IHdpbGwgZW1pdCBhbiBldmVudCBpZiBpdCdzIG5hdmlnYXRpbmcgcGFzdCB0aGUgbGVuZ3RoIG9mIHF1ZXN0aW9ucy5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBxdWVzdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgbmV4dFF1ZXN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd1NraXBSZXF1aXJlZEZpZWxkKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCAmJiAhdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wudmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KCdDdXJyZW50IHF1ZXN0aW9uIGlzIGludmFsaWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdldEN1cnJlbnRRdWVzdGlvbkluZGV4KCkudGhlbigoY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RRdWVzdGlvbkluZGV4ID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBpc0xhc3RRdWVzdGlvbiA9IGxhc3RRdWVzdGlvbkluZGV4ID09PSBjdXJyZW50SW5kZXg7XG5cbiAgICAgICAgaWYgKGlzTGFzdFF1ZXN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5zZWN0aW9uRmluaXNoZWRFdmVudC5lbWl0KCk7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gY3VycmVudEluZGV4ICsgMTtcblxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9RdWVzdGlvbihuZXdJbmRleCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBwcmV2aW91cyBxdWVzdGlvbi5cbiAgICogSWYgdGhlcmUgaXMgbm8gcXVlc3Rpb24gdG8gbmF2aWdhdGUgdG8gaXQgd2lsbCByZWplY3Qgd2l0aCBhIG91dCBvZiBib3VuZHMgZXhjZXB0aW9uLlxuICAgKiBJZiBhbGxvd05hdmlnYXRlQmFja3dhcmRzIGlzIGZhbHNlIHRoZW4gaXQgd2lsbCByZWplY3QuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgcXVlc3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIHByZXZRdWVzdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYWxsb3dOYXZpZ2F0ZUJhY2t3YXJkcykge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCdUaGlzIHF1ZXN0aW9ubmFpcmUgZG9lcyBub3QgYWxsb3cgZm9yIGJhY2t3YXJkcyBuYXZpZ2F0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2V0Q3VycmVudFF1ZXN0aW9uSW5kZXgoKS50aGVuKChjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1F1ZXN0aW9uKG5ld0luZGV4KS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHF1ZXN0aW9ucyBpbmRleC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGEgbnVtYmVyLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDdXJyZW50UXVlc3Rpb25JbmRleCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YSk7XG5cbiAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoJ0NvdWxkIG5vdCBmaW5kIGN1cnJlbnQgcXVlc3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUoY3VycmVudEluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgYSBxdWVzdGlvbiBpcyBpbiBib3VuZHMgdGhlbiBuYXZpZ2F0ZXMgdG8gaXQuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gbmF2aWdhdGUgdG8uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgcXVlc3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIG5hdmlnYXRlVG9RdWVzdGlvbihpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWN0aW9uLmRhdGEucXVlc3Rpb25zLmxlbmd0aCAtIDEgPCBpbmRleCB8fCBpbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnT3V0IG9mIGJvdW5kcyBleGNlcHRpb24nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25OYW1lID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9uc1tpbmRleF0ubmFtZTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBuZXh0IHNlY3Rpb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgc2VjdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgbmV4dFNlY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ2V0Q3VycmVudFNlY3Rpb25JbmRleCgpLnRoZW4oKGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1NlY3Rpb24obmV3SW5kZXgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgc2VjdGlvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBzZWN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBwcmV2U2VjdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5nZXRDdXJyZW50U2VjdGlvbkluZGV4KCkudGhlbigoY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvU2VjdGlvbihuZXdJbmRleCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBzZWN0aW9uIGluZGV4LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgYSBudW1iZXIuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdldEN1cnJlbnRTZWN0aW9uSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5pbmRleE9mKHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YSk7XG5cbiAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoJ0NvdWxkIG5vdCBmaW5kIGN1cnJlbnQgc2VjdGlvbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZShjdXJyZW50SW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBhIHNlY3Rpb24gaXMgaW4gYm91bmRzIHRoZW4gbmF2aWdhdGVzIHRvIGl0LlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHNlY3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIG5hdmlnYXRlVG9TZWN0aW9uKGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMubGVuZ3RoIC0gMSA8IGluZGV4IHx8IGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCdPdXQgb2YgYm91bmRzIGV4Y2VwdGlvbicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRTZWN0aW9uTmFtZSA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnNbaW5kZXhdLm5hbWU7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuc3dlcnMgdGhlIGN1cnJlbnQgcXVlc3Rpb24gd2l0aCB0aGUgcGFyc2VkIHZhbHVlLlxuICAgKiBAcGFyYW0gYW5zd2VyIFRoZSB2YWx1ZSB0byBhbnN3ZXIgdGhlIHF1ZXN0aW9uIHdpdGguXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgYW5zd2VyQ3VycmVudFF1ZXN0aW9uKGFuc3dlcjogYW55LCBzZW5kVG9OZXh0UXVlc3Rpb24/OiBib29sZWFuKSB7XG4gICAgaWYgKCFzZW5kVG9OZXh0UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnNldFZhbHVlKGFuc3dlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2tpcHBhYmxlKSB7IC8vIFRpbWVvdXQgdG8gcHJldmVudCBza2lwcGluZyBnbGl0Y2guXG4gICAgICB0aGlzLnNraXBwYWJsZSA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnNldFZhbHVlKGFuc3dlcik7XG4gICAgICAgIHRoaXMubmV4dFF1ZXN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5za2lwcGFibGUgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDE1MCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXBlYXRlciBpdGVtIHRvIHRoZSBjdXJyZW50IHF1ZXN0aW9uLlxuICAgKiBDdXJyZW50IHF1ZXN0aW9uIG11c3QgYmUgb2YgdHlwZSBSZXBlYXRlci5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gdGhlIHJlcGVhdGVyIGl0ZW0gaGFzIGJlZW4gYWRkZWQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgYWRkUmVwZWF0ZXJJdGVtKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YS50eXBlICE9PSBRdWVzdGlvblR5cGUuUmVwZWF0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChgQ3VycmVudCBxdWVzdGlvbiBpc24ndCBhIHJlcGVhdGVyYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcGVhdGVyRm9ybSA9IHRoaXMuZm9ybUNvbnN0dWN0b3IuZ2VuZXJhdGVGb3Jtc0ZvclJlcGVhdGVyKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEpO1xuXG4gICAgICBpZiAoIXJlcGVhdGVyRm9ybSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBSZXBlYXRlciB0ZW1wbGF0ZSBmYWlsZWQgdG8gZ2VuZXJhdGUuIE1heSBiZSBkdWUgdG8gdGhlIHJlcGVhdGVyIGhhdmluZyBubyBpdGVtcyBpbiB0aGUgZWRpdG9yLmApO1xuICAgICAgfVxuXG5cbiAgICAgIGlmICghKHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBUaGUgY3VycmVudCBxdWVzdGlvbnMgY29udHJvbCBpc24ndCBvZiB0eXBlIEZvcm1BcnJheWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5wdXNoKHJlcGVhdGVyRm9ybSk7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZXBlYXRlciBpdGVtIG9uIHRoZSBjdXJyZW50IHF1ZXN0aW9uLlxuICAgKiBDdXJyZW50IHF1ZXN0aW9uIG11c3QgYmUgb2YgdHlwZSBSZXBlYXRlci5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBhdCB3aGljaCB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGhhcyBiZWVuIHJlbW92ZWQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUmVwZWF0ZXJJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEudHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoYEN1cnJlbnQgcXVlc3Rpb24gaXNuJ3QgYSByZXBlYXRlcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoISh0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChgVGhlIGN1cnJlbnQgcXVlc3Rpb25zIGNvbnRyb2wgaXNuJ3Qgb2YgdHlwZSBGb3JtQXJyYXlgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkaXNwbGF5IHRleHQgZm9yIGEgZ2l2ZW4gcmVwZWF0ZXIgaXRlbVxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGF0IHdoaWNoIHRvIGdldCB0aGUgbGFiZWwgZm9yLlxuICAgKiBAcmV0dXJucyBBIHN0cmluZyB3aGljaCBpcyB0aGUgZGlzcGxheSB0ZXh0LlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldFJlcGVhdGVySXRlbUxhYmVsKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgfHwgISh0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCByZXBlYXRlckl0ZW0gPSB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5jb250cm9sc1tpbmRleF07XG5cbiAgICBpZiAoIXJlcGVhdGVySXRlbSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YS5yZXBlYXRlckRpc3BsYXlOYW1lO1xuICAgIGNvbnN0IHNwbGl0VGVtcGxhdGUgPSB0ZW1wbGF0ZS5zcGxpdCgnICcpO1xuXG4gICAgY29uc3QgZGlzcGxheUFycmF5ID0gW107XG4gICAgZm9yIChjb25zdCB0ZW1wbGF0ZUl0ZW0gb2Ygc3BsaXRUZW1wbGF0ZSkge1xuICAgICAgaWYgKHRlbXBsYXRlSXRlbS5tYXRjaCgvXFxbLio/XFxdLykpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRlbXBsYXRlSXRlbS5yZXBsYWNlKC9bXFxbXFxdJ10rL2csICcnKTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHJlcGVhdGVySXRlbS5nZXQocGF0aCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGl0ZW0gJiYgaXRlbS52YWx1ZSA/IGl0ZW0udmFsdWUgOiAnPycpO1xuICAgICAgICBkaXNwbGF5QXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5QXJyYXkucHVzaCh0ZW1wbGF0ZUl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRpc3BsYXkgPSBkaXNwbGF5QXJyYXkuam9pbignICcpO1xuICAgIHJldHVybiBkaXNwbGF5O1xuICB9XG59XG4iXX0=
@@ -335,6 +335,8 @@ class FormConstructorService {
335
335
  * @author Will Poulson
336
336
  */
337
337
  generateFormsForQuestionnaire(questionnaire, currentQuestionnaire, currentQuestionnaireForm, additionalData, skipFilter) {
338
+ console.log('zero');
339
+ console.log(additionalData);
338
340
  const sections = skipFilter ?
339
341
  questionnaire.sections :
340
342
  this.filterService.filterSections(questionnaire.sections, currentQuestionnaireForm, additionalData);
@@ -342,13 +344,15 @@ class FormConstructorService {
342
344
  if (noChange && !skipFilter) {
343
345
  return null;
344
346
  }
345
- const questionnaireForms = this.generateFormsForSections(sections, currentQuestionnaireForm);
347
+ const questionnaireForms = this.generateFormsForSections(sections, currentQuestionnaireForm, additionalData);
346
348
  return { sections: sections, forms: questionnaireForms };
347
349
  }
348
- generateFormsForSections(sections, currentQuestionnaireForm) {
350
+ generateFormsForSections(sections, currentQuestionnaireForm, additionalData) {
351
+ console.log('one');
352
+ console.log(additionalData);
349
353
  const questionnaireForms = this.fb.group({});
350
354
  for (const section of sections) {
351
- const sectionForms = this.generateFormsForSection(section, currentQuestionnaireForm);
355
+ const sectionForms = this.generateFormsForSection(section, currentQuestionnaireForm, additionalData);
352
356
  questionnaireForms.addControl(section.name, sectionForms);
353
357
  }
354
358
  return questionnaireForms;
@@ -360,13 +364,15 @@ class FormConstructorService {
360
364
  * @returns A filtered form group.
361
365
  * @author Will Poulson
362
366
  */
363
- generateFormsForSection(section, currentQuestionnaireForm) {
367
+ generateFormsForSection(section, currentQuestionnaireForm, additionalData) {
368
+ console.log('two');
369
+ console.log(additionalData);
364
370
  const sectionForms = this.fb.group({});
365
371
  for (const question of section.questions) {
366
372
  if (question.type === QuestionType.Info) {
367
373
  continue;
368
374
  }
369
- const questionControl = this.generateControlForQuestion(question, section, currentQuestionnaireForm);
375
+ const questionControl = this.generateControlForQuestion(question, section, currentQuestionnaireForm, additionalData);
370
376
  sectionForms.addControl(question.name, questionControl);
371
377
  }
372
378
  return sectionForms;
@@ -377,9 +383,43 @@ class FormConstructorService {
377
383
  * @returns An abstract control.
378
384
  * @author Will Poulson
379
385
  */
380
- generateControlForQuestion(question, section, currentQuestionnaireForm) {
386
+ generateControlForQuestion(question, section, currentQuestionnaireForm, additionalData) {
381
387
  const convertedValidators = this.convertValidators(question.validators);
382
- const defaultValue = question.defaultValue ? question.defaultValue : null;
388
+ let defaultValue = question.defaultValue ? question.defaultValue : null;
389
+ console.log('three');
390
+ console.log(additionalData);
391
+ if (defaultValue !== null) {
392
+ defaultValue = this.filterService.getValueForString(defaultValue, currentQuestionnaireForm, additionalData);
393
+ }
394
+ console.log('default');
395
+ console.log(defaultValue);
396
+ const titleRegEx = /(\{\{([^\}]+)\}\})/gi;
397
+ let titlePlaceholdersFound = null;
398
+ console.log('default');
399
+ console.log(question);
400
+ while ((titlePlaceholdersFound = titleRegEx.exec(question.title)) !== null) {
401
+ let titleReplacementValue = this.filterService.getValueForString(titlePlaceholdersFound[2], currentQuestionnaireForm, additionalData);
402
+ console.log('m1');
403
+ const titleReplaceRe = new RegExp('\{\{' + titlePlaceholdersFound[2] + '\}\}', 'g');
404
+ titleReplacementValue = titleReplacementValue.replace(/\w\S*/g, function (txt) {
405
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
406
+ });
407
+ question.title = question.title.replace(titleReplaceRe, titleReplacementValue);
408
+ }
409
+ const subTitleRegEx = /(\{\{([^\}]+)\}\})/gi;
410
+ let subTitlePlaceholdersFound = null;
411
+ while ((subTitlePlaceholdersFound = subTitleRegEx.exec(question.subtitle)) !== null) {
412
+ let subTitleReplacementValue = this.filterService.getValueForString(subTitlePlaceholdersFound[2], currentQuestionnaireForm, additionalData);
413
+ console.log('m2');
414
+ const subTitleReplaceRe = new RegExp('\{\{' + subTitlePlaceholdersFound[2] + '\}\}', 'g');
415
+ subTitleReplacementValue = subTitleReplacementValue.replace(/\w\S*/g, function (txt) {
416
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
417
+ });
418
+ question.subtitle = question.subtitle.replace(subTitleReplaceRe, subTitleReplacementValue);
419
+ }
420
+ console.log('final');
421
+ console.log(question);
422
+ console.log('====');
383
423
  switch (question.type) {
384
424
  case QuestionType.Repeater:
385
425
  const newArray = this.fb.array([], convertedValidators);
@@ -746,34 +786,21 @@ class QuestionnaireService {
746
786
  if (!data) {
747
787
  return null;
748
788
  }
749
- const regexp = /(\{\{([^\}]+)\}\})/gi;
750
- let placeholdersFound = null;
751
- while ((placeholdersFound = regexp.exec(data.title)) !== null) {
752
- let replacementValue = this.filterService.getValueForString(placeholdersFound[2], this.currentQuestionnaireForm, this.additionalData);
753
- const replace_re = new RegExp('\{\{' + placeholdersFound[2] + '\}\}', 'g');
754
- replacementValue = replacementValue.replace(/\w\S*/g, function (txt) {
755
- return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
756
- });
757
- data.title = data.title.replace(replace_re, replacementValue);
758
- }
759
- const regexp2 = /(\{\{([^\}]+)\}\})/gi;
760
- let subTitlePlaceholdersFound = null;
761
- while ((subTitlePlaceholdersFound = regexp2.exec(data.subtitle)) !== null) {
762
- let replacementValue2 = this.filterService.getValueForString(subTitlePlaceholdersFound[2], this.currentQuestionnaireForm, this.additionalData);
763
- const replace_re2 = new RegExp('\{\{' + subTitlePlaceholdersFound[2] + '\}\}', 'g');
764
- replacementValue2 = replacementValue2.replace(/\w\S*/g, function (txt) {
765
- return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
766
- });
767
- data.subtitle = data.subtitle.replace(replace_re2, replacementValue2);
768
- }
769
789
  const formControl = this.currentSection.formGroup.get(data.name);
770
- if (data.defaultValue !== null && data.defaultValue !== '') {
771
- const oriDefaultValue = data.defaultValue;
772
- data.defaultValue = this.filterService.getValueForString(data.defaultValue, this.currentQuestionnaireForm, this.additionalData);
773
- if (oriDefaultValue !== data.defaultValue) {
790
+ /*
791
+ if (data.defaultValue !== null && data.defaultValue !== '') {
792
+ const oriDefaultValue = data.defaultValue;
793
+ data.defaultValue = this.filterService.getValueForString(
794
+ data.defaultValue,
795
+ this.currentQuestionnaireForm,
796
+ this.additionalData);
797
+
798
+ if (oriDefaultValue !== data.defaultValue) {
774
799
  formControl.patchValue(data.defaultValue);
800
+ }
801
+
775
802
  }
776
- }
803
+ */
777
804
  return {
778
805
  data: data,
779
806
  formControl: formControl