chrv-components 1.8.3 → 1.8.5

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.
Binary file
@@ -34,10 +34,6 @@ export class ChrFormComponent {
34
34
  this.values = {};
35
35
  this.controlTypes = {};
36
36
  this.flattenedControls = [];
37
- this.updateValueAndValidity = () => {
38
- this.form.markAsDirty();
39
- this.form.updateValueAndValidity({ emitEvent: true });
40
- };
41
37
  this.initialized = false;
42
38
  this.initModel = () => {
43
39
  if (this.model == null)
@@ -61,9 +57,9 @@ export class ChrFormComponent {
61
57
  this.controlTypes[control.name] = control.type;
62
58
  }
63
59
  this.form = this.builder.group(formControls);
60
+ this.valid = this.form.valid;
64
61
  };
65
62
  this.initListeners = () => {
66
- // Listen for changes and update the model
67
63
  this.form.valueChanges.subscribe((values) => {
68
64
  for (const key in values) {
69
65
  if (values.hasOwnProperty(key)) {
@@ -96,6 +92,7 @@ export class ChrFormComponent {
96
92
  this.setValue(key, value);
97
93
  else
98
94
  this.setValue(key, this.datePipe.transform(value, dateFormat));
95
+ this.form.get(key)?.updateValueAndValidity();
99
96
  this.detectChanges();
100
97
  };
101
98
  this.patch = (model, dateFormat = null) => {
@@ -104,6 +101,17 @@ export class ChrFormComponent {
104
101
  }
105
102
  this.detectChanges();
106
103
  };
104
+ this.checkValidity = () => {
105
+ for (const control of this.flattenedControls) {
106
+ this.form.get(control.name)?.updateValueAndValidity();
107
+ }
108
+ this.valid = this.form.valid;
109
+ this.detectChanges();
110
+ };
111
+ this.updateValueAndValidity = () => {
112
+ this.form.markAsDirty();
113
+ this.form.updateValueAndValidity({ emitEvent: true });
114
+ };
107
115
  this.setValue = (key, value) => {
108
116
  this.form.get(key)?.patchValue(value);
109
117
  this.values[key] = value;
@@ -125,10 +133,6 @@ export class ChrFormComponent {
125
133
  this.transformDate = (value, format) => {
126
134
  return this.datePipe.transform(value, format);
127
135
  };
128
- this.reset = () => {
129
- this.form.reset();
130
- this.detectChanges();
131
- };
132
136
  this.resize = (textArea) => {
133
137
  const initialHeight = textArea.style.height;
134
138
  textArea.style.height = initialHeight;
@@ -261,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
261
265
  }], tabDisplay: [{
262
266
  type: Input
263
267
  }] } });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWix1QkFBdUIsR0FNdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFHTixVQUFVLEVBQ1YsV0FBVyxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQ04sUUFBUSxFQUNSLFlBQVksRUFDWix5QkFBeUIsR0FDekIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNOLElBQUksRUFDSixzQkFBc0IsR0FDdEIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FB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O2dCQUVFLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFHRSxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRWaWV3RW5jYXBzdWxhdGlvbixcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdE9uQ2hhbmdlcyxcblx0U2ltcGxlQ2hhbmdlcyxcblx0T25Jbml0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVmFsaWRhdG9yRm4sIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuXHRGb3JtQnVpbGRlcixcblx0Rm9ybUdyb3VwLFxuXHRWYWxpZGF0b3JzLFxuXHRGb3JtQ29udHJvbCxcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBNYXRFcnJvciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2ljb25cIjtcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xuaW1wb3J0IHsgQ2hyU2VhcmNoU2VsZWN0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2Noci1zZWFyY2gtc2VsZWN0L2Noci1zZWFyY2gtc2VsZWN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlXCI7XG5pbXBvcnQge1xuXHREYXRlUGlwZSxcblx0Q29tbW9uTW9kdWxlLFxuXHREQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlXCI7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcbmltcG9ydCB7XG5cdHR5cGUsXG5cdFR5cGVWYWxpZGF0b3JEaXJlY3RpdmUsXG59IGZyb20gXCIuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3JcIjtcbmltcG9ydCB7IGRlY2ltYWwgfSBmcm9tIFwiLi4vbW9kZWxzL2Noci12YWxpZGF0b3JzL2RlY2ltYWwtdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBtYXhEYXRlIH0gZnJvbSBcIi4uL21vZGVscy9jaHItdmFsaWRhdG9ycy9tYXgtZGF0ZS12YWxpZGF0b3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2xDb2xsZWN0aW9uIHtcblx0W2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2w7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlYXJjaEZpbHRlciB7XG5cdGRpc3BsYXk6IHN0cmluZztcblx0Y2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0dG9vbHRpcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29udHJvbFZhbGlkYXRpb24ge1xuXHRydWxlOiBzdHJpbmc7XG5cdHZhbHVlPzogYW55O1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb250cm9sIHtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0c3Bhbj86IHN0cmluZztcblx0d2lkdGg/OiBcImNvbFwiIHwgXCJyb3dcIjtcblx0Y29sPzogbnVtYmVyO1xuXHRyb3c/OiBudW1iZXI7XG5cdHR5cGU6XG5cdFx0fCBcInRleHRcIlxuXHRcdHwgXCJwYXNzd29yZFwiXG5cdFx0fCBcInRleHRBcmVhXCJcblx0XHR8IFwibnVtYmVyXCJcblx0XHR8IFwiZGF0ZVwiXG5cdFx0fCBcImRhdGV0aW1lXCJcblx0XHR8IFwic2VhcmNoU2VsZWN0XCJcblx0XHR8IFwiY29sb3JcIlxuXHRcdHwgXCJ0b2dnbGVcIjtcblx0dmFsdWU/OiBhbnk7XG5cdGRhdGE/OiBhbnlbXSB8IG51bGw7XG5cdGljb24/OiBzdHJpbmc7XG5cdGljb25DYWxsYmFjaz86IEZ1bmN0aW9uO1xuXHRpY29uQ2FsbGJhY2tEaXNhYmxlZD86IGJvb2xlYW47XG5cdGljb25Ub29sdGlwPzogc3RyaW5nO1xuXHRmbj86IChvYmplY3Q6IGFueSkgPT4gc3RyaW5nO1xuXHRmaWx0ZXJzPzogSVNlYXJjaEZpbHRlcltdO1xuXHR2YWxpZGF0aW9ucz86IElDb250cm9sVmFsaWRhdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2VjdGlvbiB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRjb250cm9sczogSUNvbnRyb2xbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2wge1xuXHRba2V5OiBzdHJpbmddOiBhbnk7XG59XG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiYXBwLWNoci1mb3JtXCIsXG5cdHRlbXBsYXRlVXJsOiBcIi4vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVVcmxzOiBbXG5cdFx0XCIuL2Noci1mb3JtLmNvbXBvbmVudC5zY3NzXCIsXG5cdFx0XCIuLi8uLi8uLi8uLi8uLi90YWlsd2luZGJ1aWxkLmNzc1wiLFxuXHRcdFwiLi9jaHItZm9ybS5jb21wb25lbnQuc2Nzc1wiLFxuXHRdLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbXG5cdFx0UmVhY3RpdmVGb3Jtc01vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRNYXRUb29sdGlwTW9kdWxlLFxuXHRcdE1hdEljb25Nb2R1bGUsXG5cdFx0TWF0U2xpZGVUb2dnbGVNb2R1bGUsXG5cdFx0TWF0RXJyb3IsXG5cdFx0Q2hyU2VhcmNoU2VsZWN0Q29tcG9uZW50LFxuXHRcdE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcblx0XHREYXRlUGlwZSxcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0VHlwZVZhbGlkYXRvckRpcmVjdGl2ZSxcblx0XHRNYXRUYWJzTW9kdWxlLFxuXHRdLFxuXHRwcm92aWRlcnM6IFtcblx0XHREYXRlUGlwZSxcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBEQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxuXHRcdFx0dXNlVmFsdWU6IHsgZGF0ZUZvcm1hdDogXCJzaG9ydERhdGVcIiB9LFxuXHRcdH0sXG5cdF0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbn0pXG5leHBvcnQgY2xhc3MgQ2hyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdEBJbnB1dCgpIHNlY3Rpb25zPzogSUZvcm1TZWN0aW9uW107XG5cdEBJbnB1dCgpIGNvbnRyb2xzPzogSUNvbnRyb2xbXTtcblxuXHRASW5wdXQoKSB2YWxpZD86IGJvb2xlYW47XG5cdEBPdXRwdXQoKSB2YWxpZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG5cdEBJbnB1dCgpIG1vZGVsOiBhbnkgPSBudWxsO1xuXHRAT3V0cHV0KCkgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cblx0QElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuO1xuXHRAT3V0cHV0KCkgdmFsdWVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRASW5wdXQoKSBzdWJtaXQ/OiBGdW5jdGlvbjtcblxuXHRASW5wdXQoKSBjb21wYWN0OiBib29sZWFuID0gZmFsc2U7XG5cblx0QE91dHB1dCgpIGZvcm1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRm9ybUNvbnRyb2w+ID1cblx0XHRuZXcgRXZlbnRFbWl0dGVyPElGb3JtQ29udHJvbD4oKTtcblxuXHRASW5wdXQoKSB0YWJEaXNwbGF5OiBib29sZWFuID0gZmFsc2U7XG5cblx0Zm9ybTogRm9ybUdyb3VwID0gdGhpcy5idWlsZGVyLmdyb3VwKHt9KTtcblxuXHRwcml2YXRlIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXHRwcml2YXRlIGNvbnRyb2xUeXBlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXHRwcml2YXRlIGZsYXR0ZW5lZENvbnRyb2xzOiBJQ29udHJvbFtdID0gW107XG5cblx0dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSA9ICgpID0+IHtcblx0XHR0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcblx0XHR0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcblx0fTtcblxuXHRwdWJsaWMgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuXHRcdHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuXHRcdHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG5cdCkge1xuXHRcdGlmICh0aGlzLmNvbnRyb2xzICE9IG51bGwgJiYgdGhpcy5zZWN0aW9ucyAhPSBudWxsKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIllvdSBjYW4ndCB1c2UgYm90aCBjb250cm9scyBhbmQgc2VjdGlvbnMgaW4gdGhlIHNhbWUgZm9ybVwiXG5cdFx0XHQpO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5mbGF0dGVuZWRDb250cm9scyA9XG5cdFx0XHR0aGlzLnNlY3Rpb25zXG5cdFx0XHRcdD8ubWFwKChzKSA9PiBzLmNvbnRyb2xzKVxuXHRcdFx0XHQuZmxhdCgpXG5cdFx0XHRcdC5jb25jYXQodGhpcy5jb250cm9scyA/PyBbXSkgfHwgW107XG5cdFx0dGhpcy5pbml0TW9kZWwoKTtcblx0XHR0aGlzLmluaXRWYWx1ZXMoKTtcblx0XHR0aGlzLmluaXRDb250cm9scygpO1xuXHRcdHRoaXMuaW5pdExpc3RlbmVycygpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXHR9XG5cblx0aW5pdE1vZGVsID0gKCkgPT4ge1xuXHRcdGlmICh0aGlzLm1vZGVsID09IG51bGwpIHRoaXMubW9kZWwgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoIXRoaXMubW9kZWxbY29udHJvbC5uYW1lXSkgdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdID0gY29udHJvbC52YWx1ZTtcblx0XHR9XG5cdH07XG5cblx0aW5pdFZhbHVlcyA9ICgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5mbGF0dGVuZWRDb250cm9scykge1xuXHRcdFx0aWYgKCF0aGlzLnZhbHVlc1tjb250cm9sLm5hbWVdKVxuXHRcdFx0XHR0aGlzLnZhbHVlc1tjb250cm9sLm5hbWVdID0gdGhpcy50b0lucHV0VmFsdWUoXG5cdFx0XHRcdFx0Y29udHJvbCxcblx0XHRcdFx0XHR0aGlzLm1vZGVsW2NvbnRyb2wubmFtZV1cblx0XHRcdFx0KTtcblx0XHR9XG5cdH07XG5cblx0aW5pdENvbnRyb2xzID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZvcm1Db250cm9scyA9IHt9IGFzIElGb3JtQ29udHJvbENvbGxlY3Rpb247XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcblx0XHRcdGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLl9nZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdGlvbnMpO1xuXHRcdFx0Zm9ybUNvbnRyb2xzW2NvbnRyb2wubmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woXG5cdFx0XHRcdHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0sXG5cdFx0XHRcdHZhbGlkYXRvcnNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmNvbnRyb2xUeXBlc1tjb250cm9sLm5hbWVdID0gY29udHJvbC50eXBlO1xuXHRcdH1cblxuXHRcdHRoaXMuZm9ybSA9IHRoaXMuYnVpbGRlci5ncm91cChmb3JtQ29udHJvbHMpO1xuXHR9O1xuXG5cdGluaXRMaXN0ZW5lcnMgPSAoKSA9PiB7XG5cdFx0Ly8gTGlzdGVuIGZvciBjaGFuZ2VzIGFuZCB1cGRhdGUgdGhlIG1vZGVsXG5cdFx0dGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlcykgPT4ge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG5cdFx0XHRcdGlmICh2YWx1ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdHRoaXMubW9kZWxba2V5XSA9IHZhbHVlc1trZXldO1xuXHRcdFx0XHRcdHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZXNba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy52YWxpZCA9IHRoaXMuZm9ybS52YWxpZDtcblx0XHRcdHRoaXMudmFsaWRDaGFuZ2UuZW1pdCh0aGlzLnZhbGlkKTtcblx0XHRcdHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdH0pO1xuXHR9O1xuXG5cdHZhbHVlID0gKGlucHV0Pzogc3RyaW5nKSA9PiB0aGlzLmdldFZhbHVlKGlucHV0KTtcblxuXHRnZXRWYWx1ZSA9IChpbnB1dD86IHN0cmluZykgPT4ge1xuXHRcdGlmIChpbnB1dCkgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc1tpbnB1dF0/LnZhbHVlO1xuXHRcdHJldHVybiB0aGlzLmZvcm0udmFsdWU7XG5cdH07XG5cblx0aXNWYWxpZCA9IChpbnB1dD86IHN0cmluZykgPT4ge1xuXHRcdGlmIChpbnB1dCkgcmV0dXJuIHRoaXMuZm9ybS5nZXQoaW5wdXQpPy52YWxpZDtcblx0XHRyZXR1cm4gdGhpcy52YWxpZDtcblx0fTtcblxuXHRpc0NvbnRyb2xSZXF1aXJlZCA9IChjb250cm9sOiBJQ29udHJvbCkgPT4ge1xuXHRcdHJldHVybiBjb250cm9sLnZhbGlkYXRpb25zPy5maW5kKCh2KSA9PiB2LnJ1bGUudG9Mb3dlckNhc2UoKSA9PSBcInJlcXVpcmVkXCIpO1xuXHR9O1xuXG5cdHBhdGNoVmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0aWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkgdGhpcy5zZXRWYWx1ZShrZXksIHZhbHVlKTtcblx0XHRlbHNlIHRoaXMuc2V0VmFsdWUoa2V5LCB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgZGF0ZUZvcm1hdCkpO1xuXHRcdHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9O1xuXG5cdHBhdGNoID0gKG1vZGVsOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWwpKSB7XG5cdFx0XHR0aGlzLnBhdGNoVmFsdWUoa2V5LCBtb2RlbFtrZXldLCBkYXRlRm9ybWF0KTtcblx0XHR9XG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdH07XG5cblx0cHJpdmF0ZSBzZXRWYWx1ZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdHRoaXMuZm9ybS5nZXQoa2V5KT8ucGF0Y2hWYWx1ZSh2YWx1ZSk7XG5cdFx0dGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlO1xuXHR9O1xuXG5cdHByaXZhdGUgdG9JbnB1dFZhbHVlID0gKGNvbnRyb2w6IElDb250cm9sLCB2YWx1ZTogYW55IHwgbnVsbCA9IG51bGwpID0+IHtcblx0XHRzd2l0Y2ggKGNvbnRyb2wudHlwZSkge1xuXHRcdFx0Y2FzZSBcImRhdGVcIjpcblx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0PyB0aGlzLnRyYW5zZm9ybURhdGUodmFsdWUsIFwieXl5eS1NTS1kZFwiKVxuXHRcdFx0XHRcdDogdGhpcy50cmFuc2Zvcm1EYXRlKGNvbnRyb2wudmFsdWUsIFwieXl5eS1NTS1kZFwiKTtcblx0XHRcdGNhc2UgXCJkYXRldGltZVwiOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHQ/IHRoaXMudHJhbnNmb3JtRGF0ZSh2YWx1ZSwgXCJ5eXl5LU1NLWRkVEhIOm1tXCIpXG5cdFx0XHRcdFx0OiB0aGlzLnRyYW5zZm9ybURhdGUoY29udHJvbC52YWx1ZSwgXCJ5eXl5LU1NLWRkVEhIOm1tXCIpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIHx8IGNvbnRyb2wudmFsdWU7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgdHJhbnNmb3JtRGF0ZSA9ICh2YWx1ZTogYW55LCBmb3JtYXQ6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgZm9ybWF0KTtcblx0fTtcblxuXHRyZXNldCA9ICgpID0+IHtcblx0XHR0aGlzLmZvcm0ucmVzZXQoKTtcblx0XHR0aGlzLmRldGVjdENoYW5nZXMoKTtcblx0fTtcblxuXHRwdWJsaWMgcmVzaXplID0gKHRleHRBcmVhOiBIVE1MVGV4dEFyZWFFbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgaW5pdGlhbEhlaWdodCA9IHRleHRBcmVhLnN0eWxlLmhlaWdodDtcblx0XHR0ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSBpbml0aWFsSGVpZ2h0O1xuXHRcdHRleHRBcmVhLnN0eWxlLmhlaWdodCA9IFwiXCIgKyB0ZXh0QXJlYS5zY3JvbGxIZWlnaHQgKyBcInB4XCI7XG5cdH07XG5cblx0cHVibGljIGRvU3VibWl0ID0gKCkgPT4ge1xuXHRcdHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0aWYgKHRoaXMudmFsaWQgJiYgdGhpcy5mb3JtLnZhbGlkKSB0aGlzLnN1Ym1pdD8uKHRoaXMuZm9ybS52YWx1ZSk7XG5cdH07XG5cblx0cHJpdmF0ZSBkZXRlY3RDaGFuZ2VzID0gKCkgPT4ge1xuXHRcdHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xuXHRcdHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9O1xuXG5cdHByaXZhdGUgX2dldFZhbGlkYXRvcnMgPSAodmFsaWRhdGlvbnM/OiBJQ29udHJvbFZhbGlkYXRpb25bXSkgPT4ge1xuXHRcdGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcblx0XHRpZiAoIXZhbGlkYXRpb25zKSByZXR1cm4gdmFsaWRhdG9ycztcblx0XHQvL1N3aXRjaCBjYXNlIGJyZWFrcyB0aGUgbW9iaWxlIGFwcCBzbyB3ZSdsbCBkbyBpZiBzdGF0ZW1lbnRzXG5cdFx0Zm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHZhbGlkYXRpb25zKSB7XG5cdFx0XHRjb25zdCBydWxlID0gdmFsaWRhdGlvbi5ydWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1pblwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIHBldGl0ZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbih2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1heFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIGdyYW5kZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heCh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcInJlcXVpcmVkXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZSBjaGFtcHMgZXN0IHJlcXVpcyAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwiZW1haWxcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIGFkcmVzc2UgZW1haWwgbidlc3QgcGFzIHZhbGlkZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwibWlubGVuZ3RoXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSB2YWxldXIgZXN0IHRyb3AgcGV0aXRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwibWF4bGVuZ3RoXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSB2YWxldXIgZXN0IHRyb3AgZ3JhbmRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwidHlwZVwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIG4nZXN0IHBhcyB2YWxpZGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2godHlwZSh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcImRlY2ltYWxcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBgTGUgbm9tYnJlIGRlIGTDqWNpbWFsIG4nZXN0IHBhcyB2YWxpZGUgKG1heDogJHt2YWxpZGF0aW9uLnZhbHVlfSkgIWA7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChkZWNpbWFsKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwibWF4ZGF0ZVwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IGBDZXR0ZSBkYXRlIGVzdCB0cm9wIGdyYW5kZSAhIChtYXg6ICR7dmFsaWRhdGlvbi52YWx1ZX0pICFgO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2gobWF4RGF0ZSh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2YWxpZGF0b3JzO1xuXHR9O1xufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgbWluLWgtNS82IG10LTJcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKm5nSWY9XCJpbml0aWFsaXplZFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFiRGlzcGxheSB8fCAhc2VjdGlvbnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzaW5nbGVUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbnRyb2xzOiBjb250cm9sc31cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYkRpc3BsYXkgJiYgc2VjdGlvbnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWN0aW9uVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntzZWN0aW9uczogc2VjdGlvbnN9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYkRpc3BsYXkgJiYgc2VjdGlvbnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJzVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntzZWN0czogc2VjdGlvbnN9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZm9ybT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RhYnNUZW1wbGF0ZSBsZXQtc2VjdGlvbnM9J3NlY3RzJz5cbiAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgQGZvciAoc2VjdGlvbiBvZiBzZWN0aW9uczsgdHJhY2sgc2VjdGlvbjsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICA8bWF0LXRhYiBbbGFiZWxdPVwic2VjdGlvbi50aXRsZSB8fCAnw4l0YXBlICcgKyAoaW5kZXggKyAxKVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIiBjbGFzcz1cIm10LTRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbXBhY3QgPyAnZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTQnOidncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtMidcIj5cbiAgICAgICAgICBAZm9yIChjdHJsIG9mIHNlY3Rpb24uY29udHJvbHM7IHRyYWNrIGluZGV4OyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldFxuICAgICAgICAgIGxhc3QgPVxuICAgICAgICAgICRsYXN0KVxuICAgICAgICAgIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbnRyb2w6IGN0cmwsIGluZGV4OiBpbmRleCwgbGFzdDogJGxhc3R9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIH1cbiAgICA8L21hdC10YWItZ3JvdXA+XG4gIDwvZmllbGRzZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NpbmdsZVRlbXBsYXRlIGxldC1jb250cm9scz1cImNvbnRyb2xzXCI+XG4gIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIlxuICAgICAgW25nQ2xhc3NdPVwiY29tcGFjdCA/ICdncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtNCc6J2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy0yJ1wiPlxuICAgICAgQGZvciAoY29udHJvbCBvZiBjb250cm9sczsgdHJhY2sgY29udHJvbDsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbDogY29udHJvbCwgaW5kZXg6IGluZGV4LCBsYXN0OiBsYXN0fVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgPC9maWVsZHNldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VjdGlvblRlbXBsYXRlIGxldC1zZWN0aW9ucz0nc2VjdGlvbnMnPlxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgQGZvciAoc2VjdGlvbiBvZiBzZWN0aW9uczsgdHJhY2sgc2VjdGlvbjsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgPGRpdj5cbiAgICAgIEBpZiAoc2VjdGlvbi50aXRsZSkge1xuICAgICAgPGgyIGNsYXNzPVwibWItMiBmb250LWJvbGQgdGV4dC14bCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZVwiPlxuICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICA8L2gyPlxuICAgICAgfVxuICAgICAgPGRpdiAqbmdJZj1cImluaXRpYWxpemVkXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29tcGFjdCA/ICdncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtNCc6J2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy0yJ1wiPlxuICAgICAgICBAZm9yIChjb250cm9sIG9mIHNlY3Rpb24uY29udHJvbHM7IHRyYWNrIGluZGV4OyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldFxuICAgICAgICBsYXN0ID1cbiAgICAgICAgJGxhc3QpXG4gICAgICAgIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbDogY29udHJvbCwgaW5kZXg6IGluZGV4LCBsYXN0OiAkbGFzdH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChpbmRleCAhPSAoc2VjdGlvbnN8fFtdKS5sZW5ndGggLSAxICYmICFjb21wYWN0KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicHktNFwiPlxuICAgICAgICA8aHIgY2xhc3M9XCJcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgfVxuICA8L2ZpZWxkc2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGUgbGV0LWNvbnRyb2w9J2NvbnRyb2wnIGxldC1sYXN0PSdsYXN0JyBsZXQtaW5kZXg9J2luZGV4Jz5cbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGgtbWluIG10LTJcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBbbmdDbGFzc109XCJ7XG4gICAgJ3NtOmNvbC1zcGFuLTInOiAoY29udHJvbC53aWR0aCA9PSAncm93JyAmJiAhY29tcGFjdCkgfHwgY29udHJvbC50eXBlPT0ndGV4dEFyZWEnICYmIGNvbXBhY3QgJiYgY29udHJvbC53aWR0aCAhPSAncm93JyxcbiAgICAnc206Y29sLXNwYW4tNCc6IGNvbnRyb2wud2lkdGggPT0ncm93JyAmJiBjb21wYWN0LFxuICAgIH1cIj5cbiAgICBAaWYgKGNvbnRyb2wudHlwZT09J3NlYXJjaFNlbGVjdCcpIHtcbiAgICA8ZGl2IGFwcC1jaHItc2VhcmNoLXNlbGVjdCBjbGFzcz1cInJlbGF0aXZlIGlucHV0IHotMCB3LWZ1bGxcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiXG4gICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgW2RhdGFdPVwiY29udHJvbC5kYXRhIHx8IFtdXCIgW2Rpc3BsYXldPVwiY29udHJvbC5mbiFcIiBbbmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgW2ZpbHRlcnNdPVwiY29udHJvbC5maWx0ZXJzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgYWJzb2x1dGUgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMFwiIFtmb3JdPVwiY29udHJvbC5uYW1lXCI+e3tcbiAgICAgICAgY29udHJvbC5sYWJlbFxuICAgICAgICB9fVxuICAgICAgICBAaWYgKGlzQ29udHJvbFJlcXVpcmVkKGNvbnRyb2wpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICA6XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgY29udHJvbC52YWxpZGF0aW9uczsgdHJhY2sgdmFsaWRhdGlvbikge1xuICAgICAgICBAaWYgKFxuICAgICAgICBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiZcbiAgICAgICAgZm9ybS5oYXNFcnJvcih2YWxpZGF0aW9uLnJ1bGUudG9Mb3dlckNhc2UoKSwgY29udHJvbC5uYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cInRleHQtcmVkLTUwMCBkYXJrOnRleHQtcmVkLTgwMFwiPnt7IHZhbGlkYXRpb24uZGlzcGxheSB9fTwvbWF0LWVycm9yPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB6LTAgdy1mdWxsIGdyb3VwL2lucHV0cyBjb250ZW50XCI+XG4gICAgICA8IS0tIEhlcmUgd2Ugd2lsbCAqbmdJZiBlYWNoIHR5cGUgb2YgaW5wdXQgY2F1c2UgaXQncyB0aGUgY2xlYW5lc3Qgd2F5IEkgY2FuIGltYWdpbmUtLT5cbiAgICAgIDwhLS1URVhULS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAndGV4dCcpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cInRleHRcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIFt2YWx1ZV09XCJtb2RlbD8uW2NvbnRyb2wubmFtZV0gfHwgY29udHJvbC52YWx1ZSB8fCAnJ1wiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yLjUgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tUEFTU1dPUkQtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdwYXNzd29yZCcpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cInBhc3N3b3JkXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMi41IHB4LTAgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLVRFWFQgQVJFQS0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3RleHRBcmVhJykge1xuICAgICAgPHRleHRhcmVhICN0ZXh0QXJlYSBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgICAoaW5wdXQpPVwicmVzaXplKHRleHRBcmVhKVwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJuby1zY3JvbGxiYXIgaW5wdXQgIXJlc2l6ZS1ub25lIGhlaWdodC1ub3JtYWxpemVkIGJsb2NrIHB5LTIgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiPjwvdGV4dGFyZWE+XG4gICAgICB9XG4gICAgICA8IS0tTlVNQkVSLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAnbnVtYmVyJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgcGxhY2Vob2xkZXI9XCIgXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMi41IHB4LTAgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLURBVEUtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdkYXRlJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwiZGF0ZVwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIgcHgtMCB3LWZ1bGwgaGVpZ2h0LW5vcm1hbGl6ZWQgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAnZGF0ZXRpbWUnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIgcHgtMCB3LWZ1bGwgaGVpZ2h0LW5vcm1hbGl6ZWQgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tQ09MT1ItLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdjb2xvcicpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cImNvbG9yXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiIHN0eWxlPVwiaGVpZ2h0OiA0MnB4O1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMS41IG0tMCBweC0wIHctZnVsbCBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICd0b2dnbGUnKXtcbiAgICAgIDxpbnB1dCAjdG9nZ2xlIHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiaGlkZGVuIGNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIiAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHRvZ2dsZS13cmFwcGVyIGJsb2NrIGlucHV0IGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMzAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCI+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInRvZ2dsZT8uY2xpY2soKVwiIGNsYXNzPVwicmVsYXRpdmUgYmxvY2sgaW5wdXQgdG9nZ2xlXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSAhPSAnc2VhcmNoU2VsZWN0Jykge1xuICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgYWJzb2x1dGUgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMFwiIFtmb3JdPVwiY29udHJvbC5uYW1lXCI+e3tcbiAgICAgICAgY29udHJvbC5sYWJlbFxuICAgICAgICB9fVxuICAgICAgICBAaWYoY29udHJvbC5sYWJlbCAmJiBjb250cm9sLmxhYmVsICE9ICcnICYmIGNvbnRyb2wubGFiZWwgIT0gJyAnKXtcbiAgICAgICAgQGlmIChpc0NvbnRyb2xSZXF1aXJlZChjb250cm9sKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgY29udHJvbC52YWxpZGF0aW9uczsgdHJhY2sgdmFsaWRhdGlvbikge1xuICAgICAgICBAaWYgKFxuICAgICAgICBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiZcbiAgICAgICAgZm9ybS5oYXNFcnJvcih2YWxpZGF0aW9uLnJ1bGUudG9Mb3dlckNhc2UoKSwgY29udHJvbC5uYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cInRleHQtcmVkLTUwMCBkYXJrOnRleHQtcmVkLTgwMFwiPnt7IHZhbGlkYXRpb24uZGlzcGxheSB9fTwvbWF0LWVycm9yPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRyb2wuaWNvbiAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIDxzcGFuXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbnRyb2wuaWNvbkNhbGxiYWNrRGlzYWJsZWQgPyAndGV4dC1ncmF5LTQwMCBkYXJrOnRleHQtZ3JheS01MDAnOid0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSdcIlxuICAgICAgICBjbGFzcz1cImFic29sdXRlIHAtMi41IGJvdHRvbS0wIHJpZ2h0LTBcIiBbbWF0VG9vbHRpcF09XCJjb250cm9sLmljb25Ub29sdGlwIHx8ICcnXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAoY2xpY2spPVwiIWNvbnRyb2wuaWNvbkNhbGxiYWNrRGlzYWJsZWQgJiYgY29udHJvbC5pY29uQ2FsbGJhY2s/Lihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnZhbHVlKVwiPjxtYXQtaWNvblxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpbnB1dCBqdXN0aWZ5LWNlbnRlciBhbGlnbi1taWRkbGUgaXRlbXMtY2VudGVyIGNvbnRlbnQtY2VudGVyIHRleHQtbGdcIj57e2NvbnRyb2wuaWNvbn19PC9tYXQtaWNvbj48L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgQGlmIChjb250cm9sLnNwYW4pIHtcbiAgICA8c3BhblxuICAgICAgW25nQ2xhc3NdPVwiIWZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzIHx8ICFmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgPyAndGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS0zMDAnIDogJyF0ZXh0LXJlZC01MDAgZGFyazohdGV4dC1yZWQtODAwJ1wiXG4gICAgICBjbGFzcz1cImgtMCB0ZXh0LXhzXCI+e3sgY29udHJvbC5zcGFuXG4gICAgICB9fTwvc3Bhbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWix1QkFBdUIsR0FNdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFHTixVQUFVLEVBQ1YsV0FBVyxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQ04sUUFBUSxFQUNSLFlBQVksRUFDWix5QkFBeUIsR0FDekIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNOLElBQUksRUFDSixzQkFBc0IsR0FDdEIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FB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RSx5QkFBeUI7NEJBQ2xDLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUU7eUJBQ3JDO3FCQUNELG1CQUNnQix1QkFBdUIsQ0FBQyxPQUFPO3VJQUd2QyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUVFLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFHRSxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRWaWV3RW5jYXBzdWxhdGlvbixcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdE9uQ2hhbmdlcyxcblx0U2ltcGxlQ2hhbmdlcyxcblx0T25Jbml0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVmFsaWRhdG9yRm4sIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuXHRGb3JtQnVpbGRlcixcblx0Rm9ybUdyb3VwLFxuXHRWYWxpZGF0b3JzLFxuXHRGb3JtQ29udHJvbCxcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBNYXRFcnJvciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2ljb25cIjtcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xuaW1wb3J0IHsgQ2hyU2VhcmNoU2VsZWN0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2Noci1zZWFyY2gtc2VsZWN0L2Noci1zZWFyY2gtc2VsZWN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlXCI7XG5pbXBvcnQge1xuXHREYXRlUGlwZSxcblx0Q29tbW9uTW9kdWxlLFxuXHREQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlXCI7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcbmltcG9ydCB7XG5cdHR5cGUsXG5cdFR5cGVWYWxpZGF0b3JEaXJlY3RpdmUsXG59IGZyb20gXCIuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3JcIjtcbmltcG9ydCB7IGRlY2ltYWwgfSBmcm9tIFwiLi4vbW9kZWxzL2Noci12YWxpZGF0b3JzL2RlY2ltYWwtdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBtYXhEYXRlIH0gZnJvbSBcIi4uL21vZGVscy9jaHItdmFsaWRhdG9ycy9tYXgtZGF0ZS12YWxpZGF0b3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2xDb2xsZWN0aW9uIHtcblx0W2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2w7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlYXJjaEZpbHRlciB7XG5cdGRpc3BsYXk6IHN0cmluZztcblx0Y2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0dG9vbHRpcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29udHJvbFZhbGlkYXRpb24ge1xuXHRydWxlOiBzdHJpbmc7XG5cdHZhbHVlPzogYW55O1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb250cm9sIHtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0c3Bhbj86IHN0cmluZztcblx0d2lkdGg/OiBcImNvbFwiIHwgXCJyb3dcIjtcblx0Y29sPzogbnVtYmVyO1xuXHRyb3c/OiBudW1iZXI7XG5cdHR5cGU6XG5cdFx0fCBcInRleHRcIlxuXHRcdHwgXCJwYXNzd29yZFwiXG5cdFx0fCBcInRleHRBcmVhXCJcblx0XHR8IFwibnVtYmVyXCJcblx0XHR8IFwiZGF0ZVwiXG5cdFx0fCBcImRhdGV0aW1lXCJcblx0XHR8IFwic2VhcmNoU2VsZWN0XCJcblx0XHR8IFwiY29sb3JcIlxuXHRcdHwgXCJ0b2dnbGVcIjtcblx0dmFsdWU/OiBhbnk7XG5cdGRhdGE/OiBhbnlbXSB8IG51bGw7XG5cdGljb24/OiBzdHJpbmc7XG5cdGljb25DYWxsYmFjaz86IEZ1bmN0aW9uO1xuXHRpY29uQ2FsbGJhY2tEaXNhYmxlZD86IGJvb2xlYW47XG5cdGljb25Ub29sdGlwPzogc3RyaW5nO1xuXHRmbj86IChvYmplY3Q6IGFueSkgPT4gc3RyaW5nO1xuXHRmaWx0ZXJzPzogSVNlYXJjaEZpbHRlcltdO1xuXHR2YWxpZGF0aW9ucz86IElDb250cm9sVmFsaWRhdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2VjdGlvbiB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRjb250cm9sczogSUNvbnRyb2xbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2wge1xuXHRba2V5OiBzdHJpbmddOiBhbnk7XG59XG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiYXBwLWNoci1mb3JtXCIsXG5cdHRlbXBsYXRlVXJsOiBcIi4vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVVcmxzOiBbXG5cdFx0XCIuL2Noci1mb3JtLmNvbXBvbmVudC5zY3NzXCIsXG5cdFx0XCIuLi8uLi8uLi8uLi8uLi90YWlsd2luZGJ1aWxkLmNzc1wiLFxuXHRcdFwiLi9jaHItZm9ybS5jb21wb25lbnQuc2Nzc1wiLFxuXHRdLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbXG5cdFx0UmVhY3RpdmVGb3Jtc01vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRNYXRUb29sdGlwTW9kdWxlLFxuXHRcdE1hdEljb25Nb2R1bGUsXG5cdFx0TWF0U2xpZGVUb2dnbGVNb2R1bGUsXG5cdFx0TWF0RXJyb3IsXG5cdFx0Q2hyU2VhcmNoU2VsZWN0Q29tcG9uZW50LFxuXHRcdE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcblx0XHREYXRlUGlwZSxcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0VHlwZVZhbGlkYXRvckRpcmVjdGl2ZSxcblx0XHRNYXRUYWJzTW9kdWxlLFxuXHRdLFxuXHRwcm92aWRlcnM6IFtcblx0XHREYXRlUGlwZSxcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBEQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxuXHRcdFx0dXNlVmFsdWU6IHsgZGF0ZUZvcm1hdDogXCJzaG9ydERhdGVcIiB9LFxuXHRcdH0sXG5cdF0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbn0pXG5leHBvcnQgY2xhc3MgQ2hyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdEBJbnB1dCgpIHNlY3Rpb25zPzogSUZvcm1TZWN0aW9uW107XG5cdEBJbnB1dCgpIGNvbnRyb2xzPzogSUNvbnRyb2xbXTtcblxuXHRASW5wdXQoKSB2YWxpZD86IGJvb2xlYW47XG5cdEBPdXRwdXQoKSB2YWxpZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG5cdEBJbnB1dCgpIG1vZGVsOiBhbnkgPSBudWxsO1xuXHRAT3V0cHV0KCkgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cblx0QElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuO1xuXHRAT3V0cHV0KCkgdmFsdWVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRASW5wdXQoKSBzdWJtaXQ/OiBGdW5jdGlvbjtcblxuXHRASW5wdXQoKSBjb21wYWN0OiBib29sZWFuID0gZmFsc2U7XG5cblx0QE91dHB1dCgpIGZvcm1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRm9ybUNvbnRyb2w+ID1cblx0XHRuZXcgRXZlbnRFbWl0dGVyPElGb3JtQ29udHJvbD4oKTtcblxuXHRASW5wdXQoKSB0YWJEaXNwbGF5OiBib29sZWFuID0gZmFsc2U7XG5cblx0Zm9ybTogRm9ybUdyb3VwID0gdGhpcy5idWlsZGVyLmdyb3VwKHt9KTtcblxuXHRwcml2YXRlIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXHRwcml2YXRlIGNvbnRyb2xUeXBlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXHRwcml2YXRlIGZsYXR0ZW5lZENvbnRyb2xzOiBJQ29udHJvbFtdID0gW107XG5cblx0cHVibGljIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBidWlsZGVyOiBGb3JtQnVpbGRlcixcblx0XHRwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcblx0XHRwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxuXHQpIHtcblx0XHRpZiAodGhpcy5jb250cm9scyAhPSBudWxsICYmIHRoaXMuc2VjdGlvbnMgIT0gbnVsbClcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJZb3UgY2FuJ3QgdXNlIGJvdGggY29udHJvbHMgYW5kIHNlY3Rpb25zIGluIHRoZSBzYW1lIGZvcm1cIlxuXHRcdFx0KTtcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuZmxhdHRlbmVkQ29udHJvbHMgPVxuXHRcdFx0dGhpcy5zZWN0aW9uc1xuXHRcdFx0XHQ/Lm1hcCgocykgPT4gcy5jb250cm9scylcblx0XHRcdFx0LmZsYXQoKVxuXHRcdFx0XHQuY29uY2F0KHRoaXMuY29udHJvbHMgPz8gW10pIHx8IFtdO1xuXHRcdHRoaXMuaW5pdE1vZGVsKCk7XG5cdFx0dGhpcy5pbml0VmFsdWVzKCk7XG5cdFx0dGhpcy5pbml0Q29udHJvbHMoKTtcblx0XHR0aGlzLmluaXRMaXN0ZW5lcnMoKTtcblx0XHR0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgaW5pdE1vZGVsID0gKCkgPT4ge1xuXHRcdGlmICh0aGlzLm1vZGVsID09IG51bGwpIHRoaXMubW9kZWwgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoIXRoaXMubW9kZWxbY29udHJvbC5uYW1lXSkgdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdID0gY29udHJvbC52YWx1ZTtcblx0XHR9XG5cdH07XG5cblx0cHJpdmF0ZSBpbml0VmFsdWVzID0gKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoIXRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0pXG5cdFx0XHRcdHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0gPSB0aGlzLnRvSW5wdXRWYWx1ZShcblx0XHRcdFx0XHRjb250cm9sLFxuXHRcdFx0XHRcdHRoaXMubW9kZWxbY29udHJvbC5uYW1lXVxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIGluaXRDb250cm9scyA9ICgpID0+IHtcblx0XHRjb25zdCBmb3JtQ29udHJvbHMgPSB7fSBhcyBJRm9ybUNvbnRyb2xDb2xsZWN0aW9uO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5fZ2V0VmFsaWRhdG9ycyhjb250cm9sLnZhbGlkYXRpb25zKTtcblx0XHRcdGZvcm1Db250cm9sc1tjb250cm9sLm5hbWVdID0gbmV3IEZvcm1Db250cm9sKFxuXHRcdFx0XHR0aGlzLnZhbHVlc1tjb250cm9sLm5hbWVdLFxuXHRcdFx0XHR2YWxpZGF0b3JzXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5jb250cm9sVHlwZXNbY29udHJvbC5uYW1lXSA9IGNvbnRyb2wudHlwZTtcblx0XHR9XG5cblx0XHR0aGlzLmZvcm0gPSB0aGlzLmJ1aWxkZXIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcblx0XHR0aGlzLnZhbGlkID0gdGhpcy5mb3JtLnZhbGlkO1xuXHR9O1xuXG5cdHByaXZhdGUgaW5pdExpc3RlbmVycyA9ICgpID0+IHtcblx0XHR0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0aWYgKHZhbHVlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0dGhpcy5tb2RlbFtrZXldID0gdmFsdWVzW2tleV07XG5cdFx0XHRcdFx0dGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlc1trZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnZhbGlkID0gdGhpcy5mb3JtLnZhbGlkO1xuXHRcdFx0dGhpcy52YWxpZENoYW5nZS5lbWl0KHRoaXMudmFsaWQpO1xuXHRcdFx0dGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xuXHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0fSk7XG5cdH07XG5cblx0dmFsdWUgPSAoaW5wdXQ/OiBzdHJpbmcpID0+IHRoaXMuZ2V0VmFsdWUoaW5wdXQpO1xuXG5cdGdldFZhbHVlID0gKGlucHV0Pzogc3RyaW5nKSA9PiB7XG5cdFx0aWYgKGlucHV0KSByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzW2lucHV0XT8udmFsdWU7XG5cdFx0cmV0dXJuIHRoaXMuZm9ybS52YWx1ZTtcblx0fTtcblxuXHRpc1ZhbGlkID0gKGlucHV0Pzogc3RyaW5nKSA9PiB7XG5cdFx0aWYgKGlucHV0KSByZXR1cm4gdGhpcy5mb3JtLmdldChpbnB1dCk/LnZhbGlkO1xuXHRcdHJldHVybiB0aGlzLnZhbGlkO1xuXHR9O1xuXG5cdGlzQ29udHJvbFJlcXVpcmVkID0gKGNvbnRyb2w6IElDb250cm9sKSA9PiB7XG5cdFx0cmV0dXJuIGNvbnRyb2wudmFsaWRhdGlvbnM/LmZpbmQoKHYpID0+IHYucnVsZS50b0xvd2VyQ2FzZSgpID09IFwicmVxdWlyZWRcIik7XG5cdH07XG5cblx0cGF0Y2hWYWx1ZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgZGF0ZUZvcm1hdDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcblx0XHRpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB0aGlzLnNldFZhbHVlKGtleSwgdmFsdWUpO1xuXHRcdGVsc2UgdGhpcy5zZXRWYWx1ZShrZXksIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBkYXRlRm9ybWF0KSk7XG5cdFx0dGhpcy5mb3JtLmdldChrZXkpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdH07XG5cblx0cGF0Y2ggPSAobW9kZWw6IGFueSwgZGF0ZUZvcm1hdDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtb2RlbCkpIHtcblx0XHRcdHRoaXMucGF0Y2hWYWx1ZShrZXksIG1vZGVsW2tleV0sIGRhdGVGb3JtYXQpO1xuXHRcdH1cblx0XHR0aGlzLmRldGVjdENoYW5nZXMoKTtcblx0fTtcblxuXHRjaGVja1ZhbGlkaXR5ID0gKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHR0aGlzLmZvcm0uZ2V0KGNvbnRyb2wubmFtZSk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblx0XHR9XG5cdFx0dGhpcy52YWxpZCA9IHRoaXMuZm9ybS52YWxpZDtcblx0XHR0aGlzLmRldGVjdENoYW5nZXMoKTtcblx0fTtcblxuXHR1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gKCkgPT4ge1xuXHRcdHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xuXHRcdHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuXHR9O1xuXG5cdHByaXZhdGUgc2V0VmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLmZvcm0uZ2V0KGtleSk/LnBhdGNoVmFsdWUodmFsdWUpO1xuXHRcdHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZTtcblx0fTtcblxuXHRwcml2YXRlIHRvSW5wdXRWYWx1ZSA9IChjb250cm9sOiBJQ29udHJvbCwgdmFsdWU6IGFueSB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0c3dpdGNoIChjb250cm9sLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJkYXRlXCI6XG5cdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdD8gdGhpcy50cmFuc2Zvcm1EYXRlKHZhbHVlLCBcInl5eXktTU0tZGRcIilcblx0XHRcdFx0XHQ6IHRoaXMudHJhbnNmb3JtRGF0ZShjb250cm9sLnZhbHVlLCBcInl5eXktTU0tZGRcIik7XG5cdFx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcblx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0PyB0aGlzLnRyYW5zZm9ybURhdGUodmFsdWUsIFwieXl5eS1NTS1kZFRISDptbVwiKVxuXHRcdFx0XHRcdDogdGhpcy50cmFuc2Zvcm1EYXRlKGNvbnRyb2wudmFsdWUsIFwieXl5eS1NTS1kZFRISDptbVwiKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSB8fCBjb250cm9sLnZhbHVlO1xuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIHRyYW5zZm9ybURhdGUgPSAodmFsdWU6IGFueSwgZm9ybWF0OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIGZvcm1hdCk7XG5cdH07XG5cblx0cHVibGljIHJlc2l6ZSA9ICh0ZXh0QXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IGluaXRpYWxIZWlnaHQgPSB0ZXh0QXJlYS5zdHlsZS5oZWlnaHQ7XG5cdFx0dGV4dEFyZWEuc3R5bGUuaGVpZ2h0ID0gaW5pdGlhbEhlaWdodDtcblx0XHR0ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSBcIlwiICsgdGV4dEFyZWEuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xuXHR9O1xuXG5cdHB1YmxpYyBkb1N1Ym1pdCA9ICgpID0+IHtcblx0XHR0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuXHRcdGlmICh0aGlzLnZhbGlkICYmIHRoaXMuZm9ybS52YWxpZCkgdGhpcy5zdWJtaXQ/Lih0aGlzLmZvcm0udmFsdWUpO1xuXHR9O1xuXG5cdHByaXZhdGUgZGV0ZWN0Q2hhbmdlcyA9ICgpID0+IHtcblx0XHR0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcblx0XHR0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblx0fTtcblxuXHRwcml2YXRlIF9nZXRWYWxpZGF0b3JzID0gKHZhbGlkYXRpb25zPzogSUNvbnRyb2xWYWxpZGF0aW9uW10pID0+IHtcblx0XHRjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cdFx0aWYgKCF2YWxpZGF0aW9ucykgcmV0dXJuIHZhbGlkYXRvcnM7XG5cdFx0Ly9Td2l0Y2ggY2FzZSBicmVha3MgdGhlIG1vYmlsZSBhcHAgc28gd2UnbGwgZG8gaWYgc3RhdGVtZW50c1xuXHRcdGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiB2YWxpZGF0aW9ucykge1xuXHRcdFx0Y29uc3QgcnVsZSA9IHZhbGlkYXRpb24ucnVsZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXHRcdFx0aWYgKHJ1bGUgPT0gXCJtaW5cIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIHZhbGV1ciBlc3QgdHJvcCBwZXRpdGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4odmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJtYXhcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIHZhbGV1ciBlc3QgdHJvcCBncmFuZGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJyZXF1aXJlZFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2UgY2hhbXBzIGVzdCByZXF1aXMgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcImVtYWlsXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSBhZHJlc3NlIGVtYWlsIG4nZXN0IHBhcyB2YWxpZGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1pbmxlbmd0aFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIHBldGl0ZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1heGxlbmd0aFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIGdyYW5kZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcInR5cGVcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdmFsaWRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKHR5cGUodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJkZWNpbWFsXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gYExlIG5vbWJyZSBkZSBkw6ljaW1hbCBuJ2VzdCBwYXMgdmFsaWRlIChtYXg6ICR7dmFsaWRhdGlvbi52YWx1ZX0pICFgO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goZGVjaW1hbCh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1heGRhdGVcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBgQ2V0dGUgZGF0ZSBlc3QgdHJvcCBncmFuZGUgISAobWF4OiAke3ZhbGlkYXRpb24udmFsdWV9KSAhYDtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKG1heERhdGUodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsaWRhdG9ycztcblx0fTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIG1pbi1oLTUvNiBtdC0yXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYkRpc3BsYXkgfHwgIXNlY3Rpb25zXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2luZ2xlVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sczogY29udHJvbHN9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJEaXNwbGF5ICYmIHNlY3Rpb25zXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VjdGlvblRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c2VjdGlvbnM6IHNlY3Rpb25zfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJEaXNwbGF5ICYmIHNlY3Rpb25zXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFic1RlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c2VjdHM6IHNlY3Rpb25zfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Zvcm0+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0YWJzVGVtcGxhdGUgbGV0LXNlY3Rpb25zPSdzZWN0cyc+XG4gIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgIEBmb3IgKHNlY3Rpb24gb2Ygc2VjdGlvbnM7IHRyYWNrIHNlY3Rpb247IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgPG1hdC10YWIgW2xhYmVsXT1cInNlY3Rpb24udGl0bGUgfHwgJ8OJdGFwZSAnICsgKGluZGV4ICsgMSlcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImluaXRpYWxpemVkXCIgY2xhc3M9XCJtdC00XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb21wYWN0ID8gJ2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy00JzonZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTInXCI+XG4gICAgICAgICAgQGZvciAoY3RybCBvZiBzZWN0aW9uLmNvbnRyb2xzOyB0cmFjayBpbmRleDsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXRcbiAgICAgICAgICBsYXN0ID1cbiAgICAgICAgICAkbGFzdClcbiAgICAgICAgICB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sOiBjdHJsLCBpbmRleDogaW5kZXgsIGxhc3Q6ICRsYXN0fVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC10YWI+XG4gICAgICB9XG4gICAgPC9tYXQtdGFiLWdyb3VwPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVUZW1wbGF0ZSBsZXQtY29udHJvbHM9XCJjb250cm9sc1wiPlxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPGRpdiAqbmdJZj1cImluaXRpYWxpemVkXCJcbiAgICAgIFtuZ0NsYXNzXT1cImNvbXBhY3QgPyAnZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTQnOidncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtMidcIj5cbiAgICAgIEBmb3IgKGNvbnRyb2wgb2YgY29udHJvbHM7IHRyYWNrIGNvbnRyb2w7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbnRyb2w6IGNvbnRyb2wsIGluZGV4OiBpbmRleCwgbGFzdDogbGFzdH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gIDwvZmllbGRzZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlY3Rpb25UZW1wbGF0ZSBsZXQtc2VjdGlvbnM9J3NlY3Rpb25zJz5cbiAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIEBmb3IgKHNlY3Rpb24gb2Ygc2VjdGlvbnM7IHRyYWNrIHNlY3Rpb247IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgIDxkaXY+XG4gICAgICBAaWYgKHNlY3Rpb24udGl0bGUpIHtcbiAgICAgIDxoMiBjbGFzcz1cIm1iLTIgZm9udC1ib2xkIHRleHQteGwgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGVcIj5cbiAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgPC9oMj5cbiAgICAgIH1cbiAgICAgIDxkaXYgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbXBhY3QgPyAnZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTQnOidncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtMidcIj5cbiAgICAgICAgQGZvciAoY29udHJvbCBvZiBzZWN0aW9uLmNvbnRyb2xzOyB0cmFjayBpbmRleDsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXRcbiAgICAgICAgbGFzdCA9XG4gICAgICAgICRsYXN0KVxuICAgICAgICB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbnRyb2w6IGNvbnRyb2wsIGluZGV4OiBpbmRleCwgbGFzdDogJGxhc3R9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoaW5kZXggIT0gKHNlY3Rpb25zfHxbXSkubGVuZ3RoIC0gMSAmJiAhY29tcGFjdCkge1xuICAgICAgPGRpdiBjbGFzcz1cInB5LTRcIj5cbiAgICAgICAgPGhyIGNsYXNzPVwiXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9maWVsZHNldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlIGxldC1jb250cm9sPSdjb250cm9sJyBsZXQtbGFzdD0nbGFzdCcgbGV0LWluZGV4PSdpbmRleCc+XG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBoLW1pbiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgW25nQ2xhc3NdPVwie1xuICAgICdzbTpjb2wtc3Bhbi0yJzogKGNvbnRyb2wud2lkdGggPT0gJ3JvdycgJiYgIWNvbXBhY3QpIHx8IGNvbnRyb2wudHlwZT09J3RleHRBcmVhJyAmJiBjb21wYWN0ICYmIGNvbnRyb2wud2lkdGggIT0gJ3JvdycsXG4gICAgJ3NtOmNvbC1zcGFuLTQnOiBjb250cm9sLndpZHRoID09J3JvdycgJiYgY29tcGFjdCxcbiAgICB9XCI+XG4gICAgQGlmIChjb250cm9sLnR5cGU9PSdzZWFyY2hTZWxlY3QnKSB7XG4gICAgPGRpdiBhcHAtY2hyLXNlYXJjaC1zZWxlY3QgY2xhc3M9XCJyZWxhdGl2ZSBpbnB1dCB6LTAgdy1mdWxsXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIlxuICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgIFtkYXRhXT1cImNvbnRyb2wuZGF0YSB8fCBbXVwiIFtkaXNwbGF5XT1cImNvbnRyb2wuZm4hXCIgW25hbWVdPVwiY29udHJvbC5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgXCJcbiAgICAgIFtmaWx0ZXJzXT1cImNvbnRyb2wuZmlsdGVyc1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGFic29sdXRlIHRleHQtc20gdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDBcIiBbZm9yXT1cImNvbnRyb2wubmFtZVwiPnt7XG4gICAgICAgIGNvbnRyb2wubGFiZWxcbiAgICAgICAgfX1cbiAgICAgICAgQGlmIChpc0NvbnRyb2xSZXF1aXJlZChjb250cm9sKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICBAZm9yICh2YWxpZGF0aW9uIG9mIGNvbnRyb2wudmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24pIHtcbiAgICAgICAgQGlmIChcbiAgICAgICAgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmXG4gICAgICAgIGZvcm0uaGFzRXJyb3IodmFsaWRhdGlvbi5ydWxlLnRvTG93ZXJDYXNlKCksIGNvbnRyb2wubmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZGFyazp0ZXh0LXJlZC04MDBcIj57eyB2YWxpZGF0aW9uLmRpc3BsYXkgfX08L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgei0wIHctZnVsbCBncm91cC9pbnB1dHMgY29udGVudFwiPlxuICAgICAgPCEtLSBIZXJlIHdlIHdpbGwgKm5nSWYgZWFjaCB0eXBlIG9mIGlucHV0IGNhdXNlIGl0J3MgdGhlIGNsZWFuZXN0IHdheSBJIGNhbiBpbWFnaW5lLS0+XG4gICAgICA8IS0tVEVYVC0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3RleHQnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiBbdmFsdWVdPVwibW9kZWw/Lltjb250cm9sLm5hbWVdIHx8IGNvbnRyb2wudmFsdWUgfHwgJydcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMi41IHB4LTAgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLVBBU1NXT1JELS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAncGFzc3dvcmQnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIuNSBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1URVhUIEFSRUEtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICd0ZXh0QXJlYScpIHtcbiAgICAgIDx0ZXh0YXJlYSAjdGV4dEFyZWEgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgXCJcbiAgICAgICAgKGlucHV0KT1cInJlc2l6ZSh0ZXh0QXJlYSlcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwibm8tc2Nyb2xsYmFyIGlucHV0ICFyZXNpemUtbm9uZSBoZWlnaHQtbm9ybWFsaXplZCBibG9jayBweS0yIHB4LTAgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIj48L3RleHRhcmVhPlxuICAgICAgfVxuICAgICAgPCEtLU5VTUJFUi0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ251bWJlcicpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cIm51bWJlclwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIuNSBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1EQVRFLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAnZGF0ZScpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cImRhdGVcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yIHB4LTAgdy1mdWxsIGhlaWdodC1ub3JtYWxpemVkIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yIHB4LTAgdy1mdWxsIGhlaWdodC1ub3JtYWxpemVkIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLUNPTE9SLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAnY29sb3InKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJjb2xvclwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIiBzdHlsZT1cImhlaWdodDogNDJweDtcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTEuNSBtLTAgcHgtMCB3LWZ1bGwgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAndG9nZ2xlJyl7XG4gICAgICA8aW5wdXQgI3RvZ2dsZSB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImhpZGRlbiBjaGVja2JveFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgXCIgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB0b2dnbGUtd3JhcHBlciBibG9jayBpbnB1dCBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGJvcmRlci1ncmF5LTMwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiPlxuICAgICAgICA8ZGl2IChjbGljayk9XCJ0b2dnbGU/LmNsaWNrKClcIiBjbGFzcz1cInJlbGF0aXZlIGJsb2NrIGlucHV0IHRvZ2dsZVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgIT0gJ3NlYXJjaFNlbGVjdCcpIHtcbiAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGFic29sdXRlIHRleHQtc20gdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDBcIiBbZm9yXT1cImNvbnRyb2wubmFtZVwiPnt7XG4gICAgICAgIGNvbnRyb2wubGFiZWxcbiAgICAgICAgfX1cbiAgICAgICAgQGlmKGNvbnRyb2wubGFiZWwgJiYgY29udHJvbC5sYWJlbCAhPSAnJyAmJiBjb250cm9sLmxhYmVsICE9ICcgJyl7XG4gICAgICAgIEBpZiAoaXNDb250cm9sUmVxdWlyZWQoY29udHJvbCkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDBcIj4qPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIDpcbiAgICAgICAgfVxuICAgICAgICBAZm9yICh2YWxpZGF0aW9uIG9mIGNvbnRyb2wudmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24pIHtcbiAgICAgICAgQGlmIChcbiAgICAgICAgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmXG4gICAgICAgIGZvcm0uaGFzRXJyb3IodmFsaWRhdGlvbi5ydWxlLnRvTG93ZXJDYXNlKCksIGNvbnRyb2wubmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZGFyazp0ZXh0LXJlZC04MDBcIj57eyB2YWxpZGF0aW9uLmRpc3BsYXkgfX08L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLmljb24gJiYgIWRpc2FibGVkKSB7XG4gICAgICA8c3BhblxuICAgICAgICBbbmdDbGFzc109XCJjb250cm9sLmljb25DYWxsYmFja0Rpc2FibGVkID8gJ3RleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwJzondGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBwLTIuNSBib3R0b20tMCByaWdodC0wXCIgW21hdFRvb2x0aXBdPVwiY29udHJvbC5pY29uVG9vbHRpcCB8fCAnJ1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgKGNsaWNrKT1cIiFjb250cm9sLmljb25DYWxsYmFja0Rpc2FibGVkICYmIGNvbnRyb2wuaWNvbkNhbGxiYWNrPy4oZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy52YWx1ZSlcIj48bWF0LWljb25cbiAgICAgICAgICBjbGFzcz1cImZsZXggaW5wdXQganVzdGlmeS1jZW50ZXIgYWxpZ24tbWlkZGxlIGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciB0ZXh0LWxnXCI+e3tjb250cm9sLmljb259fTwvbWF0LWljb24+PC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoY29udHJvbC5zcGFuKSB7XG4gICAgPHNwYW5cbiAgICAgIFtuZ0NsYXNzXT1cIiFmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycyB8fCAhZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkID8gJ3RleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwJyA6ICchdGV4dC1yZWQtNTAwIGRhcms6IXRleHQtcmVkLTgwMCdcIlxuICAgICAgY2xhc3M9XCJoLTAgdGV4dC14c1wiPnt7IGNvbnRyb2wuc3BhblxuICAgICAgfX08L3NwYW4+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
@@ -3,10 +3,12 @@ import { HttpResponse, } from "@angular/common/http";
3
3
  import { finalize, tap } from "rxjs";
4
4
  import { LiveUpdateService } from "../../services/live-update.service";
5
5
  import { XSRFHEADERNAME } from "../providers/xsrf-provider";
6
+ import { DataService } from "../../services/data.service";
6
7
  export const XsrfInterceptor = (req, next) => {
7
8
  const headerName = inject(XSRFHEADERNAME);
8
- const csrfToken = localStorage.getItem(headerName);
9
9
  const liveUpdateService = inject(LiveUpdateService);
10
+ const dataService = inject(DataService);
11
+ const csrfToken = dataService.getSync(headerName);
10
12
  const hasCsrfToken = csrfToken !== null && csrfToken !== undefined;
11
13
  const shouldIntercept = ["PUT", "POST", "DELETE"].includes(req.method);
12
14
  const isWebSocket = req.url.includes(liveUpdateService.getHubUrl());
@@ -15,23 +17,23 @@ export const XsrfInterceptor = (req, next) => {
15
17
  headers: req.headers.set(headerName, csrfToken),
16
18
  });
17
19
  liveUpdateService.initConnection().subscribe();
18
- return next(cloned).pipe(WaitAndStoreXsrfToken(headerName), finalize(() => liveUpdateService.closeConnection().subscribe()));
20
+ return next(cloned).pipe(WaitAndStoreXsrfToken(headerName, dataService), finalize(() => liveUpdateService.closeConnection().subscribe()));
19
21
  }
20
22
  else {
21
- return next(req).pipe(WaitAndStoreXsrfToken(headerName));
23
+ return next(req).pipe(WaitAndStoreXsrfToken(headerName, dataService));
22
24
  }
23
25
  };
24
- export const WaitAndStoreXsrfToken = (headername) => {
26
+ export const WaitAndStoreXsrfToken = (headername, dataService) => {
25
27
  return (source) => {
26
28
  return source.pipe(tap((event) => {
27
29
  if (event instanceof HttpResponse) {
28
30
  const xsrfToken = event.headers.get(headername);
29
31
  if (xsrfToken) {
30
- localStorage.setItem(headername, xsrfToken);
32
+ dataService.set(headername, xsrfToken);
31
33
  }
32
34
  }
33
35
  return event;
34
36
  }));
35
37
  };
36
38
  };
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWHNyZkludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY29uZmlnL2ludGVyY2VwdG9ycy9Yc3JmSW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBSU4sWUFBWSxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQXNCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQy9ELE1BQU0sVUFBVSxHQUFXLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVsRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25ELE1BQU0saUJBQWlCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sWUFBWSxHQUFHLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUNuRSxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRXBFLElBQUksWUFBWSxJQUFJLGVBQWUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDeEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsaUJBQWlCLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN2QixxQkFBcUIsQ0FBQyxVQUFVLENBQUMsRUFDakMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQy9ELENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7QUFDRixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFVBQWtCLEVBQUUsRUFBRTtJQUMzRCxPQUFPLENBQUMsTUFBa0MsRUFBRSxFQUFFO1FBQzdDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDakIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDYixJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzdDLENBQUM7WUFDRixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDRixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuXHRIdHRwQ29udGV4dFRva2VuLFxyXG5cdEh0dHBFdmVudCxcclxuXHRIdHRwSW50ZXJjZXB0b3JGbixcclxuXHRIdHRwUmVzcG9uc2UsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBPYnNlcnZhYmxlLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBMaXZlVXBkYXRlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9saXZlLXVwZGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFhTUkZDT09LSUVOQU1FLCBYU1JGSEVBREVSTkFNRSB9IGZyb20gXCIuLi9wcm92aWRlcnMveHNyZi1wcm92aWRlclwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFhzcmZJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxLCBuZXh0KSA9PiB7XHJcblx0Y29uc3QgaGVhZGVyTmFtZTogc3RyaW5nID0gaW5qZWN0KFhTUkZIRUFERVJOQU1FKTtcclxuXHJcblx0Y29uc3QgY3NyZlRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGVhZGVyTmFtZSk7XHJcblx0Y29uc3QgbGl2ZVVwZGF0ZVNlcnZpY2U6IExpdmVVcGRhdGVTZXJ2aWNlID0gaW5qZWN0KExpdmVVcGRhdGVTZXJ2aWNlKTtcclxuXHJcblx0Y29uc3QgaGFzQ3NyZlRva2VuID0gY3NyZlRva2VuICE9PSBudWxsICYmIGNzcmZUb2tlbiAhPT0gdW5kZWZpbmVkO1xyXG5cdGNvbnN0IHNob3VsZEludGVyY2VwdCA9IFtcIlBVVFwiLCBcIlBPU1RcIiwgXCJERUxFVEVcIl0uaW5jbHVkZXMocmVxLm1ldGhvZCk7XHJcblx0Y29uc3QgaXNXZWJTb2NrZXQgPSByZXEudXJsLmluY2x1ZGVzKGxpdmVVcGRhdGVTZXJ2aWNlLmdldEh1YlVybCgpKTtcclxuXHJcblx0aWYgKGhhc0NzcmZUb2tlbiAmJiBzaG91bGRJbnRlcmNlcHQgJiYgIWlzV2ViU29ja2V0KSB7XHJcblx0XHRjb25zdCBjbG9uZWQgPSByZXEuY2xvbmUoe1xyXG5cdFx0XHRoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoaGVhZGVyTmFtZSwgY3NyZlRva2VuKSxcclxuXHRcdH0pO1xyXG5cclxuXHRcdGxpdmVVcGRhdGVTZXJ2aWNlLmluaXRDb25uZWN0aW9uKCkuc3Vic2NyaWJlKCk7XHJcblx0XHRyZXR1cm4gbmV4dChjbG9uZWQpLnBpcGUoXHJcblx0XHRcdFdhaXRBbmRTdG9yZVhzcmZUb2tlbihoZWFkZXJOYW1lKSxcclxuXHRcdFx0ZmluYWxpemUoKCkgPT4gbGl2ZVVwZGF0ZVNlcnZpY2UuY2xvc2VDb25uZWN0aW9uKCkuc3Vic2NyaWJlKCkpXHJcblx0XHQpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gbmV4dChyZXEpLnBpcGUoV2FpdEFuZFN0b3JlWHNyZlRva2VuKGhlYWRlck5hbWUpKTtcclxuXHR9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgV2FpdEFuZFN0b3JlWHNyZlRva2VuID0gKGhlYWRlcm5hbWU6IHN0cmluZykgPT4ge1xyXG5cdHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PikgPT4ge1xyXG5cdFx0cmV0dXJuIHNvdXJjZS5waXBlKFxyXG5cdFx0XHR0YXAoKGV2ZW50KSA9PiB7XHJcblx0XHRcdFx0aWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcblx0XHRcdFx0XHRjb25zdCB4c3JmVG9rZW4gPSBldmVudC5oZWFkZXJzLmdldChoZWFkZXJuYW1lKTtcclxuXHRcdFx0XHRcdGlmICh4c3JmVG9rZW4pIHtcclxuXHRcdFx0XHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oaGVhZGVybmFtZSwgeHNyZlRva2VuKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGV2ZW50O1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9O1xyXG59O1xyXG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWHNyZkludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY29uZmlnL2ludGVyY2VwdG9ycy9Yc3JmSW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBSU4sWUFBWSxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUMvRCxNQUFNLFVBQVUsR0FBVyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFbEQsTUFBTSxpQkFBaUIsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkUsTUFBTSxXQUFXLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVyRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxELE1BQU0sWUFBWSxHQUFHLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUNuRSxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRXBFLElBQUksWUFBWSxJQUFJLGVBQWUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDeEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsaUJBQWlCLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN2QixxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQzlDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUMvRCxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztBQUNGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQ3BDLFVBQWtCLEVBQ2xCLFdBQXdCLEVBQ3ZCLEVBQUU7SUFDSCxPQUFPLENBQUMsTUFBa0MsRUFBRSxFQUFFO1FBQzdDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDakIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDYixJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2YsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7WUFDRixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDRixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuXHRIdHRwQ29udGV4dFRva2VuLFxyXG5cdEh0dHBFdmVudCxcclxuXHRIdHRwSW50ZXJjZXB0b3JGbixcclxuXHRIdHRwUmVzcG9uc2UsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBPYnNlcnZhYmxlLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBMaXZlVXBkYXRlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9saXZlLXVwZGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFhTUkZDT09LSUVOQU1FLCBYU1JGSEVBREVSTkFNRSB9IGZyb20gXCIuLi9wcm92aWRlcnMveHNyZi1wcm92aWRlclwiO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBYc3JmSW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xyXG5cdGNvbnN0IGhlYWRlck5hbWU6IHN0cmluZyA9IGluamVjdChYU1JGSEVBREVSTkFNRSk7XHJcblxyXG5cdGNvbnN0IGxpdmVVcGRhdGVTZXJ2aWNlOiBMaXZlVXBkYXRlU2VydmljZSA9IGluamVjdChMaXZlVXBkYXRlU2VydmljZSk7XHJcblx0Y29uc3QgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlID0gaW5qZWN0KERhdGFTZXJ2aWNlKTtcclxuXHJcblx0Y29uc3QgY3NyZlRva2VuID0gZGF0YVNlcnZpY2UuZ2V0U3luYyhoZWFkZXJOYW1lKTtcclxuXHJcblx0Y29uc3QgaGFzQ3NyZlRva2VuID0gY3NyZlRva2VuICE9PSBudWxsICYmIGNzcmZUb2tlbiAhPT0gdW5kZWZpbmVkO1xyXG5cdGNvbnN0IHNob3VsZEludGVyY2VwdCA9IFtcIlBVVFwiLCBcIlBPU1RcIiwgXCJERUxFVEVcIl0uaW5jbHVkZXMocmVxLm1ldGhvZCk7XHJcblx0Y29uc3QgaXNXZWJTb2NrZXQgPSByZXEudXJsLmluY2x1ZGVzKGxpdmVVcGRhdGVTZXJ2aWNlLmdldEh1YlVybCgpKTtcclxuXHJcblx0aWYgKGhhc0NzcmZUb2tlbiAmJiBzaG91bGRJbnRlcmNlcHQgJiYgIWlzV2ViU29ja2V0KSB7XHJcblx0XHRjb25zdCBjbG9uZWQgPSByZXEuY2xvbmUoe1xyXG5cdFx0XHRoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoaGVhZGVyTmFtZSwgY3NyZlRva2VuKSxcclxuXHRcdH0pO1xyXG5cclxuXHRcdGxpdmVVcGRhdGVTZXJ2aWNlLmluaXRDb25uZWN0aW9uKCkuc3Vic2NyaWJlKCk7XHJcblx0XHRyZXR1cm4gbmV4dChjbG9uZWQpLnBpcGUoXHJcblx0XHRcdFdhaXRBbmRTdG9yZVhzcmZUb2tlbihoZWFkZXJOYW1lLCBkYXRhU2VydmljZSksXHJcblx0XHRcdGZpbmFsaXplKCgpID0+IGxpdmVVcGRhdGVTZXJ2aWNlLmNsb3NlQ29ubmVjdGlvbigpLnN1YnNjcmliZSgpKVxyXG5cdFx0KTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIG5leHQocmVxKS5waXBlKFdhaXRBbmRTdG9yZVhzcmZUb2tlbihoZWFkZXJOYW1lLCBkYXRhU2VydmljZSkpO1xyXG5cdH1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBXYWl0QW5kU3RvcmVYc3JmVG9rZW4gPSAoXHJcblx0aGVhZGVybmFtZTogc3RyaW5nLFxyXG5cdGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZVxyXG4pID0+IHtcclxuXHRyZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4pID0+IHtcclxuXHRcdHJldHVybiBzb3VyY2UucGlwZShcclxuXHRcdFx0dGFwKChldmVudCkgPT4ge1xyXG5cdFx0XHRcdGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgeHNyZlRva2VuID0gZXZlbnQuaGVhZGVycy5nZXQoaGVhZGVybmFtZSk7XHJcblx0XHRcdFx0XHRpZiAoeHNyZlRva2VuKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFTZXJ2aWNlLnNldChoZWFkZXJuYW1lLCB4c3JmVG9rZW4pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gZXZlbnQ7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH07XHJcbn07XHJcbiJdfQ==
@@ -4,12 +4,14 @@ import * as i0 from "@angular/core";
4
4
  export class DataService {
5
5
  constructor() {
6
6
  this.data = new Map();
7
+ this.syncData = {};
7
8
  this.set = (key, value) => {
8
9
  const data = this.data.get(key);
9
10
  if (!data)
10
11
  this.data.set(key, new BehaviorSubject(value));
11
12
  else
12
13
  data.next(value);
14
+ this.syncData[key] = value;
13
15
  };
14
16
  this.get = (key) => {
15
17
  const data = this.data.get(key);
@@ -17,6 +19,9 @@ export class DataService {
17
19
  this.data.set(key, new BehaviorSubject(null));
18
20
  return this.data.get(key);
19
21
  };
22
+ this.getSync = (key) => {
23
+ return this.syncData[key];
24
+ };
20
25
  this.clear = (key) => {
21
26
  return this.data.get(key)?.next(null);
22
27
  };
@@ -33,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
33
38
  providedIn: "root",
34
39
  }]
35
40
  }], ctorParameters: () => [] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFnQyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3JFLE1BQU0sT0FBTyxXQUFXO0lBRXZCO1FBRFEsU0FBSSxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO1FBR3ZELFFBQUcsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFVLEVBQVEsRUFBRTtZQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSTtnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs7Z0JBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1FBRUYsUUFBRyxHQUFHLENBQUMsR0FBVyxFQUFtQixFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBRUYsVUFBSyxHQUFHLENBQUMsR0FBVyxFQUFRLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDO1FBRUYsV0FBTSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUM7SUFwQmEsQ0FBQzs4R0FGSixXQUFXO2tIQUFYLFdBQVcsY0FGWCxNQUFNOzsyRkFFTixXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGFwLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2Uge1xyXG5cdHByaXZhdGUgZGF0YSA9IG5ldyBNYXA8c3RyaW5nLCBCZWhhdmlvclN1YmplY3Q8YW55Pj4oKTtcclxuXHRjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG5cdHNldCA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuZGF0YS5nZXQoa2V5KTtcclxuXHRcdGlmICghZGF0YSkgdGhpcy5kYXRhLnNldChrZXksIG5ldyBCZWhhdmlvclN1YmplY3QodmFsdWUpKTtcclxuXHRcdGVsc2UgZGF0YS5uZXh0KHZhbHVlKTtcclxuXHR9O1xyXG5cclxuXHRnZXQgPSAoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuZGF0YS5nZXQoa2V5KTtcclxuXHRcdGlmICghZGF0YSkgdGhpcy5kYXRhLnNldChrZXksIG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCkpO1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5nZXQoa2V5KSE7XHJcblx0fTtcclxuXHJcblx0Y2xlYXIgPSAoa2V5OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuZ2V0KGtleSk/Lm5leHQobnVsbCk7XHJcblx0fTtcclxuXHJcblx0cmVtb3ZlID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmRlbGV0ZShrZXkpO1xyXG5cdH07XHJcbn1cclxuIl19
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFnQyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3JFLE1BQU0sT0FBTyxXQUFXO0lBR3ZCO1FBRlEsU0FBSSxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO1FBQy9DLGFBQVEsR0FBMkIsRUFBRSxDQUFDO1FBRzlDLFFBQUcsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFVLEVBQVEsRUFBRTtZQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSTtnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs7Z0JBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBRUYsUUFBRyxHQUFHLENBQUMsR0FBVyxFQUFtQixFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBRUYsWUFBTyxHQUFHLENBQUMsR0FBVyxFQUFPLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQztRQUVGLFVBQUssR0FBRyxDQUFDLEdBQVcsRUFBUSxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUVGLFdBQU0sR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDO0lBMUJhLENBQUM7OEdBSEosV0FBVztrSEFBWCxXQUFXLGNBRlgsTUFBTTs7MkZBRU4sV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRhcCwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlIHtcclxuXHRwcml2YXRlIGRhdGEgPSBuZXcgTWFwPHN0cmluZywgQmVoYXZpb3JTdWJqZWN0PGFueT4+KCk7XHJcblx0cHJpdmF0ZSBzeW5jRGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cdGNvbnN0cnVjdG9yKCkge31cclxuXHJcblx0c2V0ID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCA9PiB7XHJcblx0XHRjb25zdCBkYXRhID0gdGhpcy5kYXRhLmdldChrZXkpO1xyXG5cdFx0aWYgKCFkYXRhKSB0aGlzLmRhdGEuc2V0KGtleSwgbmV3IEJlaGF2aW9yU3ViamVjdCh2YWx1ZSkpO1xyXG5cdFx0ZWxzZSBkYXRhLm5leHQodmFsdWUpO1xyXG5cclxuXHRcdHRoaXMuc3luY0RhdGFba2V5XSA9IHZhbHVlO1xyXG5cdH07XHJcblxyXG5cdGdldCA9IChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcblx0XHRjb25zdCBkYXRhID0gdGhpcy5kYXRhLmdldChrZXkpO1xyXG5cdFx0aWYgKCFkYXRhKSB0aGlzLmRhdGEuc2V0KGtleSwgbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmdldChrZXkpITtcclxuXHR9O1xyXG5cclxuXHRnZXRTeW5jID0gKGtleTogc3RyaW5nKTogYW55ID0+IHtcclxuXHRcdHJldHVybiB0aGlzLnN5bmNEYXRhW2tleV07XHJcblx0fTtcclxuXHJcblx0Y2xlYXIgPSAoa2V5OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuZ2V0KGtleSk/Lm5leHQobnVsbCk7XHJcblx0fTtcclxuXHJcblx0cmVtb3ZlID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmRlbGV0ZShrZXkpO1xyXG5cdH07XHJcbn1cclxuIl19
@@ -716,10 +716,6 @@ class ChrFormComponent {
716
716
  this.values = {};
717
717
  this.controlTypes = {};
718
718
  this.flattenedControls = [];
719
- this.updateValueAndValidity = () => {
720
- this.form.markAsDirty();
721
- this.form.updateValueAndValidity({ emitEvent: true });
722
- };
723
719
  this.initialized = false;
724
720
  this.initModel = () => {
725
721
  if (this.model == null)
@@ -743,9 +739,9 @@ class ChrFormComponent {
743
739
  this.controlTypes[control.name] = control.type;
744
740
  }
745
741
  this.form = this.builder.group(formControls);
742
+ this.valid = this.form.valid;
746
743
  };
747
744
  this.initListeners = () => {
748
- // Listen for changes and update the model
749
745
  this.form.valueChanges.subscribe((values) => {
750
746
  for (const key in values) {
751
747
  if (values.hasOwnProperty(key)) {
@@ -778,6 +774,7 @@ class ChrFormComponent {
778
774
  this.setValue(key, value);
779
775
  else
780
776
  this.setValue(key, this.datePipe.transform(value, dateFormat));
777
+ this.form.get(key)?.updateValueAndValidity();
781
778
  this.detectChanges();
782
779
  };
783
780
  this.patch = (model, dateFormat = null) => {
@@ -786,6 +783,17 @@ class ChrFormComponent {
786
783
  }
787
784
  this.detectChanges();
788
785
  };
786
+ this.checkValidity = () => {
787
+ for (const control of this.flattenedControls) {
788
+ this.form.get(control.name)?.updateValueAndValidity();
789
+ }
790
+ this.valid = this.form.valid;
791
+ this.detectChanges();
792
+ };
793
+ this.updateValueAndValidity = () => {
794
+ this.form.markAsDirty();
795
+ this.form.updateValueAndValidity({ emitEvent: true });
796
+ };
789
797
  this.setValue = (key, value) => {
790
798
  this.form.get(key)?.patchValue(value);
791
799
  this.values[key] = value;
@@ -807,10 +815,6 @@ class ChrFormComponent {
807
815
  this.transformDate = (value, format) => {
808
816
  return this.datePipe.transform(value, format);
809
817
  };
810
- this.reset = () => {
811
- this.form.reset();
812
- this.detectChanges();
813
- };
814
818
  this.resize = (textArea) => {
815
819
  const initialHeight = textArea.style.height;
816
820
  textArea.style.height = initialHeight;
@@ -1358,10 +1362,49 @@ const SpinnerInterceptor = (req, next) => {
1358
1362
  }));
1359
1363
  };
1360
1364
 
1365
+ class DataService {
1366
+ constructor() {
1367
+ this.data = new Map();
1368
+ this.syncData = {};
1369
+ this.set = (key, value) => {
1370
+ const data = this.data.get(key);
1371
+ if (!data)
1372
+ this.data.set(key, new BehaviorSubject(value));
1373
+ else
1374
+ data.next(value);
1375
+ this.syncData[key] = value;
1376
+ };
1377
+ this.get = (key) => {
1378
+ const data = this.data.get(key);
1379
+ if (!data)
1380
+ this.data.set(key, new BehaviorSubject(null));
1381
+ return this.data.get(key);
1382
+ };
1383
+ this.getSync = (key) => {
1384
+ return this.syncData[key];
1385
+ };
1386
+ this.clear = (key) => {
1387
+ return this.data.get(key)?.next(null);
1388
+ };
1389
+ this.remove = (key) => {
1390
+ return this.data.delete(key);
1391
+ };
1392
+ }
1393
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1394
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataService, providedIn: "root" }); }
1395
+ }
1396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataService, decorators: [{
1397
+ type: Injectable,
1398
+ args: [{
1399
+ providedIn: "root",
1400
+ }]
1401
+ }], ctorParameters: () => [] });
1402
+
1361
1403
  const XsrfInterceptor = (req, next) => {
1362
1404
  const headerName = inject(XSRFHEADERNAME);
1363
- const csrfToken = localStorage.getItem(headerName);
1364
1405
  const liveUpdateService = inject(LiveUpdateService);
1406
+ const dataService = inject(DataService);
1407
+ const csrfToken = dataService.getSync(headerName);
1365
1408
  const hasCsrfToken = csrfToken !== null && csrfToken !== undefined;
1366
1409
  const shouldIntercept = ["PUT", "POST", "DELETE"].includes(req.method);
1367
1410
  const isWebSocket = req.url.includes(liveUpdateService.getHubUrl());
@@ -1370,19 +1413,19 @@ const XsrfInterceptor = (req, next) => {
1370
1413
  headers: req.headers.set(headerName, csrfToken),
1371
1414
  });
1372
1415
  liveUpdateService.initConnection().subscribe();
1373
- return next(cloned).pipe(WaitAndStoreXsrfToken(headerName), finalize$1(() => liveUpdateService.closeConnection().subscribe()));
1416
+ return next(cloned).pipe(WaitAndStoreXsrfToken(headerName, dataService), finalize$1(() => liveUpdateService.closeConnection().subscribe()));
1374
1417
  }
1375
1418
  else {
1376
- return next(req).pipe(WaitAndStoreXsrfToken(headerName));
1419
+ return next(req).pipe(WaitAndStoreXsrfToken(headerName, dataService));
1377
1420
  }
1378
1421
  };
1379
- const WaitAndStoreXsrfToken = (headername) => {
1422
+ const WaitAndStoreXsrfToken = (headername, dataService) => {
1380
1423
  return (source) => {
1381
1424
  return source.pipe(tap((event) => {
1382
1425
  if (event instanceof HttpResponse) {
1383
1426
  const xsrfToken = event.headers.get(headername);
1384
1427
  if (xsrfToken) {
1385
- localStorage.setItem(headername, xsrfToken);
1428
+ dataService.set(headername, xsrfToken);
1386
1429
  }
1387
1430
  }
1388
1431
  return event;
@@ -1635,39 +1678,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
1635
1678
  }]
1636
1679
  }], ctorParameters: () => [{ type: i1$1.MatDialog }] });
1637
1680
 
1638
- class DataService {
1639
- constructor() {
1640
- this.data = new Map();
1641
- this.set = (key, value) => {
1642
- const data = this.data.get(key);
1643
- if (!data)
1644
- this.data.set(key, new BehaviorSubject(value));
1645
- else
1646
- data.next(value);
1647
- };
1648
- this.get = (key) => {
1649
- const data = this.data.get(key);
1650
- if (!data)
1651
- this.data.set(key, new BehaviorSubject(null));
1652
- return this.data.get(key);
1653
- };
1654
- this.clear = (key) => {
1655
- return this.data.get(key)?.next(null);
1656
- };
1657
- this.remove = (key) => {
1658
- return this.data.delete(key);
1659
- };
1660
- }
1661
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1662
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataService, providedIn: "root" }); }
1663
- }
1664
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataService, decorators: [{
1665
- type: Injectable,
1666
- args: [{
1667
- providedIn: "root",
1668
- }]
1669
- }], ctorParameters: () => [] });
1670
-
1671
1681
  /*
1672
1682
  * Public API Surface of chr-components
1673
1683
  */