@hmcts/ccd-case-ui-toolkit 6.19.10-doc-upload → 6.19.11-exui-848

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +166 -127
  2. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
  3. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
  4. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
  5. package/esm2015/lib/shared/components/case-editor/case-edit/case-edit.component.js +7 -2
  6. package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +2 -2
  7. package/esm2015/lib/shared/components/case-editor/services/valid-page-list-caseFields.service.js +16 -12
  8. package/esm2015/lib/shared/components/case-editor/services/wizard-page-field-to-case-field.mapper.js +2 -1
  9. package/esm2015/lib/shared/components/palette/complex/read-complex-field-table.component.js +4 -3
  10. package/esm2015/lib/shared/components/palette/document/write-document-field.component.js +16 -2
  11. package/esm2015/lib/shared/directives/conditional-show/services/condition-parser.service.js +2 -2
  12. package/esm2015/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.js +26 -13
  13. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +164 -126
  14. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  15. package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts.map +1 -1
  16. package/lib/shared/components/case-editor/services/valid-page-list-caseFields.service.d.ts +2 -1
  17. package/lib/shared/components/case-editor/services/valid-page-list-caseFields.service.d.ts.map +1 -1
  18. package/lib/shared/components/case-editor/services/wizard-page-field-to-case-field.mapper.d.ts.map +1 -1
  19. package/lib/shared/components/palette/document/write-document-field.component.d.ts +1 -0
  20. package/lib/shared/components/palette/document/write-document-field.component.d.ts.map +1 -1
  21. package/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.d.ts +1 -1
  22. package/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.d.ts.map +1 -1
  23. package/package.json +1 -1
@@ -8,17 +8,17 @@ export class ReadFieldsFilterPipe {
8
8
  /**
9
9
  * Complex type should have at least on simple field descendant with a value.
10
10
  */
11
- static isValidComplex(field, values) {
11
+ static isValidComplex(field, values, checkConditionalShowAgainst) {
12
12
  values = values || {};
13
13
  const type = field.field_type;
14
14
  const value = ReadFieldsFilterPipe.getValue(field, values);
15
15
  const hasChildrenWithValue = type.complex_fields.find(f => {
16
- const willKeep = ReadFieldsFilterPipe.keepField(f, value, true);
17
- return willKeep && ReadFieldsFilterPipe.evaluateConditionalShow(f, value).hidden !== true;
16
+ const willKeep = ReadFieldsFilterPipe.keepField(f, value, true, checkConditionalShowAgainst);
17
+ return willKeep && ReadFieldsFilterPipe.evaluateConditionalShow(f, checkConditionalShowAgainst).hidden !== true;
18
18
  });
19
19
  return !!hasChildrenWithValue;
20
20
  }
21
- static isValidCollection(field, values) {
21
+ static isValidCollection(field, values, checkConditionalShowAgainst) {
22
22
  // if field is collection and it has complex/collection child field; parent field doesnt have value defined
23
23
  if (!Array.isArray(field.value) && values && values.hasOwnProperty(field.id)) {
24
24
  return true;
@@ -32,7 +32,7 @@ export class ReadFieldsFilterPipe {
32
32
  value: item.value,
33
33
  label: null,
34
34
  });
35
- return ReadFieldsFilterPipe.isValidComplex(complexField);
35
+ return ReadFieldsFilterPipe.isValidComplex(complexField, undefined, checkConditionalShowAgainst);
36
36
  });
37
37
  }
38
38
  return isNotEmpty;
@@ -44,11 +44,11 @@ export class ReadFieldsFilterPipe {
44
44
  static isCompound(field) {
45
45
  return ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type];
46
46
  }
47
- static isValidCompound(field, value) {
47
+ static isValidCompound(field, value, checkConditionalShowAgainst) {
48
48
  return ReadFieldsFilterPipe.isCompound(field)
49
- && ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type](field, value);
49
+ && ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type](field, value, checkConditionalShowAgainst);
50
50
  }
51
- static keepField(field, value, ignoreLabels = false) {
51
+ static keepField(field, value, ignoreLabels = false, checkConditionalShowAgainst) {
52
52
  // We shouldn't ditch labels.
53
53
  if (!ignoreLabels && field.field_type.type === 'Label' && (field.label || '').length > 0) {
54
54
  return true;
@@ -59,7 +59,7 @@ export class ReadFieldsFilterPipe {
59
59
  }
60
60
  value = value || {};
61
61
  if (ReadFieldsFilterPipe.isCompound(field)) {
62
- return ReadFieldsFilterPipe.isValidCompound(field, value);
62
+ return ReadFieldsFilterPipe.isValidCompound(field, value, checkConditionalShowAgainst);
63
63
  }
64
64
  return !ReadFieldsFilterPipe.isEmpty(field.value)
65
65
  || !ReadFieldsFilterPipe.isEmpty(value[field.id]);
@@ -102,7 +102,7 @@ export class ReadFieldsFilterPipe {
102
102
  /**
103
103
  * Filter out fields having no data to display and harmonise field values coming parent's value.
104
104
  */
105
- transform(complexField, keepEmpty, index, setupHidden = false, formGroup, path) {
105
+ transform(complexField, keepEmpty, index, setupHidden = false, formGroup, path, idPrefix) {
106
106
  if (!complexField || !complexField.field_type) {
107
107
  return [];
108
108
  }
@@ -111,8 +111,21 @@ export class ReadFieldsFilterPipe {
111
111
  let checkConditionalShowAgainst = values;
112
112
  let formGroupAvailable = false;
113
113
  if (formGroup) {
114
- checkConditionalShowAgainst = formGroup.value;
114
+ checkConditionalShowAgainst = formGroup.parent.getRawValue().data;
115
115
  formGroupAvailable = true;
116
+ if (idPrefix !== undefined) {
117
+ if (idPrefix !== '') {
118
+ const fieldId = idPrefix.substring(0, idPrefix.indexOf('_'));
119
+ if (checkConditionalShowAgainst[fieldId]) {
120
+ checkConditionalShowAgainst = values;
121
+ formGroupAvailable = false;
122
+ }
123
+ }
124
+ else {
125
+ checkConditionalShowAgainst = Object.assign(checkConditionalShowAgainst, values);
126
+ formGroupAvailable = false;
127
+ }
128
+ }
116
129
  }
117
130
  return fields
118
131
  .map(f => {
@@ -132,7 +145,7 @@ export class ReadFieldsFilterPipe {
132
145
  }
133
146
  return f;
134
147
  })
135
- .filter(f => keepEmpty || ReadFieldsFilterPipe.keepField(f));
148
+ .filter(f => keepEmpty || ReadFieldsFilterPipe.keepField(f, undefined, false, checkConditionalShowAgainst));
136
149
  }
137
150
  }
138
151
  ReadFieldsFilterPipe.EMPTY_VALUES = [
@@ -154,4 +167,4 @@ ReadFieldsFilterPipe.ɵpipe = i0.ɵɵdefinePipe({ name: "ccdReadFieldsFilter", t
154
167
  name: 'ccdReadFieldsFilter'
155
168
  }]
156
169
  }], null, null); })();
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2NkLXJlYWQtZmllbGRzLWZpbHRlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9waXBlcy9jb21wbGV4L2NjZC1yZWFkLWZpZWxkcy1maWx0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFLakUsTUFBTSxPQUFPLG9CQUFvQjtJQWdCL0I7O09BRUc7SUFDSyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsTUFBZTtRQUM3RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFM0QsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4RCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRSxPQUFPLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztRQUM1RixDQUFD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QUFwQixvQkFBb0I7dUZBQXBCLG9CQUFvQjtjQUhoQyxJQUFJO2VBQUM7Z0JBQ0osSUFBSSxFQUFFLHFCQUFxQjthQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBwbGFpblRvQ2xhc3NGcm9tRXhpc3QgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBTaG93Q29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb25kaXRpb25hbC1zaG93L2RvbWFpbi9jb25kaXRpb25hbC1zaG93Lm1vZGVsJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWVsZHMvZmllbGRzLnV0aWxzJztcblxuQFBpcGUoe1xuICBuYW1lOiAnY2NkUmVhZEZpZWxkc0ZpbHRlcidcbn0pXG5leHBvcnQgY2xhc3MgUmVhZEZpZWxkc0ZpbHRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFTVBUWV9WQUxVRVMgPSBbXG4gICAgdW5kZWZpbmVkLFxuICAgIG51bGwsXG4gICAgJycsXG4gICAge31cbiAgXTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBTFdBWVNfTlVMTF9GSUVMRFMgPSBbJ0Nhc2VQYXltZW50SGlzdG9yeVZpZXdlcicsICdXYXlzVG9QYXknLCAnRmxhZ0xhdW5jaGVyJywgJ0NvbXBvbmVudExhdW5jaGVyJ107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTkVTVEVEX1RZUEVTID0ge1xuICAgIENvbXBsZXg6IFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzVmFsaWRDb21wbGV4LFxuICAgIENvbGxlY3Rpb246IFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzVmFsaWRDb2xsZWN0aW9uXG4gIH07XG5cbiAgLyoqXG4gICAqIENvbXBsZXggdHlwZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbiBzaW1wbGUgZmllbGQgZGVzY2VuZGFudCB3aXRoIGEgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBpc1ZhbGlkQ29tcGxleChmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZXM/OiBvYmplY3QpOiBib29sZWFuIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XG4gICAgY29uc3QgdHlwZSA9IGZpZWxkLmZpZWxkX3R5cGU7XG4gICAgY29uc3QgdmFsdWUgPSBSZWFkRmllbGRzRmlsdGVyUGlwZS5nZXRWYWx1ZShmaWVsZCwgdmFsdWVzKTtcblxuICAgIGNvbnN0IGhhc0NoaWxkcmVuV2l0aFZhbHVlID0gdHlwZS5jb21wbGV4X2ZpZWxkcy5maW5kKGYgPT4ge1xuICAgICAgY29uc3Qgd2lsbEtlZXAgPSBSZWFkRmllbGRzRmlsdGVyUGlwZS5rZWVwRmllbGQoZiwgdmFsdWUsIHRydWUpO1xuICAgICAgcmV0dXJuIHdpbGxLZWVwICYmIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmV2YWx1YXRlQ29uZGl0aW9uYWxTaG93KGYsIHZhbHVlKS5oaWRkZW4gIT09IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gISFoYXNDaGlsZHJlbldpdGhWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsaWRDb2xsZWN0aW9uKGZpZWxkOiBDYXNlRmllbGQsIHZhbHVlcz86IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIC8vIGlmIGZpZWxkIGlzIGNvbGxlY3Rpb24gYW5kIGl0IGhhcyBjb21wbGV4L2NvbGxlY3Rpb24gY2hpbGQgZmllbGQ7IHBhcmVudCBmaWVsZCBkb2VzbnQgaGF2ZSB2YWx1ZSBkZWZpbmVkXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKSAmJiB2YWx1ZXMgJiYgdmFsdWVzLmhhc093blByb3BlcnR5KGZpZWxkLmlkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzTm90RW1wdHkgPSBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKSAmJiBmaWVsZC52YWx1ZS5sZW5ndGggPiAwO1xuICAgIGlmIChpc05vdEVtcHR5ICYmIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4Jykge1xuICAgICAgcmV0dXJuICEhZmllbGQudmFsdWUuZmluZChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgY29tcGxleEZpZWxkID0gcGxhaW5Ub0NsYXNzRnJvbUV4aXN0KG5ldyBDYXNlRmllbGQoKSwge1xuICAgICAgICAgIGlkOiBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5pZCxcbiAgICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZSxcbiAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICBsYWJlbDogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc1ZhbGlkQ29tcGxleChjb21wbGV4RmllbGQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc05vdEVtcHR5O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLkVNUFRZX1ZBTFVFUy5pbmRleE9mKHZhbHVlKSAhPT0gLTFcbiAgICAgIHx8IHZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzQ29tcG91bmQoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBSZWFkRmllbGRzRmlsdGVyUGlwZS5ORVNURURfVFlQRVNbZmllbGQuZmllbGRfdHlwZS50eXBlXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsaWRDb21wb3VuZChmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZT86IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0NvbXBvdW5kKGZpZWxkKVxuICAgICAgICAgICAgJiYgUmVhZEZpZWxkc0ZpbHRlclBpcGUuTkVTVEVEX1RZUEVTW2ZpZWxkLmZpZWxkX3R5cGUudHlwZV0oZmllbGQsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGtlZXBGaWVsZChmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZT86IG9iamVjdCwgaWdub3JlTGFiZWxzID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICAvLyBXZSBzaG91bGRuJ3QgZGl0Y2ggbGFiZWxzLlxuICAgIGlmICghaWdub3JlTGFiZWxzICYmIGZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0xhYmVsJyAmJiAoZmllbGQubGFiZWwgfHwgJycpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBXZSBhbHNvIHNob3VsZG4ndCBkaXRjaCBmaWVsZHMgdGhhdCB3aWxsIGFsd2F5cyBjb21lIGJhY2sgd2l0aCBhIG51bGwgdmFsdWUuXG4gICAgaWYgKHRoaXMuQUxXQVlTX05VTExfRklFTERTLmluZGV4T2YoZmllbGQuZmllbGRfdHlwZS50eXBlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgfHwge307XG5cbiAgICBpZiAoUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNDb21wb3VuZChmaWVsZCkpIHtcbiAgICAgIHJldHVybiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc1ZhbGlkQ29tcG91bmQoZmllbGQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIVJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzRW1wdHkoZmllbGQudmFsdWUpXG4gICAgICAgICAgICAgIHx8ICFSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0VtcHR5KHZhbHVlW2ZpZWxkLmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRWYWx1ZShmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZXM6IGFueSwgaW5kZXg/OiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0VtcHR5KGZpZWxkLnZhbHVlKSkge1xuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBpZiAoaW5kZXggPj0gMCApIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdLnZhbHVlW2ZpZWxkLmlkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVzW2ZpZWxkLmlkXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBldmFsdWF0ZUNvbmRpdGlvbmFsU2hvdyhmaWVsZDogQ2FzZUZpZWxkLCBmb3JtVmFsdWU6IGFueSwgcGF0aD86IHN0cmluZyxcbiAgICBmb3JtR3JvdXBBdmFpbGFibGU/OiBib29sZWFuLCBmaWVsZElkPzogc3RyaW5nKTogQ2FzZUZpZWxkIHtcbiAgICBpZiAoZmllbGQuZGlzcGxheV9jb250ZXh0ID09PSAnSElEREVOJykge1xuICAgICAgZmllbGQuaGlkZGVuID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLnNob3dfY29uZGl0aW9uKSB7XG4gICAgICBsZXQgY29uZDogU2hvd0NvbmRpdGlvbjtcbiAgICAgIGlmIChmaWVsZElkICYmIGZpZWxkLnNob3dfY29uZGl0aW9uLmluZGV4T2YoYCR7ZmllbGRJZH0uYCkgPiAtMSAmJiAhZm9ybUdyb3VwQXZhaWxhYmxlICYmICEhT2JqZWN0LmtleXMoZm9ybVZhbHVlKS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gYCR7ZmllbGRJZH0uYDtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVnRXhwID0gbmV3IFJlZ0V4cChzZWFyY2gsICdnJyk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VXaXRoID0gJyc7XG4gICAgICAgIGNvbmQgPSBTaG93Q29uZGl0aW9uLmdldEluc3RhbmNlKGZpZWxkLnNob3dfY29uZGl0aW9uLnJlcGxhY2Uoc2VhcmNoUmVnRXhwLCByZXBsYWNlV2l0aCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uZCA9IFNob3dDb25kaXRpb24uZ2V0SW5zdGFuY2UoZmllbGQuc2hvd19jb25kaXRpb24pO1xuICAgICAgfVxuICAgICAgZmllbGQuaGlkZGVuID0gIWNvbmQubWF0Y2goZm9ybVZhbHVlLCBwYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGQuaGlkZGVuID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmaWVsZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgb3V0IGZpZWxkcyBoYXZpbmcgbm8gZGF0YSB0byBkaXNwbGF5IGFuZCBoYXJtb25pc2UgZmllbGQgdmFsdWVzIGNvbWluZyBwYXJlbnQncyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgY29tcGxleEZpZWxkOiBDYXNlRmllbGQsIGtlZXBFbXB0eT86IGJvb2xlYW4sIGluZGV4PzogbnVtYmVyLFxuICAgIHNldHVwSGlkZGVuID0gZmFsc2UsIGZvcm1Hcm91cD86IEZvcm1Hcm91cCB8IEFic3RyYWN0Q29udHJvbCwgcGF0aD86IHN0cmluZyk6IENhc2VGaWVsZFtdIHtcbiAgICBpZiAoIWNvbXBsZXhGaWVsZCB8fCAhY29tcGxleEZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZHMgPSBjb21wbGV4RmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyB8fCBbXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBjb21wbGV4RmllbGQudmFsdWUgfHwge307XG4gICAgbGV0IGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdDogYW55ID0gdmFsdWVzO1xuICAgIGxldCBmb3JtR3JvdXBBdmFpbGFibGUgPSBmYWxzZTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QgPSBmb3JtR3JvdXAudmFsdWU7XG4gICAgICBmb3JtR3JvdXBBdmFpbGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZHNcbiAgICAgIC5tYXAoZiA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gRmllbGRzVXRpbHMuY2xvbmVPYmplY3QoZik7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gUmVhZEZpZWxkc0ZpbHRlclBpcGUuZ2V0VmFsdWUoZiwgdmFsdWVzLCBpbmRleCk7XG4gICAgICAgIGlmICghUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICBjbG9uZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH0pXG4gICAgICAubWFwKGYgPT4ge1xuICAgICAgICBpZiAoIWYuZGlzcGxheV9jb250ZXh0KSB7XG4gICAgICAgICAgZi5kaXNwbGF5X2NvbnRleHQgPSBjb21wbGV4RmllbGQuZGlzcGxheV9jb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR1cEhpZGRlbikge1xuICAgICAgICAgIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmV2YWx1YXRlQ29uZGl0aW9uYWxTaG93KGYsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCwgcGF0aCwgZm9ybUdyb3VwQXZhaWxhYmxlLCBjb21wbGV4RmllbGQuaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoZiA9PiBrZWVwRW1wdHkgfHwgUmVhZEZpZWxkc0ZpbHRlclBpcGUua2VlcEZpZWxkKGYpKTtcbiAgfVxufVxuIl19
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2NkLXJlYWQtZmllbGRzLWZpbHRlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9waXBlcy9jb21wbGV4L2NjZC1yZWFkLWZpZWxkcy1maWx0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFLakUsTUFBTSxPQUFPLG9CQUFvQjtJQWdCL0I7O09BRUc7SUFDSyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsTUFBZSxFQUFFLDJCQUFvQztRQUNuRyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFM0QsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4RCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztZQUM3RixPQUFPLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQyxNQUFN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QUM7YUFDbEQ7WUFDRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsMkJBQTJCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN6SDtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLENBQUM7SUFDaEgsQ0FBQzs7QUF6S3VCLGlDQUFZLEdBQUc7SUFDckMsU0FBUztJQUNULElBQUk7SUFDSixFQUFFO0lBQ0YsRUFBRTtDQUNILENBQUM7QUFFc0IsdUNBQWtCLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFFcEcsaUNBQVksR0FBRztJQUNyQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsY0FBYztJQUM1QyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsaUJBQWlCO0NBQ25ELENBQUM7d0ZBZFMsb0JBQW9CO2tGQUFwQixvQkFBb0I7dUZBQXBCLG9CQUFvQjtjQUhoQyxJQUFJO2VBQUM7Z0JBQ0osSUFBSSxFQUFFLHFCQUFxQjthQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBwbGFpblRvQ2xhc3NGcm9tRXhpc3QgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBTaG93Q29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb25kaXRpb25hbC1zaG93L2RvbWFpbi9jb25kaXRpb25hbC1zaG93Lm1vZGVsJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWVsZHMvZmllbGRzLnV0aWxzJztcblxuQFBpcGUoe1xuICBuYW1lOiAnY2NkUmVhZEZpZWxkc0ZpbHRlcidcbn0pXG5leHBvcnQgY2xhc3MgUmVhZEZpZWxkc0ZpbHRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFTVBUWV9WQUxVRVMgPSBbXG4gICAgdW5kZWZpbmVkLFxuICAgIG51bGwsXG4gICAgJycsXG4gICAge31cbiAgXTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBTFdBWVNfTlVMTF9GSUVMRFMgPSBbJ0Nhc2VQYXltZW50SGlzdG9yeVZpZXdlcicsICdXYXlzVG9QYXknLCAnRmxhZ0xhdW5jaGVyJywgJ0NvbXBvbmVudExhdW5jaGVyJ107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTkVTVEVEX1RZUEVTID0ge1xuICAgIENvbXBsZXg6IFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzVmFsaWRDb21wbGV4LFxuICAgIENvbGxlY3Rpb246IFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzVmFsaWRDb2xsZWN0aW9uXG4gIH07XG5cbiAgLyoqXG4gICAqIENvbXBsZXggdHlwZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbiBzaW1wbGUgZmllbGQgZGVzY2VuZGFudCB3aXRoIGEgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBpc1ZhbGlkQ29tcGxleChmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZXM/OiBvYmplY3QsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdD86IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHZhbHVlcyA9IHZhbHVlcyB8fCB7fTtcbiAgICBjb25zdCB0eXBlID0gZmllbGQuZmllbGRfdHlwZTtcbiAgICBjb25zdCB2YWx1ZSA9IFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmdldFZhbHVlKGZpZWxkLCB2YWx1ZXMpO1xuXG4gICAgY29uc3QgaGFzQ2hpbGRyZW5XaXRoVmFsdWUgPSB0eXBlLmNvbXBsZXhfZmllbGRzLmZpbmQoZiA9PiB7XG4gICAgICBjb25zdCB3aWxsS2VlcCA9IFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmtlZXBGaWVsZChmLCB2YWx1ZSwgdHJ1ZSwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0KTtcbiAgICAgIHJldHVybiB3aWxsS2VlcCAmJiBSZWFkRmllbGRzRmlsdGVyUGlwZS5ldmFsdWF0ZUNvbmRpdGlvbmFsU2hvdyhmLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QpLmhpZGRlbiAhPT0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiAhIWhhc0NoaWxkcmVuV2l0aFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWxpZENvbGxlY3Rpb24oZmllbGQ6IENhc2VGaWVsZCwgdmFsdWVzPzogb2JqZWN0LCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3Q/OiBvYmplY3QpOiBib29sZWFuIHtcbiAgICAvLyBpZiBmaWVsZCBpcyBjb2xsZWN0aW9uIGFuZCBpdCBoYXMgY29tcGxleC9jb2xsZWN0aW9uIGNoaWxkIGZpZWxkOyBwYXJlbnQgZmllbGQgZG9lc250IGhhdmUgdmFsdWUgZGVmaW5lZFxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgJiYgdmFsdWVzICYmIHZhbHVlcy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5pZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBpc05vdEVtcHR5ID0gQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgJiYgZmllbGQudmFsdWUubGVuZ3RoID4gMDtcbiAgICBpZiAoaXNOb3RFbXB0eSAmJiBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpIHtcbiAgICAgIHJldHVybiAhIWZpZWxkLnZhbHVlLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhGaWVsZCA9IHBsYWluVG9DbGFzc0Zyb21FeGlzdChuZXcgQ2FzZUZpZWxkKCksIHtcbiAgICAgICAgICBpZDogZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuaWQsXG4gICAgICAgICAgZmllbGRfdHlwZTogZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUsXG4gICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgbGFiZWw6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNWYWxpZENvbXBsZXgoY29tcGxleEZpZWxkLCB1bmRlZmluZWQsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzTm90RW1wdHk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc0VtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gUmVhZEZpZWxkc0ZpbHRlclBpcGUuRU1QVFlfVkFMVUVTLmluZGV4T2YodmFsdWUpICE9PSAtMVxuICAgICAgfHwgdmFsdWUubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNDb21wb3VuZChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLk5FU1RFRF9UWVBFU1tmaWVsZC5maWVsZF90eXBlLnR5cGVdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWxpZENvbXBvdW5kKGZpZWxkOiBDYXNlRmllbGQsIHZhbHVlPzogb2JqZWN0LCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3Q/OiBvYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNDb21wb3VuZChmaWVsZClcbiAgICAgICAgICAgICYmIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLk5FU1RFRF9UWVBFU1tmaWVsZC5maWVsZF90eXBlLnR5cGVdKGZpZWxkLCB2YWx1ZSwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGtlZXBGaWVsZChmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZT86IG9iamVjdCwgaWdub3JlTGFiZWxzID0gZmFsc2UsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdD86IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIC8vIFdlIHNob3VsZG4ndCBkaXRjaCBsYWJlbHMuXG4gICAgaWYgKCFpZ25vcmVMYWJlbHMgJiYgZmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnTGFiZWwnICYmIChmaWVsZC5sYWJlbCB8fCAnJykubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIFdlIGFsc28gc2hvdWxkbid0IGRpdGNoIGZpZWxkcyB0aGF0IHdpbGwgYWx3YXlzIGNvbWUgYmFjayB3aXRoIGEgbnVsbCB2YWx1ZS5cbiAgICBpZiAodGhpcy5BTFdBWVNfTlVMTF9GSUVMRFMuaW5kZXhPZihmaWVsZC5maWVsZF90eXBlLnR5cGUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSB8fCB7fTtcblxuICAgIGlmIChSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0NvbXBvdW5kKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzVmFsaWRDb21wb3VuZChmaWVsZCwgdmFsdWUsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0VtcHR5KGZpZWxkLnZhbHVlKVxuICAgICAgICAgICAgICB8fCAhUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNFbXB0eSh2YWx1ZVtmaWVsZC5pZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VmFsdWUoZmllbGQ6IENhc2VGaWVsZCwgdmFsdWVzOiBhbnksIGluZGV4PzogbnVtYmVyKTogYW55IHtcbiAgICBpZiAoUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNFbXB0eShmaWVsZC52YWx1ZSkpIHtcbiAgICAgIGxldCB2YWx1ZTogYW55O1xuICAgICAgaWYgKGluZGV4ID49IDAgKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVzW2luZGV4XS52YWx1ZVtmaWVsZC5pZF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlc1tmaWVsZC5pZF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZXZhbHVhdGVDb25kaXRpb25hbFNob3coZmllbGQ6IENhc2VGaWVsZCwgZm9ybVZhbHVlOiBhbnksIHBhdGg/OiBzdHJpbmcsXG4gICAgZm9ybUdyb3VwQXZhaWxhYmxlPzogYm9vbGVhbiwgZmllbGRJZD86IHN0cmluZyk6IENhc2VGaWVsZCB7XG4gICAgaWYgKGZpZWxkLmRpc3BsYXlfY29udGV4dCA9PT0gJ0hJRERFTicpIHtcbiAgICAgIGZpZWxkLmhpZGRlbiA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5zaG93X2NvbmRpdGlvbikge1xuICAgICAgbGV0IGNvbmQ6IFNob3dDb25kaXRpb247XG4gICAgICBpZiAoZmllbGRJZCAmJiBmaWVsZC5zaG93X2NvbmRpdGlvbi5pbmRleE9mKGAke2ZpZWxkSWR9LmApID4gLTEgJiYgIWZvcm1Hcm91cEF2YWlsYWJsZSAmJiAhIU9iamVjdC5rZXlzKGZvcm1WYWx1ZSkubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IGAke2ZpZWxkSWR9LmA7XG4gICAgICAgIGNvbnN0IHNlYXJjaFJlZ0V4cCA9IG5ldyBSZWdFeHAoc2VhcmNoLCAnZycpO1xuICAgICAgICBjb25zdCByZXBsYWNlV2l0aCA9ICcnO1xuICAgICAgICBjb25kID0gU2hvd0NvbmRpdGlvbi5nZXRJbnN0YW5jZShmaWVsZC5zaG93X2NvbmRpdGlvbi5yZXBsYWNlKHNlYXJjaFJlZ0V4cCwgcmVwbGFjZVdpdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmQgPSBTaG93Q29uZGl0aW9uLmdldEluc3RhbmNlKGZpZWxkLnNob3dfY29uZGl0aW9uKTtcbiAgICAgIH1cbiAgICAgIGZpZWxkLmhpZGRlbiA9ICFjb25kLm1hdGNoKGZvcm1WYWx1ZSwgcGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkLmhpZGRlbiA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIG91dCBmaWVsZHMgaGF2aW5nIG5vIGRhdGEgdG8gZGlzcGxheSBhbmQgaGFybW9uaXNlIGZpZWxkIHZhbHVlcyBjb21pbmcgcGFyZW50J3MgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgIGNvbXBsZXhGaWVsZDogQ2FzZUZpZWxkLCBrZWVwRW1wdHk/OiBib29sZWFuLCBpbmRleD86IG51bWJlcixcbiAgICBzZXR1cEhpZGRlbiA9IGZhbHNlLCBmb3JtR3JvdXA/OiBGb3JtR3JvdXAgfCBBYnN0cmFjdENvbnRyb2wsIHBhdGg/OiBzdHJpbmcsIGlkUHJlZml4Pzogc3RyaW5nKTogQ2FzZUZpZWxkW10ge1xuICAgIGlmICghY29tcGxleEZpZWxkIHx8ICFjb21wbGV4RmllbGQuZmllbGRfdHlwZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkcyA9IGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzIHx8IFtdO1xuICAgIGNvbnN0IHZhbHVlcyA9IGNvbXBsZXhGaWVsZC52YWx1ZSB8fCB7fTtcbiAgICBsZXQgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0OiBhbnkgPSB2YWx1ZXM7XG4gICAgbGV0IGZvcm1Hcm91cEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCA9IGZvcm1Hcm91cC5wYXJlbnQuZ2V0UmF3VmFsdWUoKS5kYXRhO1xuICAgICAgZm9ybUdyb3VwQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChpZFByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChpZFByZWZpeCAhPT0gJycpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZElkID0gaWRQcmVmaXguc3Vic3RyaW5nKDAsIGlkUHJlZml4LmluZGV4T2YoJ18nKSk7XG4gICAgICAgICAgaWYgKGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdFtmaWVsZElkXSkge1xuICAgICAgICAgICAgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0ID0gdmFsdWVzO1xuICAgICAgICAgICAgZm9ybUdyb3VwQXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCA9IE9iamVjdC5hc3NpZ24oY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0LCB2YWx1ZXMpO1xuICAgICAgICAgIGZvcm1Hcm91cEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLm1hcChmID0+IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBGaWVsZHNVdGlscy5jbG9uZU9iamVjdChmKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBSZWFkRmllbGRzRmlsdGVyUGlwZS5nZXRWYWx1ZShmLCB2YWx1ZXMsIGluZGV4KTtcbiAgICAgICAgaWYgKCFSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgIGNsb25lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgfSlcbiAgICAgIC5tYXAoZiA9PiB7XG4gICAgICAgIGlmICghZi5kaXNwbGF5X2NvbnRleHQpIHtcbiAgICAgICAgICBmLmRpc3BsYXlfY29udGV4dCA9IGNvbXBsZXhGaWVsZC5kaXNwbGF5X2NvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHVwSGlkZGVuKSB7XG4gICAgICAgICAgUmVhZEZpZWxkc0ZpbHRlclBpcGUuZXZhbHVhdGVDb25kaXRpb25hbFNob3coZiwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0LCBwYXRoLCBmb3JtR3JvdXBBdmFpbGFibGUsIGNvbXBsZXhGaWVsZC5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihmID0+IGtlZXBFbXB0eSB8fCBSZWFkRmllbGRzRmlsdGVyUGlwZS5rZWVwRmllbGQoZiwgdW5kZWZpbmVkLCBmYWxzZSwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0KSk7XG4gIH1cbn1cbiJdfQ==