@esfaenza/parameters 15.2.24 → 15.2.25

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.
@@ -94,8 +94,8 @@ export class EsParametersComponent {
94
94
  if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && !Array.isArray(t.value))
95
95
  t.value = t.value ? t.value.split(',').map(t => t.trim()) : [];
96
96
  if (t.type == 'enum' && t.multienum && t.value && !Array.isArray(t.value) && t.value.toString().startsWith("[") && t.value.toString().endsWith("]")) {
97
- let s = t.value.toString();
98
- t.value = s.substring(1, s.length - 1);
97
+ let s = JSON.parse(t.value);
98
+ t.value = s.join(',');
99
99
  }
100
100
  });
101
101
  this.reviewParametersBindings();
@@ -391,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
391
391
  }], LabelInputRatio: [{
392
392
  type: Input
393
393
  }] } });
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUE4RSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFJLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBWSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTlELGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7OztBQUV2RSx1SEFBdUg7QUFldkgsTUFBTSxPQUFPLHFCQUFxQjtJQXlEOUIsbUlBQW1JO0lBQ25JLElBQWEsZUFBZSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQW9CLE9BQXVCLEVBQVMsRUFBdUIsRUFBUyxHQUFzQixF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QUFFLGVBQWUsRUFBRTtRQUMzRDtZQUNJLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsSUFBSTtTQUNkO0tBQ0osMEJDMUJMLHM2TkFxRWM7NEZEdENELHFCQUFxQjtrQkFkakMsU0FBUzsrQkFDSSxlQUFlLGFBQ2Q7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRTt3QkFDM0Q7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKLGlCQUVjLGlCQUFpQixDQUFDLElBQUk7d05BeUI1QixXQUFXO3NCQUFuQixLQUFLO2dCQUdHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLGtDQUFrQztzQkFBMUMsS0FBSztnQkFHRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBR08sZUFBZTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFVudHlwZWRGb3JtQ29udHJvbCwgTmdDb250cm9sLCBOZ0Zvcm0sIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5cclxuLy8gQ2xhc3NpXHJcbmltcG9ydCB7IEdlbmVyaWNQYXJhbWV0ZXIgfSBmcm9tICcuL21vZGVscy9HZW5lcmljUGFyYW1ldGVyJztcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBFc1BhcmFtZXRlcnNMb2MgfSBmcm9tIFwiLi9lc19wYXJhbWV0ZXJzLmNvbXBvbmVudC5sb2NcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHZW5lcmljUGFyYW1ldGVyR3JvdXAgfSBmcm9tIFwiLi9tb2RlbHMvR2VuZXJpY1BhcmFtZXRlckdyb3VwXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBjaGUgcGVybWV0dGUgZGkgZ3JhZmljYXJlIHVuYSBsaXN0YSBkaSAqKkdlbmVyaWNQYXJhbWV0ZXIqKiBjb21lIElucHV0IGluIGJhc2UgYWwgbG9ybyB0aXBvIHNwZWNpZmljbyAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImVzLXBhcmFtZXRlcnNcIixcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEVzUGFyYW1ldGVyc0xvYyB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVzUGFyYW1ldGVyc0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgXSxcclxuICAgIHN0eWxlVXJsczogW1wiLi9lc19wYXJhbWV0ZXJzLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc1BhcmFtZXRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBzaSBsYXZvcmEgYSBzaW5nb2xvIHBhcmFtZXRybyBmb3J6YXRvIGRlbnRybyB1biBhcnJheSBmb3IgdGhlIGdsb3J5IG9mIHNhdGFuICovXHJcbiAgICBwcml2YXRlIFNpbmdsZVBhcmFtZXRlck1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyBkZWwgY29tcG9uZW50ZSBzdSBjdWkgdmVuZ29ubyBlZmZldHR1YXRlIGxlIGdyYWZpY2F6aW9uaSAqL1xyXG4gICAgcHVibGljIFBhcmFtZXRlcnM6IEdlbmVyaWNQYXJhbWV0ZXJbXTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyBkZWwgY29tcG9uZW50ZSBzdSBjdWkgdmVuZ29ubyBlZmZldHR1YXRlIGxlIGdyYWZpY2F6aW9uaSAqL1xyXG4gICAgcHVibGljIEdyb3VwczogR2VuZXJpY1BhcmFtZXRlckdyb3VwW107XHJcblxyXG4gICAgLyoqIENhY2hlIHBlciBmYXJlIGxvb2t1cCByYXBpZGkgaW4gZmFzZSBkaSB2YWx1dGF6aW9uZSBlc3ByZXNzaW9uaSBkaSB2aXNpYmlsaXTDoCBlIG9iYmxpZ2F0b3JpZXTDoCAqL1xyXG4gICAgcHJpdmF0ZSBQYXJhbWV0ZXJzQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBHZW5lcmljUGFyYW1ldGVyIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgICAvKiogSW5kaWNhIGNoZSBpbCBwYXJhbWV0cm8gZGV2ZSBlc3NlcmUgaW4gbW9kYWxpdMOgIGRpc3BsYXkgKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXlNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEluZGljYSBjaGUgbCd1bHRpbW8gcGFyYW1ldHJvIG5vbiBkZXZlIGF2ZXJlIG1hcmdpbmUgaW4gZm9uZG8gKi9cclxuICAgIEBJbnB1dCgpIExhc3RQYXJhbWV0ZXJOb01hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbGEgbGFiZWwgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsQ29sV2lkdGg6IG51bWJlciA9IDQ7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBJbnB1dENvbFdpZHRoOiBudW1iZXIgPSA4O1xyXG5cclxuICAgIC8qKiBJbnB1dCBhIGN1aSBjb2xsZWdhcmUgbGEgdmFyaWFiaWxlICoqc3VibWl0dGVkKiogZGVsIGZvcm0gYWxsJ2ludGVybm8gZGVsIHF1YWxlIHZpZW5lIHV0aWxpenphdG8gcXVlc3RvIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIHN1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBWYWxvcmUgZGEgbW9zdHJhcmUgcXVhbG9yYSBub24gZm9zc2VybyBhbmNvcmEgcmljZXZ1dGkgaSAqKlBhcmFtZXRlcnMqKiBkYSBtb3N0cmFyZSAqL1xyXG4gICAgQElucHV0KCkgRW1wdHlNZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSByaW11b3ZlcmUgaSBwYXJhbWV0cmkgZGFsbGEgbGlzdGEgY2xpY2NhbmRvIHN1bGxhIFggZGF2YW50aSBhbGxhIExhYmVsICovXHJcbiAgICBASW5wdXQoKSBSZW1vdmFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpIGNvbXBvbmVudGkgZGkgSW5wdXQgZ2VuZXJhdGkgc29ubyBSZWFkb25seSBvIG5vICovXHJcbiAgICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgaWwgZm9ybWF0byBsaXN0YSBjaGUgZGV2J2Vzc2VyZSB1dGlsaXp6YXRvICovXHJcbiAgICBASW5wdXQoKSBMaXN0Rm9ybWF0OiAnQ29tbWFTZXBhcmF0ZWQnIHwgJ0FycmF5JyA9ICdBcnJheSc7XHJcblxyXG4gICAgLyoqIEZvcm0gY2hlIHV0aWxpenphIGlsIGNvbXBvbmVudGUuIEZvbmRhbWVudGFsZSBjb2xsZWdhcmxvIHNlIHNpIHZvZ2xpb25vIGxlIHZhbGlkYXppb25pIHN1bCBzdWJtaXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm06IE5nRm9ybSA9IG51bGw7XHJcblxyXG4gICAgLyoqIFF1YW5kbyB1dGlsaXp6YSB1biBzb3R0b2NvbXBvbmVudGUgYXV0b2NvbXBsZXRlIGFiaWxpdGEgbyBkaXNhYmlsaXRhIGlsIHJlc2V0IGRlbGwnaW5wdXQgcGVyIG9nbmkgc2VsZXppb25lICovXHJcbiAgICBASW5wdXQoKSBBdXRvY29tcGxldGVIaWRlQ2hvaWNlc09uU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRhIHV0aWxpenphcmUgcGVyIHRpcmFyZSBmdW9yaSBpIGRhdGkgZGkgdW4gYXV0b2NvbXBsZXRlICovXHJcbiAgICBASW5wdXQoKSBBdXRvQ29tcGxldGVEYXRhUmV0cmlldmU6IChwYXJhbWV0ZXI6IEdlbmVyaWNQYXJhbWV0ZXIsIHNlYXJjaDogc3RyaW5nLCBieWlkOiBib29sZWFuKSA9PiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10+XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNldHRhcmUgaW4gdW5hIHZvbHRhIHNvbG8gZ2xpIGlucHV0ICoqTGFiZWxDb2xXaWR0aCoqIGUgKipJbnB1dENvbFdpZHRoKiosIGJhc3RhIHNjcml2ZXJsbyBjb24gbGEgc2ludGFzc2kgXCJYIFlcIiAqL1xyXG4gICAgQElucHV0KCkgc2V0IExhYmVsSW5wdXRSYXRpbyhpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHJhdGlvID0gaW5wdXQuc3BsaXQoL1xccy8pO1xyXG4gICAgICAgIHRoaXMuTGFiZWxDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzBdKTtcclxuICAgICAgICB0aGlzLklucHV0Q29sV2lkdGggPSBwYXJzZUludChyYXRpb1sxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZVxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHB1YmxpYyBsYzogTG9jYWxpemF0aW9uU2VydmljZSwgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgaW5qOiBJbmplY3RvciwgcHVibGljIGRhdGVzOiBEYXRlU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqKTogdm9pZCB7XHJcblxyXG4gICAgICAgIGlmICghb2JqKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KG9iaikpXHJcbiAgICAgICAgICAgIHRoaXMuU2luZ2xlUGFyYW1ldGVyTW9kZSA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqIDogW29ial07XHJcblxyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVycy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnNDYWNoZVt0LmlkXSA9IHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXQudHlwZWNvZGUgJiYgIXQudHlwZSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byBuw6kgdW4gdHlwZSBuw6kgdW4gdHlwZWNvZGVcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlY29kZSAmJiAhdC50eXBlKVxyXG4gICAgICAgICAgICAgICAgdC50eXBlID0gdGhpcy51dGlFeHRzLmdldEpzVHlwZUZyb21UeXBlQ29kZSh0LnR5cGVjb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGVjb2RlICYmIHQudHlwZSAhPSB0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBSaWxldmF0ZSBpbmNvbnNpc3RlbnplIGZyYSBpbCBUaXBvICR7dC50eXBlfSBlIGlsIFRpcG8gJHt0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpfSBjYWxjb2xhdG8gZGEgVHlwZUNvZGUgJHt0LnR5cGVjb2RlfSBwZXIgaWwgcGFyYW1ldHJvICR7dC5pZH1gKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gXCJib29sZWFuXCIpXHJcbiAgICAgICAgICAgICAgICB0LnZhbHVlID0gdC52YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgICAgICBpZiAodC5lbnVtdHlwZSB8fCB0LmRpY3R0eXBlKVxyXG4gICAgICAgICAgICAgICAgdC50eXBlID0gJ2VudW0nO1xyXG5cclxuICAgICAgICAgICAgLy8gVmFsb3JlIHZhbGlkbyBtYSBtb2RhbGl0w6AgZGkgdXRpbGl6em8gYSBDb21tYVNlcGFyYXRlZCwgZGV2byBhc3NpY3VyYXJtaSBkaSByaWVtZXR0ZXJlIGxhIHZlcnNpb25lIGNvbiBsYSBzdHJpbmdhXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gJ2VudW0nICYmIHRoaXMuTGlzdEZvcm1hdCA9PSAnQ29tbWFTZXBhcmF0ZWQnICYmIHQubXVsdGllbnVtICYmIHQudmFsdWUgJiYgQXJyYXkuaXNBcnJheSh0LnZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gQWdnaXVzdG8gbGUgbW9kYWxpdMOgIGRpIGZ1bnppb25hbWVudG8gZGVpIHBhcmFtZXRyaSBsaXN0YS4gQ2hlIGludGVybmFtZW50ZSBmdW56aW9uYW5vIHNlbXByZSBjb24gdW5hIGxpc3RhIGRpIHZhbG9yaVxyXG4gICAgICAgICAgICBpZiAodC50eXBlID09ICdlbnVtJyAmJiB0aGlzLkxpc3RGb3JtYXQgPT0gJ0NvbW1hU2VwYXJhdGVkJyAmJiB0Lm11bHRpZW51bSAmJiB0LnZhbHVlICYmICFBcnJheS5pc0FycmF5KHQudmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgdC52YWx1ZSA9IHQudmFsdWUgPyB0LnZhbHVlLnNwbGl0KCcsJykubWFwKHQgPT4gdC50cmltKCkpIDogW107XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlID09ICdlbnVtJyAmJiB0Lm11bHRpZW51bSAmJiB0LnZhbHVlICYmICFBcnJheS5pc0FycmF5KHQudmFsdWUpICYmIHQudmFsdWUudG9TdHJpbmcoKS5zdGFydHNXaXRoKFwiW1wiKSAmJiB0LnZhbHVlLnRvU3RyaW5nKCkuZW5kc1dpdGgoXCJdXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcyA9ICg8c3RyaW5nPnQudmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICB0LnZhbHVlID0gcy5zdWJzdHJpbmcoMSwgcy5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJldmlld1BhcmFtZXRlcnNCaW5kaW5ncygpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVHcm91cHMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGkgY3JlYXJlIGUgb3JkaW5hcmUgaSBncnVwcGkgZGVpIHBhcmFtZXRyaVxyXG4gICAgKi9cclxuICAgIGdlbmVyYXRlR3JvdXBzKCkge1xyXG4gICAgICAgIHRoaXMuR3JvdXBzID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlBhcmFtZXRlcnM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgPCBiLm9yZGVyID8gLTEgOiAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENpY2xvIHR1dHRpIGkgcGFyYW1ldHJpXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyB0aGlzLlBhcmFtZXRlcnMubGVuZ3RoID4gaTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyID0gdGhpcy5QYXJhbWV0ZXJzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwYXJHcm91cE5hbWUgPSBwYXIuZ3JvdXAgPz8gXCJcIjtcclxuICAgICAgICAgICAgICAgIGxldCBncm91cE9yZGVyID0gcGFyLmdyb3VwID8gcGFyLm9yZGVyIDogLTE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2UgaWwgZ3J1cHBvIG5vbiBlc2lzdGUsIGxvIGFnZ2l1bmdvXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuR3JvdXBzLnNvbWUoeCA9PiB4Lmdyb3VwTmFtZSA9PSBwYXJHcm91cE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Hcm91cHMucHVzaChuZXcgR2VuZXJpY1BhcmFtZXRlckdyb3VwKHBhckdyb3VwTmFtZSwgZ3JvdXBPcmRlcikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEluc2VyaXNjbyBpbCBwYXJhbWV0cm8gZGVudHJvIGFsIHN1byBncnVwcG9cclxuICAgICAgICAgICAgICAgIHRoaXMuR3JvdXBzLmZpbmQoZyA9PiBnLmdyb3VwTmFtZSA9PSBwYXJHcm91cE5hbWUpLnBhcmFtZXRlcnMucHVzaChwYXIpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEdlc3Rpb25lIHNvdHRvZ3J1cHBpXHJcbiAgICAgICAgICAgIGxldCBzdWJncm91cHM6IEdlbmVyaWNQYXJhbWV0ZXJHcm91cFtdID0gdGhpcy5Hcm91cHMuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmdyb3VwTmFtZS5pbmNsdWRlcygnwqcnKSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IF87IHN1Ymdyb3Vwcy5sZW5ndGggPiAwOyAoKSA9PiB7IH0pIHtcclxuICAgICAgICAgICAgICAgIC8vIFJlY3VwZXJvIGxhIGxpc3RhIGRpIGdydXBwaSBjaGUgaGFubm8gc290dG9ncnVwcGlcclxuICAgICAgICAgICAgICAgIC8vIFBlciBjb252ZW56aW9uZSwgbmVsIG5vbWUgY29udGVuZ29ubyBcIsKnXCJcclxuICAgICAgICAgICAgICAgIHRoaXMudHJ5VG9BZGRTdWJncm91cHMoc3ViZ3JvdXBzKTtcclxuICAgICAgICAgICAgICAgIHN1Ymdyb3VwcyA9IHRoaXMuR3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cC5ncm91cE5hbWUuaW5jbHVkZXMoJ8KnJykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLkdyb3Vwcy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIDwgYi5vcmRlciA/IC0xIDogMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBjcmVhcmUgZSBvcmRpbmFyZSBpIHNvdHRvZ3J1cHBpIGRlaSBwYXJhbWV0cmlcclxuICAgICovXHJcbiAgICB0cnlUb0FkZFN1Ymdyb3VwcyhzdWJncm91cHM6IEdlbmVyaWNQYXJhbWV0ZXJHcm91cFtdKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IHN1Ymdyb3Vwcy5sZW5ndGggPiBpOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHN1YiA9IHN1Ymdyb3Vwc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIE90dGVuZ28gdW4gbGlzdGEgY29uIGxhIGdlcmFyY2hpYSBkZWkgZ3J1cHBpLCBpbiBvcmRpbmVcclxuICAgICAgICAgICAgbGV0IGdyb3Vwc1BhcmVudEhpZXJhcmNoeSA9IHN1Yi5ncm91cE5hbWUuc3BsaXQoJ8KnJykgPz8gW107XHJcblxyXG4gICAgICAgICAgICAvLyBSZWN1cGVybyBpbCBncnVwcG8gcGFkcmVcclxuICAgICAgICAgICAgbGV0IHBhcmVudEdyb3VwTmFtZSA9IHN1Yi5ncm91cE5hbWUucmVwbGFjZShgwqcke2dyb3Vwc1BhcmVudEhpZXJhcmNoeVtncm91cHNQYXJlbnRIaWVyYXJjaHkubGVuZ3RoIC0gMV19YCwgYGApO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgaWwgZ3J1cHBvIHBhZHJlIG5vbiBlc2lzdGUsIGxvIGFnZ2l1bmdvXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5Hcm91cHMuc29tZSh4ID0+IHguZ3JvdXBOYW1lID09IHBhcmVudEdyb3VwTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuR3JvdXBzLnB1c2gobmV3IEdlbmVyaWNQYXJhbWV0ZXJHcm91cChwYXJlbnRHcm91cE5hbWUsIHN1Yi5vcmRlcikpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBSaW11b3ZvIGRhbCBub21lIGRlbCBncnVwcG8gbCdpbmZvcm1hemlvbmUgc3VsIHBhZHJlIChTaXN0ZW1hbmRvIGFuY2hlIGwnZXRpY2hldHRhKVxyXG4gICAgICAgICAgICAvLyBlIGxvIGFnZ2l1bmdvIGFpIHNvdHRvZ3J1cHBpIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICBzdWIuZ3JvdXBOYW1lID0gc3ViLmdyb3VwTmFtZS5yZXBsYWNlKGAke3BhcmVudEdyb3VwTmFtZX3Cp2AsICcnKTtcclxuICAgICAgICAgICAgbGV0IHBhcmVudEdyb3VwID0gdGhpcy5Hcm91cHMuZmluZCh4ID0+IHguZ3JvdXBOYW1lID09IHBhcmVudEdyb3VwTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRHcm91cD8uc3ViZ3JvdXBzLnNvbWUocyA9PiBzLmdyb3VwTmFtZSA9PSBzdWIuZ3JvdXBOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IHBhcmVudEdyb3VwLnN1Ymdyb3Vwcy5maW5kKGYgPT4gZi5ncm91cE5hbWUgPT0gc3ViLmdyb3VwTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBzdWIucGFyYW1ldGVycy5tYXAocCA9PiB0YXJnZXQucGFyYW1ldGVycy5wdXNoKHApKTtcclxuICAgICAgICAgICAgICAgIHN1Yi5zdWJncm91cHMubWFwKHMgPT4gdGFyZ2V0LnN1Ymdyb3Vwcy5wdXNoKHMpKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5vcmRlciA9IHN1Yi5vcmRlciA8IHRhcmdldC5vcmRlciA/IHN1Yi5vcmRlciA6IHRhcmdldC5vcmRlcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwPy5zdWJncm91cHMucHVzaChzdWIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBSaW11b3ZvIGlsIHNvdHRvZ3J1cHBvIGdydXBwbyBkYWxsYSBsaXN0YVxyXG4gICAgICAgICAgICB0aGlzLkdyb3Vwcy5zcGxpY2UodGhpcy5Hcm91cHMuaW5kZXhPZihzdWIpLCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm4pOiB2b2lkIHsgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhclxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbik6IHZvaWQgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIG1vZGVsbG8gaW4gdXNjaXRhIGUgcHJvcGFnYXJsbyBzdWwgYmluZGluZyBuZ01vZGVsXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5QYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLkdyb3VwcylcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUdyb3VwcygpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFNlIGNpIHNvbm8gZGVsbGUgbW9kaWZpY2hlIGFpIGJpbmRpbmcgcG90cmViYmVybyBlc3NlcmUgY2FtYmlhdGkgaSByZXF1aXJlZC4gUmljcmVvIHR1dHRpIGkgY29tcG9uZW50aSBlIHJpLWlkcmF0byBsYSBjYWNoZSBkZWkgcGFyYW1ldHJpXHJcbiAgICAgICAgdmFyIGNoYW5nZXMgPSB0aGlzLnJldmlld1BhcmFtZXRlcnNCaW5kaW5ncygpO1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEluIGJhc2UgYWkgYmluZGluZyBjYW1iaWF0aSBkZXZvIHRyb3ZhcmUgdHV0dGkgaSBwYXJhbWV0cmkgY2hlIGhhbiBzdWJpdG8gbW9kaWZpY2hlIHN0cnV0dHVyYWxpICh2aXNpYmlsaXTDoCwgb2JibGlnYXRvcmlldMOgKVxyXG4gICAgICAgICAgICAvLyBkaXN0cnVnZ2VybGkgZSByaWNyZWFybGkgaW4gbW9kbyBjaGUgaSBiaW5kaW5nIGxhdG8gaHRtbCBzaSBhZ2dpb3JuaW5vIGRpIGNvbnNlZ3VlbnphLlxyXG4gICAgICAgICAgICAvLyAxOiBGYWNjaW8gdW5hIGNvcGlhIGRlbCBwYXJhbWV0cm8gY29ycmVudGVcclxuICAgICAgICAgICAgLy8gMjogVHJvdm8gbGEgc3VhIHBvc2l6aW9uZSBhbGwnaW50ZXJubyBkZWkgZ3J1cHBpIGUgbG8gc29zdGl0dWlzY28gY29uIGxhIGNvcGlhXHJcbiAgICAgICAgICAgIC8vIDM6IEFnZ2lvcm5vIGxhIGxpc3RhIGRlaSBwYXJhbWV0cmkgZSBsYSBzdWEgY2FjaGUgaW4gbW9kbyBkYSBwdW50YXJlIGFsbCdvZ2dldHRvIG51b3ZvXHJcbiAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaChjaCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLlBhcmFtZXRlcnMuZmluZEluZGV4KHQgPT4gdC5pZCA9PSBjaCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyYW1ldGVyQ29weSA9IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUodGhpcy5QYXJhbWV0ZXJzW2luZGV4XSkgYXMgR2VuZXJpY1BhcmFtZXRlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyYW1ldGVyUmVmRml4ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGlnID0gMDsgaWcgPCB0aGlzLkdyb3Vwcy5sZW5ndGg7IGlnKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IHRoaXMuR3JvdXBzW2lnXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpcCA9IDA7IGlwIDwgZy5wYXJhbWV0ZXJzLmxlbmd0aDsgaXArKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IGcucGFyYW1ldGVyc1tpcF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09IHRoaXMuUGFyYW1ldGVyc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuR3JvdXBzW2lnXS5wYXJhbWV0ZXJzW2lwXSA9IHBhcmFtZXRlckNvcHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJSZWZGaXhlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyUmVmRml4ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnNbaW5kZXhdID0gcGFyYW1ldGVyQ29weVxyXG4gICAgICAgICAgICAgICAgdGhpcy5QYXJhbWV0ZXJzQ2FjaGVbY2hdID0gdGhpcy5QYXJhbWV0ZXJzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBQYXJhbWV0ZXJzQ2xvbmUgPSB0aGlzLnV0aUV4dHMuZGVlcENsb25lKHRoaXMuUGFyYW1ldGVycykgYXMgR2VuZXJpY1BhcmFtZXRlcltdO1xyXG5cclxuICAgICAgICAvLyBBZ2dpdXN0byBsZSBtb2RhbGl0w6AgZGkgZnVuemlvbmFtZW50byBkZWkgcGFyYW1ldHJpIGxpc3RhLiBDaGUgaW50ZXJuYW1lbnRlIGZ1bnppb25hbm8gc2VtcHJlIGNvbiB1bmEgbGlzdGEgZGkgdmFsb3JpXHJcbiAgICAgICAgUGFyYW1ldGVyc0Nsb25lPy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodC50eXBlID09IFwiZW51bVwiICYmIHRoaXMuTGlzdEZvcm1hdCA9PSAnQ29tbWFTZXBhcmF0ZWQnICYmIHQubXVsdGllbnVtICYmIHQudmFsdWUgJiYgQXJyYXkuaXNBcnJheSh0LnZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHQudmFsdWUgPSB0LnZhbHVlLmpvaW4oJywnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5TaW5nbGVQYXJhbWV0ZXJNb2RlID8gUGFyYW1ldGVyc0Nsb25lWzBdIDogUGFyYW1ldGVyc0Nsb25lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpbXVvdmUgaWwgcGFyYW1ldHJvIHNlbGV6aW9uYXRvIGUgcHJvcGFnYSBpbCBtb2RlbGxvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7R2VuZXJpY1BhcmFtZXRlcn0gcGFyIFBhcmFtZXRybyBkYSByaW11b3ZlcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZVBhcmFtZXRlcihwYXI6IEdlbmVyaWNQYXJhbWV0ZXIpIHtcclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMuc3BsaWNlKHRoaXMuUGFyYW1ldGVycy5pbmRleE9mKHBhciksIDEpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZW5lcmF0ZVBhcmFtZXRlckdyb3VwcygpIHtcclxuICAgICAgICBsZXQgR3JvdXBzOiB7IGlkOiBzdHJpbmcsIGdyb3Vwczogc3RyaW5nW10sIG9yZGVyOiBudW1iZXIgfVtdID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVycy5mb3JFYWNoKHBhcmFtID0+IHtcclxuICAgICAgICAgICAgR3JvdXBzLnB1c2goeyBpZDogcGFyYW0uaWQsIGdyb3VwczogcGFyYW0uZ3JvdXAuc3BsaXQoXCLCp1wiKSwgb3JkZXI6IHBhcmFtLm9yZGVyIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgR3JvdXBlZEdyb3VwcyA9IEdyb3Vwcy5yZWR1Y2UoKHIsIGEpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZpcnN0R3JvdXBJZCA9IGEuZ3JvdXBzPy5sZW5ndGggPiAwID8gYS5ncm91cHNbMF0gOiBcIlwiO1xyXG4gICAgICAgICAgICByW2ZpcnN0R3JvdXBJZF0gPSBbLi4ucltmaXJzdEdyb3VwSWRdIHx8IFtdLCBhXTtcclxuICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSwge30pO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhHcm91cGVkR3JvdXBzKTtcclxuXHJcbiAgICAgICAgLy8gQ2ljbG8gZGVsIHJpc3VsdGF0bywgYWdnaXVuZ2VuZG8gaSBncnVwcGkgYWwgbW9kZWxsb1xyXG4gICAgICAgIC8vIFBlciBvZ25pIGdydXBwbyBjaGUgYWdnaXVuZ28sIGFzc2Vnbm8gaSBwYXJhbWV0cmkgaW4gb3JkaW5lXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSaXZlZGUgaSBiaW5kaW5ncyBkZWkgcGFyYW1ldHJpIGluIGJhc2UgYSBsb3JvIGV2ZW50dWFsaSBlc3ByZXNzaW9uaSBkaSBjb250cm9sbG9cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ1tdfSBsaXN0YSBjb24gZ2xpIGlkIGRlaSBwYXJhbWV0cmkgY2hlIHNvbm8gc3RhdGkgbW9kaWZpY2F0aVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJldmlld1BhcmFtZXRlcnNCaW5kaW5ncygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgbGV0IGNoYW5nZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuUGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcCA9IHRoaXMuUGFyYW1ldGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwLnJlcXVpcmVkZXhwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJldlJlcSA9IHAucmVxdWlyZWQ7XHJcbiAgICAgICAgICAgICAgICBwLnJlcXVpcmVkID0gdGhpcy5ldmFsdWF0ZShwLnJlcXVpcmVkZXhwKTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2UmVxICE9IHAucmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHAuaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwLnZpc2libGVleHApIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcmV2VmlzaSA9IHAudmlzaWJsZTtcclxuICAgICAgICAgICAgICAgIHAudmlzaWJsZSA9IHRoaXMuZXZhbHVhdGUocC52aXNpYmxlZXhwKTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2VmlzaSAhPSBwLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHAuaWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1dGEgdW4nZXNwcmVzc2lvbmUgaW4gYmFzZSBhaSBwYXJhbWV0cmkgcHJlc2VudGkgbmVsIG1vZGVsbG8gYXR0dWFsZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gZXhwciBFc3ByZXNzaW9uZSBkYSB2YWx1dGFyZSBzY3JpdHRhIG5lbCBmb3JtYXRvIChyaXBldGliaWxlKSBcIklEICg9PXwhPXw8fD58Pj18PD0pIChgdmFsb3JlYCB8IG51bGwgfCB0cnVlIHwgZmFsc2UgfCBYWFgsWFhYKVwiIHNlcGFyYXRvIGV2ZW50dWFsbWVudGUgZGEgJiYgZWQgfHxcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgKip0cnVlKiogc2UgbGEgY29uZGl6aW9uZSDDqCB2ZXJpZmljYXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlKGV4cHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZWdleCA9IC9cXHM/KFthLXpBLVowLTlfLV0rKVxccz8oIT18PT18PHw+fDw9fD49KVxccz8oYFteYF0rYHxgYHxudWxsfFswLTksXSt8dHJ1ZXxmYWxzZSkvZ207XHJcblxyXG4gICAgICAgIHZhciBtYXRjaGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIHZhciBmaW5hbEV4cHIgPSBleHByO1xyXG4gICAgICAgIHdoaWxlIChtYXRjaGVzID0gcmVnZXguZXhlYyhleHByKSkge1xyXG4gICAgICAgICAgICB2YXIgZnVsbE1hdGNoID0gbWF0Y2hlc1swXS50cmltKCk7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IG1hdGNoZXNbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgb3BlcmF0aW9uID0gbWF0Y2hlc1syXS50cmltKCk7XHJcbiAgICAgICAgICAgIGxldCBiVmFsdWUgPSBtYXRjaGVzWzNdLnRyaW0oKS50cmltKCk7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1hdGNoZXNbM10udHJpbSgpLnRyaW0oKS5yZXBsYWNlKCdgJywgJycpLnJlcGxhY2UoJ2AnLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBmaW5hbEV4cHIgPSBmaW5hbEV4cHIucmVwbGFjZShmdWxsTWF0Y2gsIGB0aGlzLmNoZWNrVmFsdWUoJyR7aWR9JywgJyR7b3BlcmF0aW9ufScsICR7YlZhbHVlID09ICdudWxsJyA/ICdudWxsJyA6IGAnJHt2YWx1ZX0nYH0pYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXZhbChmaW5hbEV4cHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdGl0dWlzY2UgbCdvcGVyYXppb25lIGRpIGNvbXBhcmF6aW9uZSBmcmEgdW4gc2luZ29sbyB2YWxvcmUgZGkgdW4gcGFyYW1ldHJvIGUgdW4gc3VvIHZhbG9yZSBkaSBjb25mcm9udG8gaW4gYmFzZSBhZCB1biBvcGVyYXRvcmVcclxuICAgICAqIFJpY2hpYW1hdGEgZGEgRVZBTFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IENoaWF2ZSBkZWwgcGFyYW1ldHJvIGRpIGN1aSB2ZXJpZmljYXJlIGlsIHZhbG9yZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIE9wZXJhdG9yZSBjb24gY3VpIHZlcmlmaWNhcmUgaWwgdmFsb3JlOiA9PSwgIT0sID4sIDwsID49LCA8PVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbG9yZSBkaSBjb25mcm9udG8gZGEgdXRpbGl6emFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyAqKnRydWUqKiBzZSBsYSBjb25kaXppb25lIMOoIHZlcmlmaWNhdGEsICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGVja1ZhbHVlKGtleTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJQYXIgPSB0aGlzLlBhcmFtZXRlcnNDYWNoZVtrZXldO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoclBhci50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGBcIiR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQoclBhci52YWx1ZSwgYGApfVwiICR7b3BlcmF0b3J9IFwiJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZCh2YWx1ZSwgYGApfVwiYCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGAke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHJQYXIudmFsdWUsIGBgKS50b1N0cmluZygpfSAke29wZXJhdG9yfSAke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHZhbHVlLCBgYCl9YCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYCR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQoclBhci52YWx1ZSwgJ1wiXCInLCB0cnVlKS5yZXBsYWNlKCcsJywgJy4nKX0gJHtvcGVyYXRvcn0gJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZCh2YWx1ZSwgJ1wiXCInLCB0cnVlKS5yZXBsYWNlKCcsJywgJy4nKX1gKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhckRhdGVDb252ID0gYHRoaXMuZGF0ZXMuZ2V0RGF0ZUNvbnZlcnRpb24oXCIke3JQYXIudmFsdWV9XCIpYDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsRGF0ZUNvbnYgPSBgdGhpcy5kYXRlcy5nZXREYXRlQ29udmVydGlvbihcIiR7dmFsdWV9XCIpYDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj09XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSA9PSAke3ZhbERhdGVDb252fSB8fCAoJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3BhckRhdGVDb252fS5pc1NhbWUoJHt2YWxEYXRlQ29udn0pKWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiIT1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9ICR7dmFsRGF0ZUNvbnZ9ICYmICR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgISR7cGFyRGF0ZUNvbnZ9LmlzU2FtZSgke3ZhbERhdGVDb252fSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj5cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAke3BhckRhdGVDb252fS5pc0FmdGVyKCR7dmFsRGF0ZUNvbnZ9KWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPFwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICR7cGFyRGF0ZUNvbnZ9LmlzQmVmb3JlKCR7dmFsRGF0ZUNvbnZ9KWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPj1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAoJHtwYXJEYXRlQ29udn0uaXNBZnRlcigke3ZhbERhdGVDb252fSkgfHwgJHtwYXJEYXRlQ29udn0/LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI8PVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICgke3BhckRhdGVDb252fS5pc0JlZm9yZSgke3ZhbERhdGVDb252fSkgfHwgJHtwYXJEYXRlQ29udn0/LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkVycm9yaSBuZWxsYSB2YWx1dGF6aW9uZSBkZWxsJ2VzcHJlc3Npb25lLiBGYWxsYmFjayBhIGZhbHNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aHJvdyBgQGVzZmFlbnphL3BhcmFtZXRlcnM6IFRpcG8gcGFyYW1ldHJvICR7a2V5fSBub24gcmljb25vc2NpdXRvOiAke3JQYXIudHlwZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGRlZmF1bHRJZm51bGxPclVuZGVmaW5lZDxUPihpdGVtOiBULCBkZmx0OiBULCBlbXB0eVN0cmluZ0lzTnVsbDogYm9vbGVhbiA9IGZhbHNlKTogVCB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCB8fCBpdGVtID09IHVuZGVmaW5lZCB8fCBpdGVtLnRvU3RyaW5nKCkgPT0gJ251bGwnIHx8IChlbXB0eVN0cmluZ0lzTnVsbCAmJiBpdGVtLnRvU3RyaW5nKCkgPT0gXCJcIikpXHJcbiAgICAgICAgICAgIHJldHVybiBkZmx0O1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgZ2V0U291cmNlKHBhcmFtZXRlcjogR2VuZXJpY1BhcmFtZXRlciwgc2VhcmNoOiBzdHJpbmcsIGJ5aWQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10+IHtcclxuICAgICAgICBpZiAoIXRoaXMuQXV0b0NvbXBsZXRlRGF0YVJldHJpZXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJAZm9ybXMtYW5kLXZhbGlkYXRpb25zOiBmdW56aW9uZSBkaSBkYXRhcmV0cmlldmUgbm9uIGltcG9zdGF0YSBwZXIgdW4gcGFyYW1ldHJvIGF1dG9jb21wbGV0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkF1dG9Db21wbGV0ZURhdGFSZXRyaWV2ZShwYXJhbWV0ZXIsIHNlYXJjaCwgYnlpZCk7XHJcbiAgICB9XHJcbn0iLCI8ZGl2ICpuZ0lmPVwiKCFQYXJhbWV0ZXJzIHx8IFBhcmFtZXRlcnMubGVuZ3RoID09IDApICYmIEVtcHR5TWVzc2FnZVwiPlxyXG4gICAgPGVtPnt7RW1wdHlNZXNzYWdlfX08L2VtPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJHcm91cHNcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJUZW1wOyBjb250ZXh0OiB7aXRlbTogeyBncm91cHM6IEdyb3VwcywgaXNTdWJncm91cDogZmFsc2UgfX1cIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI1RlbXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBpdGVtLmdyb3VwczsgbGV0IGsgPSBpbmRleFwiPlxyXG4gICAgICAgIDxkaXYgW2NsYXNzLnBhcnMtc3ViZ3JvdXBdPVwiaXRlbS5pc1N1Ymdyb3VwXCIgW2NsYXNzLnBhcnMtZ3JvdXBdPVwiIWl0ZW0uaXNTdWJncm91cFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiR3JvdXBzT3JTdWJncm91cHNEaXNwbGF5OyBjb250ZXh0OiB7IGl0ZW06IHsgZ3JvdXA6IGdyb3VwLCBpbmRleDogayArIChpdGVtLmluZGV4ID8gKCdfJyArIGl0ZW0uaW5kZXgpIDogJycpLCBpc1N1Ymdyb3VwOiBpdGVtLmlzU3ViZ3JvdXAgfX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwLnN1Ymdyb3Vwcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiVGVtcDsgY29udGV4dDoge2l0ZW06IHsgZ3JvdXBzOiBncm91cC5zdWJncm91cHMsIGluZGV4OiBrICsgKGl0ZW0uaW5kZXggPyAoJ18nICsgaXRlbS5pbmRleCkgOiAnJyksIGlzU3ViZ3JvdXA6IHRydWUgfX07XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI0dyb3Vwc09yU3ViZ3JvdXBzRGlzcGxheSBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgIDxkaXYgKm5nSWY9XCJpdGVtLmdyb3VwXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uZ3JvdXAuZ3JvdXBOYW1lXCIgW2NsYXNzLnBhcnMtZ3JvdXAtdGl0bGVdPVwiIWl0ZW0uaXNTdWJncm91cFwiIFtjbGFzcy5wYXJzLXN1Ymdyb3VwLXRpdGxlXT1cIml0ZW0uaXNTdWJncm91cFwiPlxyXG4gICAgICAgICAgICB7e2l0ZW0uZ3JvdXAuZ3JvdXBOYW1lfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5ncm91cC5wYXJhbWV0ZXJzICYmIGl0ZW0uZ3JvdXAucGFyYW1ldGVycy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0Zvcj1cImxldCBwYXIgb2YgaXRlbS5ncm91cC5wYXJhbWV0ZXJzOyBsZXQgaT0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDtcIiBbY2xhc3MuYXBwLW1hcmdpbi1ib3R0b20tMF09XCJMYXN0UGFyYW1ldGVyTm9NYXJnaW4gJiYgbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhci52aXNpYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLXt7TGFiZWxDb2xXaWR0aH19IG0tdC01XCI+PHNwYW4gKm5nSWY9XCJSZW1vdmFsXCIgY2xhc3M9XCJmYSBmYS1yZW1vdmUgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwicmVtb3ZlUGFyYW1ldGVyKHBhcilcIj4mbmJzcDs8L3NwYW4+e3twYXIuZGVzY3JpcHRpb259fXt7cGFyLnJlcXVpcmVkID8gJyonIDogJyd9fTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBEYXRhLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWRhdGUgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tZGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tU2Ugc3RyaW5nYS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdzdHJpbmcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWlucHV0IFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tU2UgbnVtZXJvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0taW5wdXQgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3IgcGF0dGVybj1cInt7cGFyLnBhdHRlcm4gfHwgJ15bKy1dP1swLTldKlssXT9bMC05XSskJ319XCI+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBib29sZWFuLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fSBtLXQtNVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2Jvb2xlYW4nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWNoZWNrYm94IFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBlbnVtIHNpbmdsZSBzZWxlY3QtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgIXBhci5tdWx0aWVudW0gJiYgIXBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tc2VsZWN0IFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yIFtTb3VyY2VdPVwicGFyLmVudW12YWx1ZXNcIj48L2Zvcm0tc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBlbnVtIG11bHRpIHNlbGVjdC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiBwYXIubXVsdGllbnVtICYmICFwYXIuc291cmNlYXBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLW11bHRpc2VsZWN0IFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbVXNlQ29tbWFTZXBhcmF0ZWRMaXN0XT1cInRydWVcIiBbU2VsZWN0TGFiZWxdPVwiKCdTZWxlemlvbmEnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJ1wiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTb3VyY2VdPVwicGFyLmVudW12YWx1ZXNcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tU2UgZW51bSBtdWx0aXNlbGVjdCBzZW56YSBzb3JnZW50ZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiBwYXIubXVsdGllbnVtICYmICFwYXIuc291cmNlYXBpICYmICFwYXIuZW51bXZhbHVlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1hdXRvY29tcGxldGUgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtIaWRlQ2hvaWNlc09uU2VsZWN0aW9uXT1cInRydWVcIiBbU2VsZWN0TGFiZWxdPVwiKCdTZWxlemlvbmEnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJ1wiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtVbmJvdW5kTW9kZV09XCJ0cnVlXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tYXV0b2NvbXBsZXRlPiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gYXV0b2NvbXBsZXRlLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2VudW0nICYmICFwYXIubXVsdGllbnVtICYmIHBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tYXV0b2NvbXBsZXRlIFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbU2VhcmNoRnVuY3Rpb25dPVwiZ2V0U291cmNlLmJpbmQodGhpcywgcGFyKVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tU2UgZW51bSBtdWx0aXNlbGVjdCBhdXRvY29tcGxldGUtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgcGFyLm11bHRpZW51bSAmJiBwYXIuc291cmNlYXBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWF1dG9jb21wbGV0ZSBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiAgW0Zvcm1dPVwiRm9ybVwiIFtIaWRlQ2hvaWNlc09uU2VsZWN0aW9uXT1cIkF1dG9jb21wbGV0ZUhpZGVDaG9pY2VzT25TZWxlY3Rpb25cIiBbTXVsdGldPVwidHJ1ZVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW1NlYXJjaEZ1bmN0aW9uXT1cImdldFNvdXJjZS5iaW5kKHRoaXMsIHBhcilcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUE4RSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFJLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBWSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTlELGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7OztBQUV2RSx1SEFBdUg7QUFldkgsTUFBTSxPQUFPLHFCQUFxQjtJQXlEOUIsbUlBQW1JO0lBQ25JLElBQWEsZUFBZSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQW9CLE9BQXVCLEVBQVMsRUFBdUIsRUFBUyxHQUFzQixF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WUFDSSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUM7WUFDcEQsS0FBSyxFQUFFLElBQUk7U0FDZDtLQUNKLDBCQzFCTCxzNk5BcUVjOzRGRHRDRCxxQkFBcUI7a0JBZGpDLFNBQVM7K0JBQ0ksZUFBZSxhQUNkO3dCQUNQLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7d0JBQzNEOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDOzRCQUNwRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSixpQkFFYyxpQkFBaUIsQ0FBQyxJQUFJO3dOQXlCNUIsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxrQ0FBa0M7c0JBQTFDLEtBQUs7Z0JBR0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUdPLGVBQWU7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIE5nQ29udHJvbCwgTmdGb3JtLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vIENsYXNzaVxyXG5pbXBvcnQgeyBHZW5lcmljUGFyYW1ldGVyIH0gZnJvbSAnLi9tb2RlbHMvR2VuZXJpY1BhcmFtZXRlcic7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgRXNQYXJhbWV0ZXJzTG9jIH0gZnJvbSBcIi4vZXNfcGFyYW1ldGVycy5jb21wb25lbnQubG9jXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgR2VuZXJpY1BhcmFtZXRlckdyb3VwIH0gZnJvbSBcIi4vbW9kZWxzL0dlbmVyaWNQYXJhbWV0ZXJHcm91cFwiO1xyXG5cclxuLyoqIENvbXBvbmVudGUgY2hlIHBlcm1ldHRlIGRpIGdyYWZpY2FyZSB1bmEgbGlzdGEgZGkgKipHZW5lcmljUGFyYW1ldGVyKiogY29tZSBJbnB1dCBpbiBiYXNlIGFsIGxvcm8gdGlwbyBzcGVjaWZpY28gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJlcy1wYXJhbWV0ZXJzXCIsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBFc1BhcmFtZXRlcnNMb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFc1BhcmFtZXRlcnNDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vZXNfcGFyYW1ldGVycy5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2VzX3BhcmFtZXRlcnMuY29tcG9uZW50Lmh0bWxcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNQYXJhbWV0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugc2kgbGF2b3JhIGEgc2luZ29sbyBwYXJhbWV0cm8gZm9yemF0byBkZW50cm8gdW4gYXJyYXkgZm9yIHRoZSBnbG9yeSBvZiBzYXRhbiAqL1xyXG4gICAgcHJpdmF0ZSBTaW5nbGVQYXJhbWV0ZXJNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gZGVsIGNvbXBvbmVudGUgc3UgY3VpIHZlbmdvbm8gZWZmZXR0dWF0ZSBsZSBncmFmaWNhemlvbmkgKi9cclxuICAgIHB1YmxpYyBQYXJhbWV0ZXJzOiBHZW5lcmljUGFyYW1ldGVyW107XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gZGVsIGNvbXBvbmVudGUgc3UgY3VpIHZlbmdvbm8gZWZmZXR0dWF0ZSBsZSBncmFmaWNhemlvbmkgKi9cclxuICAgIHB1YmxpYyBHcm91cHM6IEdlbmVyaWNQYXJhbWV0ZXJHcm91cFtdO1xyXG5cclxuICAgIC8qKiBDYWNoZSBwZXIgZmFyZSBsb29rdXAgcmFwaWRpIGluIGZhc2UgZGkgdmFsdXRhemlvbmUgZXNwcmVzc2lvbmkgZGkgdmlzaWJpbGl0w6AgZSBvYmJsaWdhdG9yaWV0w6AgKi9cclxuICAgIHByaXZhdGUgUGFyYW1ldGVyc0NhY2hlOiB7IFtpZDogc3RyaW5nXTogR2VuZXJpY1BhcmFtZXRlciB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhciBcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gICAgLyoqIEluZGljYSBjaGUgaWwgcGFyYW1ldHJvIGRldmUgZXNzZXJlIGluIG1vZGFsaXTDoCBkaXNwbGF5ICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIGwndWx0aW1vIHBhcmFtZXRybyBub24gZGV2ZSBhdmVyZSBtYXJnaW5lIGluIGZvbmRvICovXHJcbiAgICBASW5wdXQoKSBMYXN0UGFyYW1ldGVyTm9NYXJnaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGxhIGxhYmVsICovXHJcbiAgICBASW5wdXQoKSBMYWJlbENvbFdpZHRoOiBudW1iZXIgPSA0O1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgSW5wdXRDb2xXaWR0aDogbnVtYmVyID0gODtcclxuXHJcbiAgICAvKiogSW5wdXQgYSBjdWkgY29sbGVnYXJlIGxhIHZhcmlhYmlsZSAqKnN1Ym1pdHRlZCoqIGRlbCBmb3JtIGFsbCdpbnRlcm5vIGRlbCBxdWFsZSB2aWVuZSB1dGlsaXp6YXRvIHF1ZXN0byBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogVmFsb3JlIGRhIG1vc3RyYXJlIHF1YWxvcmEgbm9uIGZvc3Nlcm8gYW5jb3JhIHJpY2V2dXRpIGkgKipQYXJhbWV0ZXJzKiogZGEgbW9zdHJhcmUgKi9cclxuICAgIEBJbnB1dCgpIEVtcHR5TWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgcmltdW92ZXJlIGkgcGFyYW1ldHJpIGRhbGxhIGxpc3RhIGNsaWNjYW5kbyBzdWxsYSBYIGRhdmFudGkgYWxsYSBMYWJlbCAqL1xyXG4gICAgQElucHV0KCkgUmVtb3ZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaSBjb21wb25lbnRpIGRpIElucHV0IGdlbmVyYXRpIHNvbm8gUmVhZG9ubHkgbyBubyAqL1xyXG4gICAgQElucHV0KCkgUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIGlsIGZvcm1hdG8gbGlzdGEgY2hlIGRldidlc3NlcmUgdXRpbGl6emF0byAqL1xyXG4gICAgQElucHV0KCkgTGlzdEZvcm1hdDogJ0NvbW1hU2VwYXJhdGVkJyB8ICdBcnJheScgPSAnQXJyYXknO1xyXG5cclxuICAgIC8qKiBGb3JtIGNoZSB1dGlsaXp6YSBpbCBjb21wb25lbnRlLiBGb25kYW1lbnRhbGUgY29sbGVnYXJsbyBzZSBzaSB2b2dsaW9ubyBsZSB2YWxpZGF6aW9uaSBzdWwgc3VibWl0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtOiBOZ0Zvcm0gPSBudWxsO1xyXG5cclxuICAgIC8qKiBRdWFuZG8gdXRpbGl6emEgdW4gc290dG9jb21wb25lbnRlIGF1dG9jb21wbGV0ZSBhYmlsaXRhIG8gZGlzYWJpbGl0YSBpbCByZXNldCBkZWxsJ2lucHV0IHBlciBvZ25pIHNlbGV6aW9uZSAqL1xyXG4gICAgQElucHV0KCkgQXV0b2NvbXBsZXRlSGlkZUNob2ljZXNPblNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBGdW56aW9uZSBkYSB1dGlsaXp6YXJlIHBlciB0aXJhcmUgZnVvcmkgaSBkYXRpIGRpIHVuIGF1dG9jb21wbGV0ZSAqL1xyXG4gICAgQElucHV0KCkgQXV0b0NvbXBsZXRlRGF0YVJldHJpZXZlOiAocGFyYW1ldGVyOiBHZW5lcmljUGFyYW1ldGVyLCBzZWFyY2g6IHN0cmluZywgYnlpZDogYm9vbGVhbikgPT4gT2JzZXJ2YWJsZTx7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdPlxyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCAqKkxhYmVsQ29sV2lkdGgqKiBlICoqSW5wdXRDb2xXaWR0aCoqLCBiYXN0YSBzY3JpdmVybG8gY29uIGxhIHNpbnRhc3NpIFwiWCBZXCIgKi9cclxuICAgIEBJbnB1dCgpIHNldCBMYWJlbElucHV0UmF0aW8oaW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHZhciByYXRpbyA9IGlucHV0LnNwbGl0KC9cXHMvKTtcclxuICAgICAgICB0aGlzLkxhYmVsQ29sV2lkdGggPSBwYXJzZUludChyYXRpb1swXSk7XHJcbiAgICAgICAgdGhpcy5JbnB1dENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmVcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHV0aUV4dHM6IFV0aWxpdHlTZXJ2aWNlLCBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGluajogSW5qZWN0b3IsIHB1YmxpYyBkYXRlczogRGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhclxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKG9iaik6IHZvaWQge1xyXG5cclxuICAgICAgICBpZiAoIW9iailcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZighQXJyYXkuaXNBcnJheShvYmopKVxyXG4gICAgICAgICAgICB0aGlzLlNpbmdsZVBhcmFtZXRlck1vZGUgPSB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVycyA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iaiA6IFtvYmpdO1xyXG5cclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnNDYWNoZSA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5QYXJhbWV0ZXJzQ2FjaGVbdC5pZF0gPSB0O1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0LnR5cGVjb2RlICYmICF0LnR5cGUpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJOb24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gbsOpIHVuIHR5cGUgbsOpIHVuIHR5cGVjb2RlXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudHlwZWNvZGUgJiYgIXQudHlwZSlcclxuICAgICAgICAgICAgICAgIHQudHlwZSA9IHRoaXMudXRpRXh0cy5nZXRKc1R5cGVGcm9tVHlwZUNvZGUodC50eXBlY29kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlY29kZSAmJiB0LnR5cGUgIT0gdGhpcy51dGlFeHRzLmdldEpzVHlwZUZyb21UeXBlQ29kZSh0LnR5cGVjb2RlKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgUmlsZXZhdGUgaW5jb25zaXN0ZW56ZSBmcmEgaWwgVGlwbyAke3QudHlwZX0gZSBpbCBUaXBvICR7dGhpcy51dGlFeHRzLmdldEpzVHlwZUZyb21UeXBlQ29kZSh0LnR5cGVjb2RlKX0gY2FsY29sYXRvIGRhIFR5cGVDb2RlICR7dC50eXBlY29kZX0gcGVyIGlsIHBhcmFtZXRybyAke3QuaWR9YCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlID09IFwiYm9vbGVhblwiKVxyXG4gICAgICAgICAgICAgICAgdC52YWx1ZSA9IHQudmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQuZW51bXR5cGUgfHwgdC5kaWN0dHlwZSlcclxuICAgICAgICAgICAgICAgIHQudHlwZSA9ICdlbnVtJztcclxuXHJcbiAgICAgICAgICAgIC8vIFZhbG9yZSB2YWxpZG8gbWEgbW9kYWxpdMOgIGRpIHV0aWxpenpvIGEgQ29tbWFTZXBhcmF0ZWQsIGRldm8gYXNzaWN1cmFybWkgZGkgcmllbWV0dGVyZSBsYSB2ZXJzaW9uZSBjb24gbGEgc3RyaW5nYVxyXG4gICAgICAgICAgICBpZiAodC50eXBlID09ICdlbnVtJyAmJiB0aGlzLkxpc3RGb3JtYXQgPT0gJ0NvbW1hU2VwYXJhdGVkJyAmJiB0Lm11bHRpZW51bSAmJiB0LnZhbHVlICYmIEFycmF5LmlzQXJyYXkodC52YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFnZ2l1c3RvIGxlIG1vZGFsaXTDoCBkaSBmdW56aW9uYW1lbnRvIGRlaSBwYXJhbWV0cmkgbGlzdGEuIENoZSBpbnRlcm5hbWVudGUgZnVuemlvbmFubyBzZW1wcmUgY29uIHVuYSBsaXN0YSBkaSB2YWxvcmlcclxuICAgICAgICAgICAgaWYgKHQudHlwZSA9PSAnZW51bScgJiYgdGhpcy5MaXN0Rm9ybWF0ID09ICdDb21tYVNlcGFyYXRlZCcgJiYgdC5tdWx0aWVudW0gJiYgdC52YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh0LnZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHQudmFsdWUgPSB0LnZhbHVlID8gdC52YWx1ZS5zcGxpdCgnLCcpLm1hcCh0ID0+IHQudHJpbSgpKSA6IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudHlwZSA9PSAnZW51bScgJiYgdC5tdWx0aWVudW0gJiYgdC52YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh0LnZhbHVlKSAmJiB0LnZhbHVlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChcIltcIikgJiYgdC52YWx1ZS50b1N0cmluZygpLmVuZHNXaXRoKFwiXVwiKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHMgPSA8c3RyaW5nW10+SlNPTi5wYXJzZSh0LnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdC52YWx1ZSA9IHMuam9pbignLCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUdyb3VwcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBjcmVhcmUgZSBvcmRpbmFyZSBpIGdydXBwaSBkZWkgcGFyYW1ldHJpXHJcbiAgICAqL1xyXG4gICAgZ2VuZXJhdGVHcm91cHMoKSB7XHJcbiAgICAgICAgdGhpcy5Hcm91cHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuUGFyYW1ldGVycz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnMuc29ydCgoYSwgYikgPT4gYS5vcmRlciA8IGIub3JkZXIgPyAtMSA6IDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2ljbG8gdHV0dGkgaSBwYXJhbWV0cmlcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IHRoaXMuUGFyYW1ldGVycy5sZW5ndGggPiBpOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBwYXIgPSB0aGlzLlBhcmFtZXRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHBhckdyb3VwTmFtZSA9IHBhci5ncm91cCA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwT3JkZXIgPSBwYXIuZ3JvdXAgPyBwYXIub3JkZXIgOiAtMTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZSBpbCBncnVwcG8gbm9uIGVzaXN0ZSwgbG8gYWdnaXVuZ29cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5Hcm91cHMuc29tZSh4ID0+IHguZ3JvdXBOYW1lID09IHBhckdyb3VwTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkdyb3Vwcy5wdXNoKG5ldyBHZW5lcmljUGFyYW1ldGVyR3JvdXAocGFyR3JvdXBOYW1lLCBncm91cE9yZGVyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSW5zZXJpc2NvIGlsIHBhcmFtZXRybyBkZW50cm8gYWwgc3VvIGdydXBwb1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Hcm91cHMuZmluZChnID0+IGcuZ3JvdXBOYW1lID09IHBhckdyb3VwTmFtZSkucGFyYW1ldGVycy5wdXNoKHBhcilcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gR2VzdGlvbmUgc290dG9ncnVwcGlcclxuICAgICAgICAgICAgbGV0IHN1Ymdyb3VwczogR2VuZXJpY1BhcmFtZXRlckdyb3VwW10gPSB0aGlzLkdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZ3JvdXBOYW1lLmluY2x1ZGVzKCfCpycpKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgXzsgc3ViZ3JvdXBzLmxlbmd0aCA+IDA7ICgpID0+IHsgfSkge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gbGEgbGlzdGEgZGkgZ3J1cHBpIGNoZSBoYW5ubyBzb3R0b2dydXBwaVxyXG4gICAgICAgICAgICAgICAgLy8gUGVyIGNvbnZlbnppb25lLCBuZWwgbm9tZSBjb250ZW5nb25vIFwiwqdcIlxyXG4gICAgICAgICAgICAgICAgdGhpcy50cnlUb0FkZFN1Ymdyb3VwcyhzdWJncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgc3ViZ3JvdXBzID0gdGhpcy5Hcm91cHMuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmdyb3VwTmFtZS5pbmNsdWRlcygnwqcnKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuR3JvdXBzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgPCBiLm9yZGVyID8gLTEgOiAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRpIGNyZWFyZSBlIG9yZGluYXJlIGkgc290dG9ncnVwcGkgZGVpIHBhcmFtZXRyaVxyXG4gICAgKi9cclxuICAgIHRyeVRvQWRkU3ViZ3JvdXBzKHN1Ymdyb3VwczogR2VuZXJpY1BhcmFtZXRlckdyb3VwW10pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgc3ViZ3JvdXBzLmxlbmd0aCA+IGk7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgc3ViID0gc3ViZ3JvdXBzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gT3R0ZW5nbyB1biBsaXN0YSBjb24gbGEgZ2VyYXJjaGlhIGRlaSBncnVwcGksIGluIG9yZGluZVxyXG4gICAgICAgICAgICBsZXQgZ3JvdXBzUGFyZW50SGllcmFyY2h5ID0gc3ViLmdyb3VwTmFtZS5zcGxpdCgnwqcnKSA/PyBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlY3VwZXJvIGlsIGdydXBwbyBwYWRyZVxyXG4gICAgICAgICAgICBsZXQgcGFyZW50R3JvdXBOYW1lID0gc3ViLmdyb3VwTmFtZS5yZXBsYWNlKGDCpyR7Z3JvdXBzUGFyZW50SGllcmFyY2h5W2dyb3Vwc1BhcmVudEhpZXJhcmNoeS5sZW5ndGggLSAxXX1gLCBgYCk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBpbCBncnVwcG8gcGFkcmUgbm9uIGVzaXN0ZSwgbG8gYWdnaXVuZ29cclxuICAgICAgICAgICAgaWYgKCF0aGlzLkdyb3Vwcy5zb21lKHggPT4geC5ncm91cE5hbWUgPT0gcGFyZW50R3JvdXBOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Hcm91cHMucHVzaChuZXcgR2VuZXJpY1BhcmFtZXRlckdyb3VwKHBhcmVudEdyb3VwTmFtZSwgc3ViLm9yZGVyKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJpbXVvdm8gZGFsIG5vbWUgZGVsIGdydXBwbyBsJ2luZm9ybWF6aW9uZSBzdWwgcGFkcmUgKFNpc3RlbWFuZG8gYW5jaGUgbCdldGljaGV0dGEpXHJcbiAgICAgICAgICAgIC8vIGUgbG8gYWdnaXVuZ28gYWkgc290dG9ncnVwcGkgZGVsIHBhZHJlXHJcbiAgICAgICAgICAgIHN1Yi5ncm91cE5hbWUgPSBzdWIuZ3JvdXBOYW1lLnJlcGxhY2UoYCR7cGFyZW50R3JvdXBOYW1lfcKnYCwgJycpO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50R3JvdXAgPSB0aGlzLkdyb3Vwcy5maW5kKHggPT4geC5ncm91cE5hbWUgPT0gcGFyZW50R3JvdXBOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHBhcmVudEdyb3VwPy5zdWJncm91cHMuc29tZShzID0+IHMuZ3JvdXBOYW1lID09IHN1Yi5ncm91cE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcGFyZW50R3JvdXAuc3ViZ3JvdXBzLmZpbmQoZiA9PiBmLmdyb3VwTmFtZSA9PSBzdWIuZ3JvdXBOYW1lKTtcclxuICAgICAgICAgICAgICAgIHN1Yi5wYXJhbWV0ZXJzLm1hcChwID0+IHRhcmdldC5wYXJhbWV0ZXJzLnB1c2gocCkpO1xyXG4gICAgICAgICAgICAgICAgc3ViLnN1Ymdyb3Vwcy5tYXAocyA9PiB0YXJnZXQuc3ViZ3JvdXBzLnB1c2gocykpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lm9yZGVyID0gc3ViLm9yZGVyIDwgdGFyZ2V0Lm9yZGVyID8gc3ViLm9yZGVyIDogdGFyZ2V0Lm9yZGVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXA/LnN1Ymdyb3Vwcy5wdXNoKHN1Yik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJpbXVvdm8gaWwgc290dG9ncnVwcG8gZ3J1cHBvIGRhbGxhIGxpc3RhXHJcbiAgICAgICAgICAgIHRoaXMuR3JvdXBzLnNwbGljZSh0aGlzLkdyb3Vwcy5pbmRleE9mKHN1YiksIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbik6IHZvaWQgeyB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKTogdm9pZCB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRpIGdlc3RpcmUgaWwgbW9kZWxsbyBpbiB1c2NpdGEgZSBwcm9wYWdhcmxvIHN1bCBiaW5kaW5nIG5nTW9kZWxcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLlBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuR3JvdXBzKVxyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlR3JvdXBzKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2UgY2kgc29ubyBkZWxsZSBtb2RpZmljaGUgYWkgYmluZGluZyBwb3RyZWJiZXJvIGVzc2VyZSBjYW1iaWF0aSBpIHJlcXVpcmVkLiBSaWNyZW8gdHV0dGkgaSBjb21wb25lbnRpIGUgcmktaWRyYXRvIGxhIGNhY2hlIGRlaSBwYXJhbWV0cmlcclxuICAgICAgICB2YXIgY2hhbmdlcyA9IHRoaXMucmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgLy8gSW4gYmFzZSBhaSBiaW5kaW5nIGNhbWJpYXRpIGRldm8gdHJvdmFyZSB0dXR0aSBpIHBhcmFtZXRyaSBjaGUgaGFuIHN1Yml0byBtb2RpZmljaGUgc3RydXR0dXJhbGkgKHZpc2liaWxpdMOgLCBvYmJsaWdhdG9yaWV0w6ApXHJcbiAgICAgICAgICAgIC8vIGRpc3RydWdnZXJsaSBlIHJpY3JlYXJsaSBpbiBtb2RvIGNoZSBpIGJpbmRpbmcgbGF0byBodG1sIHNpIGFnZ2lvcm5pbm8gZGkgY29uc2VndWVuemEuXHJcbiAgICAgICAgICAgIC8vIDE6IEZhY2NpbyB1bmEgY29waWEgZGVsIHBhcmFtZXRybyBjb3JyZW50ZVxyXG4gICAgICAgICAgICAvLyAyOiBUcm92byBsYSBzdWEgcG9zaXppb25lIGFsbCdpbnRlcm5vIGRlaSBncnVwcGkgZSBsbyBzb3N0aXR1aXNjbyBjb24gbGEgY29waWFcclxuICAgICAgICAgICAgLy8gMzogQWdnaW9ybm8gbGEgbGlzdGEgZGVpIHBhcmFtZXRyaSBlIGxhIHN1YSBjYWNoZSBpbiBtb2RvIGRhIHB1bnRhcmUgYWxsJ29nZ2V0dG8gbnVvdm9cclxuICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuUGFyYW1ldGVycy5maW5kSW5kZXgodCA9PiB0LmlkID09IGNoKTtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb3B5ID0gdGhpcy51dGlFeHRzLmRlZXBDbG9uZSh0aGlzLlBhcmFtZXRlcnNbaW5kZXhdKSBhcyBHZW5lcmljUGFyYW1ldGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJSZWZGaXhlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWcgPSAwOyBpZyA8IHRoaXMuR3JvdXBzLmxlbmd0aDsgaWcrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBnID0gdGhpcy5Hcm91cHNbaWddO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGlwID0gMDsgaXAgPCBnLnBhcmFtZXRlcnMubGVuZ3RoOyBpcCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gZy5wYXJhbWV0ZXJzW2lwXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gdGhpcy5QYXJhbWV0ZXJzW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Hcm91cHNbaWddLnBhcmFtZXRlcnNbaXBdID0gcGFyYW1ldGVyQ29weTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclJlZkZpeGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJSZWZGaXhlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVyc1tpbmRleF0gPSBwYXJhbWV0ZXJDb3B5XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnNDYWNoZVtjaF0gPSB0aGlzLlBhcmFtZXRlcnNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIFBhcmFtZXRlcnNDbG9uZSA9IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUodGhpcy5QYXJhbWV0ZXJzKSBhcyBHZW5lcmljUGFyYW1ldGVyW107XHJcblxyXG4gICAgICAgIC8vIEFnZ2l1c3RvIGxlIG1vZGFsaXTDoCBkaSBmdW56aW9uYW1lbnRvIGRlaSBwYXJhbWV0cmkgbGlzdGEuIENoZSBpbnRlcm5hbWVudGUgZnVuemlvbmFubyBzZW1wcmUgY29uIHVuYSBsaXN0YSBkaSB2YWxvcmlcclxuICAgICAgICBQYXJhbWV0ZXJzQ2xvbmU/LmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gXCJlbnVtXCIgJiYgdGhpcy5MaXN0Rm9ybWF0ID09ICdDb21tYVNlcGFyYXRlZCcgJiYgdC5tdWx0aWVudW0gJiYgdC52YWx1ZSAmJiBBcnJheS5pc0FycmF5KHQudmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgdC52YWx1ZSA9IHQudmFsdWUuam9pbignLCcpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLlNpbmdsZVBhcmFtZXRlck1vZGUgPyBQYXJhbWV0ZXJzQ2xvbmVbMF0gOiBQYXJhbWV0ZXJzQ2xvbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmltdW92ZSBpbCBwYXJhbWV0cm8gc2VsZXppb25hdG8gZSBwcm9wYWdhIGlsIG1vZGVsbG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtHZW5lcmljUGFyYW1ldGVyfSBwYXIgUGFyYW1ldHJvIGRhIHJpbXVvdmVyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVtb3ZlUGFyYW1ldGVyKHBhcjogR2VuZXJpY1BhcmFtZXRlcikge1xyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVycy5zcGxpY2UodGhpcy5QYXJhbWV0ZXJzLmluZGV4T2YocGFyKSwgMSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdlbmVyYXRlUGFyYW1ldGVyR3JvdXBzKCkge1xyXG4gICAgICAgIGxldCBHcm91cHM6IHsgaWQ6IHN0cmluZywgZ3JvdXBzOiBzdHJpbmdbXSwgb3JkZXI6IG51bWJlciB9W10gPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLmZvckVhY2gocGFyYW0gPT4ge1xyXG4gICAgICAgICAgICBHcm91cHMucHVzaCh7IGlkOiBwYXJhbS5pZCwgZ3JvdXBzOiBwYXJhbS5ncm91cC5zcGxpdChcIsKnXCIpLCBvcmRlcjogcGFyYW0ub3JkZXIgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBHcm91cGVkR3JvdXBzID0gR3JvdXBzLnJlZHVjZSgociwgYSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZmlyc3RHcm91cElkID0gYS5ncm91cHM/Lmxlbmd0aCA+IDAgPyBhLmdyb3Vwc1swXSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHJbZmlyc3RHcm91cElkXSA9IFsuLi5yW2ZpcnN0R3JvdXBJZF0gfHwgW10sIGFdO1xyXG4gICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9LCB7fSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKEdyb3VwZWRHcm91cHMpO1xyXG5cclxuICAgICAgICAvLyBDaWNsbyBkZWwgcmlzdWx0YXRvLCBhZ2dpdW5nZW5kbyBpIGdydXBwaSBhbCBtb2RlbGxvXHJcbiAgICAgICAgLy8gUGVyIG9nbmkgZ3J1cHBvIGNoZSBhZ2dpdW5nbywgYXNzZWdubyBpIHBhcmFtZXRyaSBpbiBvcmRpbmVcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpdmVkZSBpIGJpbmRpbmdzIGRlaSBwYXJhbWV0cmkgaW4gYmFzZSBhIGxvcm8gZXZlbnR1YWxpIGVzcHJlc3Npb25pIGRpIGNvbnRyb2xsb1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nW119IGxpc3RhIGNvbiBnbGkgaWQgZGVpIHBhcmFtZXRyaSBjaGUgc29ubyBzdGF0aSBtb2RpZmljYXRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBsZXQgY2hhbmdlcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5QYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5QYXJhbWV0ZXJzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHAucmVxdWlyZWRleHApIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcmV2UmVxID0gcC5yZXF1aXJlZDtcclxuICAgICAgICAgICAgICAgIHAucmVxdWlyZWQgPSB0aGlzLmV2YWx1YXRlKHAucmVxdWlyZWRleHApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZSZXEgIT0gcC5yZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2gocC5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHAudmlzaWJsZWV4cCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByZXZWaXNpID0gcC52aXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgcC52aXNpYmxlID0gdGhpcy5ldmFsdWF0ZShwLnZpc2libGVleHApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZWaXNpICE9IHAudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2gocC5pZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2hhbmdlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbHV0YSB1bidlc3ByZXNzaW9uZSBpbiBiYXNlIGFpIHBhcmFtZXRyaSBwcmVzZW50aSBuZWwgbW9kZWxsbyBhdHR1YWxlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBleHByIEVzcHJlc3Npb25lIGRhIHZhbHV0YXJlIHNjcml0dGEgbmVsIGZvcm1hdG8gKHJpcGV0aWJpbGUpIFwiSUQgKD09fCE9fDx8Pnw+PXw8PSkgKGB2YWxvcmVgIHwgbnVsbCB8IHRydWUgfCBmYWxzZSB8IFhYWCxYWFgpXCIgc2VwYXJhdG8gZXZlbnR1YWxtZW50ZSBkYSAmJiBlZCB8fFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyAqKnRydWUqKiBzZSBsYSBjb25kaXppb25lIMOoIHZlcmlmaWNhdGEsICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGUoZXhwcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJlZ2V4ID0gL1xccz8oW2EtekEtWjAtOV8tXSspXFxzPyghPXw9PXw8fD58PD18Pj0pXFxzPyhgW15gXStgfGBgfG51bGx8WzAtOSxdK3x0cnVlfGZhbHNlKS9nbTtcclxuXHJcbiAgICAgICAgdmFyIG1hdGNoZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgdmFyIGZpbmFsRXhwciA9IGV4cHI7XHJcbiAgICAgICAgd2hpbGUgKG1hdGNoZXMgPSByZWdleC5leGVjKGV4cHIpKSB7XHJcbiAgICAgICAgICAgIHZhciBmdWxsTWF0Y2ggPSBtYXRjaGVzWzBdLnRyaW0oKTtcclxuICAgICAgICAgICAgdmFyIGlkID0gbWF0Y2hlc1sxXS50cmltKCk7XHJcbiAgICAgICAgICAgIHZhciBvcGVyYXRpb24gPSBtYXRjaGVzWzJdLnRyaW0oKTtcclxuICAgICAgICAgICAgbGV0IGJWYWx1ZSA9IG1hdGNoZXNbM10udHJpbSgpLnRyaW0oKTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gbWF0Y2hlc1szXS50cmltKCkudHJpbSgpLnJlcGxhY2UoJ2AnLCAnJykucmVwbGFjZSgnYCcsICcnKTtcclxuXHJcbiAgICAgICAgICAgIGZpbmFsRXhwciA9IGZpbmFsRXhwci5yZXBsYWNlKGZ1bGxNYXRjaCwgYHRoaXMuY2hlY2tWYWx1ZSgnJHtpZH0nLCAnJHtvcGVyYXRpb259JywgJHtiVmFsdWUgPT0gJ251bGwnID8gJ251bGwnIDogYCcke3ZhbHVlfSdgfSlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBldmFsKGZpbmFsRXhwcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0aXR1aXNjZSBsJ29wZXJhemlvbmUgZGkgY29tcGFyYXppb25lIGZyYSB1biBzaW5nb2xvIHZhbG9yZSBkaSB1biBwYXJhbWV0cm8gZSB1biBzdW8gdmFsb3JlIGRpIGNvbmZyb250byBpbiBiYXNlIGFkIHVuIG9wZXJhdG9yZVxyXG4gICAgICogUmljaGlhbWF0YSBkYSBFVkFMXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRlbCBwYXJhbWV0cm8gZGkgY3VpIHZlcmlmaWNhcmUgaWwgdmFsb3JlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgT3BlcmF0b3JlIGNvbiBjdWkgdmVyaWZpY2FyZSBpbCB2YWxvcmU6ID09LCAhPSwgPiwgPCwgPj0sIDw9XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVmFsb3JlIGRpIGNvbmZyb250byBkYSB1dGlsaXp6YXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zICoqdHJ1ZSoqIHNlIGxhIGNvbmRpemlvbmUgw6ggdmVyaWZpY2F0YSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoZWNrVmFsdWUoa2V5OiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgclBhciA9IHRoaXMuUGFyYW1ldGVyc0NhY2hlW2tleV07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3dpdGNoIChyUGFyLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYFwiJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZChyUGFyLnZhbHVlLCBgYCl9XCIgJHtvcGVyYXRvcn0gXCIke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHZhbHVlLCBgYCl9XCJgKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYCR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQoclBhci52YWx1ZSwgYGApLnRvU3RyaW5nKCl9ICR7b3BlcmF0b3J9ICR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQodmFsdWUsIGBgKX1gKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZChyUGFyLnZhbHVlLCAnXCJcIicsIHRydWUpLnJlcGxhY2UoJywnLCAnLicpfSAke29wZXJhdG9yfSAke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHZhbHVlLCAnXCJcIicsIHRydWUpLnJlcGxhY2UoJywnLCAnLicpfWApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyRGF0ZUNvbnYgPSBgdGhpcy5kYXRlcy5nZXREYXRlQ29udmVydGlvbihcIiR7clBhci52YWx1ZX1cIilgO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWxEYXRlQ29udiA9IGB0aGlzLmRhdGVzLmdldERhdGVDb252ZXJ0aW9uKFwiJHt2YWx1ZX1cIilgO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPT1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ID09ICR7dmFsRGF0ZUNvbnZ9IHx8ICgke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7cGFyRGF0ZUNvbnZ9LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCIhPVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gJHt2YWxEYXRlQ29udn0gJiYgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAhJHtwYXJEYXRlQ29udn0uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPlwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICR7cGFyRGF0ZUNvbnZ9LmlzQWZ0ZXIoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI8XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNCZWZvcmUoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI+PVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICgke3BhckRhdGVDb252fS5pc0FmdGVyKCR7dmFsRGF0ZUNvbnZ9KSB8fCAke3BhckRhdGVDb252fT8uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjw9XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgKCR7cGFyRGF0ZUNvbnZ9LmlzQmVmb3JlKCR7dmFsRGF0ZUNvbnZ9KSB8fCAke3BhckRhdGVDb252fT8uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KSlgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiRXJyb3JpIG5lbGxhIHZhbHV0YXppb25lIGRlbGwnZXNwcmVzc2lvbmUuIEZhbGxiYWNrIGEgZmFsc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IGBAZXNmYWVuemEvcGFyYW1ldGVyczogVGlwbyBwYXJhbWV0cm8gJHtrZXl9IG5vbiByaWNvbm9zY2l1dG86ICR7clBhci50eXBlfWA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkPFQ+KGl0ZW06IFQsIGRmbHQ6IFQsIGVtcHR5U3RyaW5nSXNOdWxsOiBib29sZWFuID0gZmFsc2UpOiBUIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsIHx8IGl0ZW0gPT0gdW5kZWZpbmVkIHx8IGl0ZW0udG9TdHJpbmcoKSA9PSAnbnVsbCcgfHwgKGVtcHR5U3RyaW5nSXNOdWxsICYmIGl0ZW0udG9TdHJpbmcoKSA9PSBcIlwiKSlcclxuICAgICAgICAgICAgcmV0dXJuIGRmbHQ7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyBnZXRTb3VyY2UocGFyYW1ldGVyOiBHZW5lcmljUGFyYW1ldGVyLCBzZWFyY2g6IHN0cmluZywgYnlpZDogYm9vbGVhbik6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5BdXRvQ29tcGxldGVEYXRhUmV0cmlldmUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkBmb3Jtcy1hbmQtdmFsaWRhdGlvbnM6IGZ1bnppb25lIGRpIGRhdGFyZXRyaWV2ZSBub24gaW1wb3N0YXRhIHBlciB1biBwYXJhbWV0cm8gYXV0b2NvbXBsZXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoW10pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQXV0b0NvbXBsZXRlRGF0YVJldHJpZXZlKHBhcmFtZXRlciwgc2VhcmNoLCBieWlkKTtcclxuICAgIH1cclxufSIsIjxkaXYgKm5nSWY9XCIoIVBhcmFtZXRlcnMgfHwgUGFyYW1ldGVycy5sZW5ndGggPT0gMCkgJiYgRW1wdHlNZXNzYWdlXCI+XHJcbiAgICA8ZW0+e3tFbXB0eU1lc3NhZ2V9fTwvZW0+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIkdyb3Vwc1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIlRlbXA7IGNvbnRleHQ6IHtpdGVtOiB7IGdyb3VwczogR3JvdXBzLCBpc1N1Ymdyb3VwOiBmYWxzZSB9fVwiPjwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjVGVtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGl0ZW0uZ3JvdXBzOyBsZXQgayA9IGluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBbY2xhc3MucGFycy1zdWJncm91cF09XCJpdGVtLmlzU3ViZ3JvdXBcIiBbY2xhc3MucGFycy1ncm91cF09XCIhaXRlbS5pc1N1Ymdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJHcm91cHNPclN1Ymdyb3Vwc0Rpc3BsYXk7IGNvbnRleHQ6IHsgaXRlbTogeyBncm91cDogZ3JvdXAsIGluZGV4OiBrICsgKGl0ZW0uaW5kZXggPyAoJ18nICsgaXRlbS5pbmRleCkgOiAnJyksIGlzU3ViZ3JvdXA6IGl0ZW0uaXNTdWJncm91cCB9fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXAuc3ViZ3JvdXBzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJUZW1wOyBjb250ZXh0OiB7aXRlbTogeyBncm91cHM6IGdyb3VwLnN1Ymdyb3VwcywgaW5kZXg6IGsgKyAoaXRlbS5pbmRleCA/ICgnXycgKyBpdGVtLmluZGV4KSA6ICcnKSwgaXNTdWJncm91cDogdHJ1ZSB9fTtcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR3JvdXBzT3JTdWJncm91cHNEaXNwbGF5IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW0uZ3JvdXBcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5ncm91cC5ncm91cE5hbWVcIiBbY2xhc3MucGFycy1ncm91cC10aXRsZV09XCIhaXRlbS5pc1N1Ymdyb3VwXCIgW2NsYXNzLnBhcnMtc3ViZ3JvdXAtdGl0bGVdPVwiaXRlbS5pc1N1Ymdyb3VwXCI+XHJcbiAgICAgICAgICAgIHt7aXRlbS5ncm91cC5ncm91cE5hbWV9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmdyb3VwLnBhcmFtZXRlcnMgJiYgaXRlbS5ncm91cC5wYXJhbWV0ZXJzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHBhciBvZiBpdGVtLmdyb3VwLnBhcmFtZXRlcnM7IGxldCBpPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0O1wiIFtjbGFzcy5hcHAtbWFyZ2luLWJvdHRvbS0wXT1cIkxhc3RQYXJhbWV0ZXJOb01hcmdpbiAmJiBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyLnZpc2libGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3tMYWJlbENvbFdpZHRofX0gbS10LTVcIj48c3BhbiAqbmdJZj1cIlJlbW92YWxcIiBjbGFzcz1cImZhIGZhLXJlbW92ZSB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVQYXJhbWV0ZXIocGFyKVwiPiZuYnNwOzwvc3Bhbj57e3Bhci5kZXNjcmlwdGlvbn19e3twYXIucmVxdWlyZWQgPyAnKicgOiAnJ319OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIERhdGEtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tZGF0ZSBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1kYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBzdHJpbmdhLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ3N0cmluZydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0taW5wdXQgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBudW1lcm8tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1pbnB1dCBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiAgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvciBwYXR0ZXJuPVwie3twYXIucGF0dGVybiB8fCAnXlsrLV0/WzAtOV0qWyxdP1swLTldKyQnfX1cIj48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGJvb2xlYW4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19IG0tdC01XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnYm9vbGVhbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tY2hlY2tib3ggW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gc2luZ2xlIHNlbGVjdC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiAhcGFyLm11bHRpZW51bSAmJiAhcGFyLnNvdXJjZWFwaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1zZWxlY3QgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3IgW1NvdXJjZV09XCJwYXIuZW51bXZhbHVlc1wiPjwvZm9ybS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gbXVsdGkgc2VsZWN0LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2VudW0nICYmIHBhci5tdWx0aWVudW0gJiYgIXBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tbXVsdGlzZWxlY3QgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtVc2VDb21tYVNlcGFyYXRlZExpc3RdPVwidHJ1ZVwiIFtTZWxlY3RMYWJlbF09XCIoJ1NlbGV6aW9uYScgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW1NvdXJjZV09XCJwYXIuZW51bXZhbHVlc1wiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLW11bHRpc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBlbnVtIG11bHRpc2VsZWN0IHNlbnphIHNvcmdlbnRlLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2VudW0nICYmIHBhci5tdWx0aWVudW0gJiYgIXBhci5zb3VyY2VhcGkgJiYgIXBhci5lbnVtdmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWF1dG9jb21wbGV0ZSBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiAgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW0hpZGVDaG9pY2VzT25TZWxlY3Rpb25dPVwidHJ1ZVwiIFtTZWxlY3RMYWJlbF09XCIoJ1NlbGV6aW9uYScgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW1VuYm91bmRNb2RlXT1cInRydWVcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1hdXRvY29tcGxldGU+ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tU2UgZW51bSBhdXRvY29tcGxldGUtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgIXBhci5tdWx0aWVudW0gJiYgcGFyLnNvdXJjZWFwaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1hdXRvY29tcGxldGUgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTZWFyY2hGdW5jdGlvbl09XCJnZXRTb3VyY2UuYmluZCh0aGlzLCBwYXIpXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBlbnVtIG11bHRpc2VsZWN0IGF1dG9jb21wbGV0ZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiBwYXIubXVsdGllbnVtICYmIHBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tYXV0b2NvbXBsZXRlIFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0hpZGVDaG9pY2VzT25TZWxlY3Rpb25dPVwiQXV0b2NvbXBsZXRlSGlkZUNob2ljZXNPblNlbGVjdGlvblwiIFtNdWx0aV09XCJ0cnVlXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbU2VhcmNoRnVuY3Rpb25dPVwiZ2V0U291cmNlLmJpbmQodGhpcywgcGFyKVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -131,8 +131,8 @@ class EsParametersComponent {
131
131
  if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && !Array.isArray(t.value))
132
132
  t.value = t.value ? t.value.split(',').map(t => t.trim()) : [];
133
133
  if (t.type == 'enum' && t.multienum && t.value && !Array.isArray(t.value) && t.value.toString().startsWith("[") && t.value.toString().endsWith("]")) {
134
- let s = t.value.toString();
135
- t.value = s.substring(1, s.length - 1);
134
+ let s = JSON.parse(t.value);
135
+ t.value = s.join(',');
136
136
  }
137
137
  });
138
138
  this.reviewParametersBindings();
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-parameters.mjs","sources":["../../../projects/parameters/src/lib/es_parameters.component.loc.ts","../../../projects/parameters/src/lib/models/GenericParameterGroup.ts","../../../projects/parameters/src/lib/es_parameters.component.ts","../../../projects/parameters/src/lib/es_parameters.component.html","../../../projects/parameters/src/lib/es_parameters.module.ts","../../../projects/parameters/src/lib/models/GenericParameter.ts","../../../projects/parameters/src/public-api.ts","../../../projects/parameters/src/esfaenza-parameters.ts"],"sourcesContent":["import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsParametersComponent**\r\n */\r\n@Injectable()\r\nexport class EsParametersLoc extends LocalizationService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"it->en\", \"Seleziona\", [\"Select\"])\r\n }\r\n}","import { GenericParameter } from \"./GenericParameter\";\r\n\r\n/**\r\n * Classe che rappresenta un gruppo di parametri generico\r\n */\r\nexport class GenericParameterGroup {\r\n\r\n /**\r\n * Costruttore\r\n * @param {string} groupName Descrizione del gruppo che fa anche da id\r\n * @param {number} order ordine del gruppo\r\n */\r\n\r\n constructor(public groupName: string, public order: number) {\r\n this.parameters = [];\r\n this.subgroups = [];\r\n }\r\n\r\n /** Lista di Generic Parameters */\r\n public parameters: GenericParameter[];\r\n\r\n /** Eventuale lista di sottogruppi */\r\n public subgroups: GenericParameterGroup[];\r\n\r\n /** Eventuale lista di sottogruppi */\r\n // public : GenericParameterGroup[];\r\n\r\n}","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NgControl, NgForm, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from \"@angular/forms\";\r\nimport { ChangeDetectorRef, Component, forwardRef, Injector, Input, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { GenericParameter } from './models/GenericParameter';\r\n\r\n// Applicazione\r\nimport { EsParametersLoc } from \"./es_parameters.component.loc\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { GenericParameterGroup } from \"./models/GenericParameterGroup\";\r\n\r\n/** Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico */\r\n@Component({\r\n selector: \"es-parameters\",\r\n providers: [\r\n { provide: LocalizationService, useClass: EsParametersLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n }\r\n ],\r\n styleUrls: [\"./es_parameters.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: \"./es_parameters.component.html\"\r\n})\r\nexport class EsParametersComponent implements ControlValueAccessor {\r\n\r\n /** Indica se si lavora a singolo parametro forzato dentro un array for the glory of satan */\r\n private SingleParameterMode: boolean = false;\r\n\r\n /** Modello del componente su cui vengono effettuate le graficazioni */\r\n public Parameters: GenericParameter[];\r\n\r\n /** Modello del componente su cui vengono effettuate le graficazioni */\r\n public Groups: GenericParameterGroup[];\r\n\r\n /** Cache per fare lookup rapidi in fase di valutazione espressioni di visibilità e obbligatorietà */\r\n private ParametersCache: { [id: string]: GenericParameter };\r\n\r\n /**\r\n * Pipeline di Angular \r\n * \r\n * @ignore\r\n */\r\n propagateChange = (_: any) => { };\r\n\r\n /** Indica che il parametro deve essere in modalità display */\r\n @Input() DisplayMode: boolean = false;\r\n\r\n /** Indica che l'ultimo parametro non deve avere margine in fondo */\r\n @Input() LastParameterNoMargin: boolean = false;\r\n\r\n /** col-md-X per la label */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Input a cui collegare la variabile **submitted** del form all'interno del quale viene utilizzato questo componente */\r\n @Input() submitted: boolean = false;\r\n\r\n /** Valore da mostrare qualora non fossero ancora ricevuti i **Parameters** da mostrare */\r\n @Input() EmptyMessage: string = \"\";\r\n\r\n /** Permette di rimuovere i parametri dalla lista cliccando sulla X davanti alla Label */\r\n @Input() Removal: boolean = false;\r\n\r\n /** Indica se i componenti di Input generati sono Readonly o no */\r\n @Input() Readonly: boolean = false;\r\n\r\n /** Indica il formato lista che dev'essere utilizzato */\r\n @Input() ListFormat: 'CommaSeparated' | 'Array' = 'Array';\r\n\r\n /** Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit */\r\n @Input() Form: NgForm = null;\r\n\r\n /** Quando utilizza un sottocomponente autocomplete abilita o disabilita il reset dell'input per ogni selezione */\r\n @Input() AutocompleteHideChoicesOnSelection: boolean = false;\r\n\r\n /** Funzione da utilizzare per tirare fuori i dati di un autocomplete */\r\n @Input() AutoCompleteDataRetrieve: (parameter: GenericParameter, search: string, byid: boolean) => Observable<{ id: string, description: string }[]>\r\n\r\n /** Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private utiExts: UtilityService, public lc: LocalizationService, public cdr: ChangeDetectorRef, private inj: Injector, public dates: DateService) { }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public writeValue(obj): void {\r\n\r\n if (!obj)\r\n return;\r\n\r\n if(!Array.isArray(obj))\r\n this.SingleParameterMode = true;\r\n \r\n this.Parameters = Array.isArray(obj) ? obj : [obj];\r\n\r\n this.ParametersCache = {};\r\n\r\n this.Parameters.forEach(t => {\r\n this.ParametersCache[t.id] = t;\r\n\r\n if (!t.typecode && !t.type)\r\n console.warn(\"Non è stato specificato né un type né un typecode\");\r\n\r\n if (t.typecode && !t.type)\r\n t.type = this.utiExts.getJsTypeFromTypeCode(t.typecode);\r\n\r\n if (t.typecode && t.type != this.utiExts.getJsTypeFromTypeCode(t.typecode))\r\n console.warn(`Rilevate inconsistenze fra il Tipo ${t.type} e il Tipo ${this.utiExts.getJsTypeFromTypeCode(t.typecode)} calcolato da TypeCode ${t.typecode} per il parametro ${t.id}`);\r\n\r\n if (t.type == \"boolean\")\r\n t.value = t.value?.toString()?.toLowerCase() === \"true\";\r\n\r\n if (t.enumtype || t.dicttype)\r\n t.type = 'enum';\r\n\r\n // Valore valido ma modalità di utilizzo a CommaSeparated, devo assicurarmi di riemettere la versione con la stringa\r\n if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && Array.isArray(t.value))\r\n this.changed();\r\n\r\n // Aggiusto le modalità di funzionamento dei parametri lista. Che internamente funzionano sempre con una lista di valori\r\n if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && !Array.isArray(t.value))\r\n t.value = t.value ? t.value.split(',').map(t => t.trim()) : [];\r\n\r\n if (t.type == 'enum' && t.multienum && t.value && !Array.isArray(t.value) && t.value.toString().startsWith(\"[\") && t.value.toString().endsWith(\"]\")) {\r\n let s = (<string>t.value.toString());\r\n t.value = s.substring(1, s.length - 1);\r\n }\r\n });\r\n\r\n this.reviewParametersBindings();\r\n this.generateGroups();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di creare e ordinare i gruppi dei parametri\r\n */\r\n generateGroups() {\r\n this.Groups = [];\r\n\r\n if (this.Parameters?.length > 0) {\r\n this.Parameters.sort((a, b) => a.order < b.order ? -1 : 1);\r\n\r\n // Ciclo tutti i parametri\r\n for (let i = 0; this.Parameters.length > i; i++) {\r\n let par = this.Parameters[i];\r\n\r\n let parGroupName = par.group ?? \"\";\r\n let groupOrder = par.group ? par.order : -1;\r\n\r\n // Se il gruppo non esiste, lo aggiungo\r\n if (!this.Groups.some(x => x.groupName == parGroupName)) {\r\n this.Groups.push(new GenericParameterGroup(parGroupName, groupOrder));\r\n }\r\n\r\n // Inserisco il parametro dentro al suo gruppo\r\n this.Groups.find(g => g.groupName == parGroupName).parameters.push(par)\r\n }\r\n\r\n // Gestione sottogruppi\r\n let subgroups: GenericParameterGroup[] = this.Groups.filter(group => group.groupName.includes('§'));\r\n for (let _; subgroups.length > 0; () => { }) {\r\n // Recupero la lista di gruppi che hanno sottogruppi\r\n // Per convenzione, nel nome contengono \"§\"\r\n this.tryToAddSubgroups(subgroups);\r\n subgroups = this.Groups.filter(group => group.groupName.includes('§'));\r\n }\r\n\r\n this.Groups.sort((a, b) => a.order < b.order ? -1 : 1);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di creare e ordinare i sottogruppi dei parametri\r\n */\r\n tryToAddSubgroups(subgroups: GenericParameterGroup[]) {\r\n for (let i = 0; subgroups.length > i; i++) {\r\n let sub = subgroups[i];\r\n\r\n // Ottengo un lista con la gerarchia dei gruppi, in ordine\r\n let groupsParentHierarchy = sub.groupName.split('§') ?? [];\r\n\r\n // Recupero il gruppo padre\r\n let parentGroupName = sub.groupName.replace(`§${groupsParentHierarchy[groupsParentHierarchy.length - 1]}`, ``);\r\n\r\n // Se il gruppo padre non esiste, lo aggiungo\r\n if (!this.Groups.some(x => x.groupName == parentGroupName)) {\r\n this.Groups.push(new GenericParameterGroup(parentGroupName, sub.order));\r\n }\r\n\r\n // Rimuovo dal nome del gruppo l'informazione sul padre (Sistemando anche l'etichetta)\r\n // e lo aggiungo ai sottogruppi del padre\r\n sub.groupName = sub.groupName.replace(`${parentGroupName}§`, '');\r\n let parentGroup = this.Groups.find(x => x.groupName == parentGroupName);\r\n if (parentGroup?.subgroups.some(s => s.groupName == sub.groupName)) {\r\n let target = parentGroup.subgroups.find(f => f.groupName == sub.groupName);\r\n sub.parameters.map(p => target.parameters.push(p));\r\n sub.subgroups.map(s => target.subgroups.push(s));\r\n target.order = sub.order < target.order ? sub.order : target.order;\r\n } else {\r\n parentGroup?.subgroups.push(sub);\r\n }\r\n\r\n // Rimuovo il sottogruppo gruppo dalla lista\r\n this.Groups.splice(this.Groups.indexOf(sub), 1);\r\n }\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnTouched(fn): void { }\r\n\r\n /**\r\n * Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel\r\n */\r\n public changed() {\r\n if (!this.Parameters)\r\n return;\r\n\r\n if(!this.Groups)\r\n this.generateGroups();\r\n \r\n // Se ci sono delle modifiche ai binding potrebbero essere cambiati i required. Ricreo tutti i componenti e ri-idrato la cache dei parametri\r\n var changes = this.reviewParametersBindings();\r\n if (changes.length > 0) {\r\n\r\n // In base ai binding cambiati devo trovare tutti i parametri che han subito modifiche strutturali (visibilità, obbligatorietà)\r\n // distruggerli e ricrearli in modo che i binding lato html si aggiornino di conseguenza.\r\n // 1: Faccio una copia del parametro corrente\r\n // 2: Trovo la sua posizione all'interno dei gruppi e lo sostituisco con la copia\r\n // 3: Aggiorno la lista dei parametri e la sua cache in modo da puntare all'oggetto nuovo\r\n changes.forEach(ch => {\r\n let index = this.Parameters.findIndex(t => t.id == ch);\r\n let parameterCopy = this.utiExts.deepClone(this.Parameters[index]) as GenericParameter;\r\n\r\n let parameterRefFixed = false;\r\n for (let ig = 0; ig < this.Groups.length; ig++) {\r\n var g = this.Groups[ig];\r\n for (let ip = 0; ip < g.parameters.length; ip++) {\r\n var p = g.parameters[ip]\r\n if (p === this.Parameters[index]) {\r\n this.Groups[ig].parameters[ip] = parameterCopy;\r\n parameterRefFixed = true;\r\n break;\r\n }\r\n }\r\n if (parameterRefFixed)\r\n break;\r\n }\r\n \r\n this.Parameters[index] = parameterCopy\r\n this.ParametersCache[ch] = this.Parameters[index];\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n var ParametersClone = this.utiExts.deepClone(this.Parameters) as GenericParameter[];\r\n\r\n // Aggiusto le modalità di funzionamento dei parametri lista. Che internamente funzionano sempre con una lista di valori\r\n ParametersClone?.forEach(t => {\r\n if (t.type == \"enum\" && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && Array.isArray(t.value))\r\n t.value = t.value.join(',');\r\n });\r\n\r\n this.propagateChange(this.SingleParameterMode ? ParametersClone[0] : ParametersClone);\r\n }\r\n\r\n /**\r\n * Rimuove il parametro selezionato e propaga il modello\r\n * \r\n * @param {GenericParameter} par Parametro da rimuovere\r\n */\r\n public removeParameter(par: GenericParameter) {\r\n this.Parameters.splice(this.Parameters.indexOf(par), 1);\r\n this.changed();\r\n }\r\n\r\n public GenerateParameterGroups() {\r\n let Groups: { id: string, groups: string[], order: number }[] = [];\r\n\r\n this.Parameters.forEach(param => {\r\n Groups.push({ id: param.id, groups: param.group.split(\"§\"), order: param.order });\r\n });\r\n\r\n let GroupedGroups = Groups.reduce((r, a) => {\r\n let firstGroupId = a.groups?.length > 0 ? a.groups[0] : \"\";\r\n r[firstGroupId] = [...r[firstGroupId] || [], a];\r\n return r;\r\n }, {});\r\n\r\n console.log(GroupedGroups);\r\n\r\n // Ciclo del risultato, aggiungendo i gruppi al modello\r\n // Per ogni gruppo che aggiungo, assegno i parametri in ordine\r\n }\r\n\r\n /**\r\n * Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo\r\n * \r\n * @returns {string[]} lista con gli id dei parametri che sono stati modificati\r\n */\r\n private reviewParametersBindings(): string[] {\r\n let changes = [];\r\n for (let i = 0; i < this.Parameters.length; i++) {\r\n var p = this.Parameters[i];\r\n\r\n if (p.requiredexp) {\r\n let prevReq = p.required;\r\n p.required = this.evaluate(p.requiredexp);\r\n if (prevReq != p.required)\r\n changes.push(p.id);\r\n }\r\n if (p.visibleexp) {\r\n let prevVisi = p.visible;\r\n p.visible = this.evaluate(p.visibleexp);\r\n if (prevVisi != p.visible)\r\n changes.push(p.id)\r\n }\r\n }\r\n return changes;\r\n }\r\n\r\n /**\r\n * Valuta un'espressione in base ai parametri presenti nel modello attuale\r\n * \r\n * @param expr Espressione da valutare scritta nel formato (ripetibile) \"ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)\" separato eventualmente da && ed ||\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n private evaluate(expr: string): boolean {\r\n var regex = /\\s?([a-zA-Z0-9_-]+)\\s?(!=|==|<|>|<=|>=)\\s?(`[^`]+`|``|null|[0-9,]+|true|false)/gm;\r\n\r\n var matches: string[] = [];\r\n var finalExpr = expr;\r\n while (matches = regex.exec(expr)) {\r\n var fullMatch = matches[0].trim();\r\n var id = matches[1].trim();\r\n var operation = matches[2].trim();\r\n let bValue = matches[3].trim().trim();\r\n var value = matches[3].trim().trim().replace('`', '').replace('`', '');\r\n\r\n finalExpr = finalExpr.replace(fullMatch, `this.checkValue('${id}', '${operation}', ${bValue == 'null' ? 'null' : `'${value}'`})`);\r\n }\r\n\r\n return eval(finalExpr);\r\n }\r\n\r\n /**\r\n * Restituisce l'operazione di comparazione fra un singolo valore di un parametro e un suo valore di confronto in base ad un operatore\r\n * Richiamata da EVAL\r\n * \r\n * @param {string} key Chiave del parametro di cui verificare il valore\r\n * @param {string} operator Operatore con cui verificare il valore: ==, !=, >, <, >=, <=\r\n * @param {string} value Valore di confronto da utilizzare\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n public checkValue(key: string, operator: string, value: string): boolean {\r\n var rPar = this.ParametersCache[key];\r\n try {\r\n switch (rPar.type) {\r\n case \"string\":\r\n case \"enum\":\r\n return eval(`\"${this.defaultIfnullOrUndefined(rPar.value, ``)}\" ${operator} \"${this.defaultIfnullOrUndefined(value, ``)}\"`);\r\n case \"boolean\":\r\n return eval(`${this.defaultIfnullOrUndefined(rPar.value, ``).toString()} ${operator} ${this.defaultIfnullOrUndefined(value, ``)}`);\r\n case \"number\":\r\n return eval(`${this.defaultIfnullOrUndefined(rPar.value, '\"\"', true).replace(',', '.')} ${operator} ${this.defaultIfnullOrUndefined(value, '\"\"', true).replace(',', '.')}`);\r\n case \"date\":\r\n let parDateConv = `this.dates.getDateConvertion(\"${rPar.value}\")`;\r\n let valDateConv = `this.dates.getDateConvertion(\"${value}\")`;\r\n\r\n switch (operator) {\r\n\r\n case \"==\": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);\r\n case \"!=\": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);\r\n case \">\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);\r\n case \"<\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);\r\n case \">=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n case \"<=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n }\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n console.warn(\"Errori nella valutazione dell'espressione. Fallback a false\");\r\n return false;\r\n }\r\n\r\n throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;\r\n }\r\n\r\n /** @ignore */\r\n private defaultIfnullOrUndefined<T>(item: T, dflt: T, emptyStringIsNull: boolean = false): T {\r\n if (item == null || item == undefined || item.toString() == 'null' || (emptyStringIsNull && item.toString() == \"\"))\r\n return dflt;\r\n return item;\r\n }\r\n\r\n /** @ignore */\r\n public getSource(parameter: GenericParameter, search: string, byid: boolean): Observable<{ id: string, description: string }[]> {\r\n if (!this.AutoCompleteDataRetrieve) {\r\n console.error(\"@forms-and-validations: funzione di dataretrieve non impostata per un parametro autocomplete\");\r\n return of([])\r\n }\r\n else\r\n return this.AutoCompleteDataRetrieve(parameter, search, byid);\r\n }\r\n}","<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <ng-container *ngIf=\"par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\">&nbsp;</span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseCommaSeparatedList]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </ng-container>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { EsParametersComponent } from './es_parameters.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [EsParametersComponent],\r\n imports: [\r\n CommonModule,\r\n LocalizationModule,\r\n FormsModule,\r\n FormsAndValidationsModule,\r\n ],\r\n exports: [EsParametersComponent]\r\n})\r\nexport class EsParametersModule {\r\n }\r\n","/**\r\n * Classe che rappresenta un parametro generico\r\n */\r\nexport class GenericParameter {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice del parametro\r\n * @param {string} description Descrizione del parametro\r\n * @param {string} pattern Pattern di validazione\r\n * @param {'date' | 'string' | 'number' | 'boolean' | 'enum'} type Tipo di input \r\n * @param {boolean} required Indica se il valore è obbligatorio o meno\r\n * @param {any} v_default Valore di default per questo Parametro\r\n * @param {{ id: string, description: string }[]} enumvalues Qualora il **type** fosse di tipo **enum**, qui devono esserci tutti i valori che può assumere \r\n * @param {boolean} multienum Qualora il **type** fosse di tipo **enum**, indica se è possibile selezionare più valori (multiselect)\r\n * @param {string} sourceapi Nei casi in cui il **type** è **enum** indica l'api da cui recuperare i valori da bindare alla select o alla multiselect\r\n * @param {boolean} pageddata Nei casi in cui il **type** è **enum** indica che l'api specificata eventualmetne da **sourceapi** è paginata\r\n */\r\n constructor(\r\n public id: string,\r\n public description: string,\r\n public pattern: string,\r\n type: 'date' | 'string' | 'number' | 'boolean' | 'enum',\r\n public required: boolean,\r\n v_default: any = null,\r\n public enumvalues: { id: string, description: string }[] = [],\r\n public multienum?: boolean,\r\n public sourceapi?: string,\r\n public pageddata?: boolean) {\r\n\r\n this.type = type == 'enum' ? null : type;\r\n this.visible = true;\r\n this.enumtype = type == 'enum' ? type : \"\";\r\n this.isreadonly = false;\r\n\r\n if (!this.enumtype && enumvalues.length != 0)\r\n console.error(\"impossibile gestire valori di dizionario per un parametro non di tipo enum\");\r\n\r\n if (v_default != null)\r\n this.value = v_default;\r\n }\r\n\r\n /** Tipo di dato rappresentato da questo parametro */\r\n public type?: 'date' | 'string' | 'number' | 'boolean' | 'enum';\r\n\r\n /** Typecode lato C# che rappresenta il tipo di dato */\r\n public typecode: number;\r\n\r\n /** Indica se il campo specificato dev'essere di sola lettura o meno */\r\n public isreadonly: boolean;\r\n\r\n /** Valore del parametro */\r\n public value: any;\r\n\r\n /** Indica se questo parametro dev'essere inserito o no. In caso contrario viene semplicemente nascosto */\r\n public visible: boolean;\r\n\r\n /** Tipo Enum, valorizzato dal Backend */\r\n public enumtype: string;\r\n\r\n /** Tipo Dizionario, valorizzato dal Backend */\r\n public dicttype: string;\r\n\r\n /** Espressione di obbligatorietà */\r\n public requiredexp?: string;\r\n\r\n /** Espressione di visibilità */\r\n public visibleexp?: string;\r\n\r\n /** Ordinamento in base al quale verranno ordinati i parametri */\r\n public order: number;\r\n\r\n /** Gruppo di appartenenza del parametro */\r\n public group: string;\r\n}","/*\r\n * Public API Surface of parameters\r\n */\r\nexport * from './lib/es_parameters.module';\r\nexport * from './lib/models/GenericParameter';\r\nexport * from './lib/es_parameters.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-parameters.mjs","sources":["../../../projects/parameters/src/lib/es_parameters.component.loc.ts","../../../projects/parameters/src/lib/models/GenericParameterGroup.ts","../../../projects/parameters/src/lib/es_parameters.component.ts","../../../projects/parameters/src/lib/es_parameters.component.html","../../../projects/parameters/src/lib/es_parameters.module.ts","../../../projects/parameters/src/lib/models/GenericParameter.ts","../../../projects/parameters/src/public-api.ts","../../../projects/parameters/src/esfaenza-parameters.ts"],"sourcesContent":["import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsParametersComponent**\r\n */\r\n@Injectable()\r\nexport class EsParametersLoc extends LocalizationService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"it->en\", \"Seleziona\", [\"Select\"])\r\n }\r\n}","import { GenericParameter } from \"./GenericParameter\";\r\n\r\n/**\r\n * Classe che rappresenta un gruppo di parametri generico\r\n */\r\nexport class GenericParameterGroup {\r\n\r\n /**\r\n * Costruttore\r\n * @param {string} groupName Descrizione del gruppo che fa anche da id\r\n * @param {number} order ordine del gruppo\r\n */\r\n\r\n constructor(public groupName: string, public order: number) {\r\n this.parameters = [];\r\n this.subgroups = [];\r\n }\r\n\r\n /** Lista di Generic Parameters */\r\n public parameters: GenericParameter[];\r\n\r\n /** Eventuale lista di sottogruppi */\r\n public subgroups: GenericParameterGroup[];\r\n\r\n /** Eventuale lista di sottogruppi */\r\n // public : GenericParameterGroup[];\r\n\r\n}","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NgControl, NgForm, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from \"@angular/forms\";\r\nimport { ChangeDetectorRef, Component, forwardRef, Injector, Input, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { GenericParameter } from './models/GenericParameter';\r\n\r\n// Applicazione\r\nimport { EsParametersLoc } from \"./es_parameters.component.loc\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { GenericParameterGroup } from \"./models/GenericParameterGroup\";\r\n\r\n/** Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico */\r\n@Component({\r\n selector: \"es-parameters\",\r\n providers: [\r\n { provide: LocalizationService, useClass: EsParametersLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n }\r\n ],\r\n styleUrls: [\"./es_parameters.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: \"./es_parameters.component.html\"\r\n})\r\nexport class EsParametersComponent implements ControlValueAccessor {\r\n\r\n /** Indica se si lavora a singolo parametro forzato dentro un array for the glory of satan */\r\n private SingleParameterMode: boolean = false;\r\n\r\n /** Modello del componente su cui vengono effettuate le graficazioni */\r\n public Parameters: GenericParameter[];\r\n\r\n /** Modello del componente su cui vengono effettuate le graficazioni */\r\n public Groups: GenericParameterGroup[];\r\n\r\n /** Cache per fare lookup rapidi in fase di valutazione espressioni di visibilità e obbligatorietà */\r\n private ParametersCache: { [id: string]: GenericParameter };\r\n\r\n /**\r\n * Pipeline di Angular \r\n * \r\n * @ignore\r\n */\r\n propagateChange = (_: any) => { };\r\n\r\n /** Indica che il parametro deve essere in modalità display */\r\n @Input() DisplayMode: boolean = false;\r\n\r\n /** Indica che l'ultimo parametro non deve avere margine in fondo */\r\n @Input() LastParameterNoMargin: boolean = false;\r\n\r\n /** col-md-X per la label */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Input a cui collegare la variabile **submitted** del form all'interno del quale viene utilizzato questo componente */\r\n @Input() submitted: boolean = false;\r\n\r\n /** Valore da mostrare qualora non fossero ancora ricevuti i **Parameters** da mostrare */\r\n @Input() EmptyMessage: string = \"\";\r\n\r\n /** Permette di rimuovere i parametri dalla lista cliccando sulla X davanti alla Label */\r\n @Input() Removal: boolean = false;\r\n\r\n /** Indica se i componenti di Input generati sono Readonly o no */\r\n @Input() Readonly: boolean = false;\r\n\r\n /** Indica il formato lista che dev'essere utilizzato */\r\n @Input() ListFormat: 'CommaSeparated' | 'Array' = 'Array';\r\n\r\n /** Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit */\r\n @Input() Form: NgForm = null;\r\n\r\n /** Quando utilizza un sottocomponente autocomplete abilita o disabilita il reset dell'input per ogni selezione */\r\n @Input() AutocompleteHideChoicesOnSelection: boolean = false;\r\n\r\n /** Funzione da utilizzare per tirare fuori i dati di un autocomplete */\r\n @Input() AutoCompleteDataRetrieve: (parameter: GenericParameter, search: string, byid: boolean) => Observable<{ id: string, description: string }[]>\r\n\r\n /** Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private utiExts: UtilityService, public lc: LocalizationService, public cdr: ChangeDetectorRef, private inj: Injector, public dates: DateService) { }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public writeValue(obj): void {\r\n\r\n if (!obj)\r\n return;\r\n\r\n if(!Array.isArray(obj))\r\n this.SingleParameterMode = true;\r\n \r\n this.Parameters = Array.isArray(obj) ? obj : [obj];\r\n\r\n this.ParametersCache = {};\r\n\r\n this.Parameters.forEach(t => {\r\n this.ParametersCache[t.id] = t;\r\n\r\n if (!t.typecode && !t.type)\r\n console.warn(\"Non è stato specificato né un type né un typecode\");\r\n\r\n if (t.typecode && !t.type)\r\n t.type = this.utiExts.getJsTypeFromTypeCode(t.typecode);\r\n\r\n if (t.typecode && t.type != this.utiExts.getJsTypeFromTypeCode(t.typecode))\r\n console.warn(`Rilevate inconsistenze fra il Tipo ${t.type} e il Tipo ${this.utiExts.getJsTypeFromTypeCode(t.typecode)} calcolato da TypeCode ${t.typecode} per il parametro ${t.id}`);\r\n\r\n if (t.type == \"boolean\")\r\n t.value = t.value?.toString()?.toLowerCase() === \"true\";\r\n\r\n if (t.enumtype || t.dicttype)\r\n t.type = 'enum';\r\n\r\n // Valore valido ma modalità di utilizzo a CommaSeparated, devo assicurarmi di riemettere la versione con la stringa\r\n if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && Array.isArray(t.value))\r\n this.changed();\r\n\r\n // Aggiusto le modalità di funzionamento dei parametri lista. Che internamente funzionano sempre con una lista di valori\r\n if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && !Array.isArray(t.value))\r\n t.value = t.value ? t.value.split(',').map(t => t.trim()) : [];\r\n\r\n if (t.type == 'enum' && t.multienum && t.value && !Array.isArray(t.value) && t.value.toString().startsWith(\"[\") && t.value.toString().endsWith(\"]\")) {\r\n let s = <string[]>JSON.parse(t.value)\r\n t.value = s.join(',');\r\n }\r\n });\r\n\r\n this.reviewParametersBindings();\r\n this.generateGroups();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di creare e ordinare i gruppi dei parametri\r\n */\r\n generateGroups() {\r\n this.Groups = [];\r\n\r\n if (this.Parameters?.length > 0) {\r\n this.Parameters.sort((a, b) => a.order < b.order ? -1 : 1);\r\n\r\n // Ciclo tutti i parametri\r\n for (let i = 0; this.Parameters.length > i; i++) {\r\n let par = this.Parameters[i];\r\n\r\n let parGroupName = par.group ?? \"\";\r\n let groupOrder = par.group ? par.order : -1;\r\n\r\n // Se il gruppo non esiste, lo aggiungo\r\n if (!this.Groups.some(x => x.groupName == parGroupName)) {\r\n this.Groups.push(new GenericParameterGroup(parGroupName, groupOrder));\r\n }\r\n\r\n // Inserisco il parametro dentro al suo gruppo\r\n this.Groups.find(g => g.groupName == parGroupName).parameters.push(par)\r\n }\r\n\r\n // Gestione sottogruppi\r\n let subgroups: GenericParameterGroup[] = this.Groups.filter(group => group.groupName.includes('§'));\r\n for (let _; subgroups.length > 0; () => { }) {\r\n // Recupero la lista di gruppi che hanno sottogruppi\r\n // Per convenzione, nel nome contengono \"§\"\r\n this.tryToAddSubgroups(subgroups);\r\n subgroups = this.Groups.filter(group => group.groupName.includes('§'));\r\n }\r\n\r\n this.Groups.sort((a, b) => a.order < b.order ? -1 : 1);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di creare e ordinare i sottogruppi dei parametri\r\n */\r\n tryToAddSubgroups(subgroups: GenericParameterGroup[]) {\r\n for (let i = 0; subgroups.length > i; i++) {\r\n let sub = subgroups[i];\r\n\r\n // Ottengo un lista con la gerarchia dei gruppi, in ordine\r\n let groupsParentHierarchy = sub.groupName.split('§') ?? [];\r\n\r\n // Recupero il gruppo padre\r\n let parentGroupName = sub.groupName.replace(`§${groupsParentHierarchy[groupsParentHierarchy.length - 1]}`, ``);\r\n\r\n // Se il gruppo padre non esiste, lo aggiungo\r\n if (!this.Groups.some(x => x.groupName == parentGroupName)) {\r\n this.Groups.push(new GenericParameterGroup(parentGroupName, sub.order));\r\n }\r\n\r\n // Rimuovo dal nome del gruppo l'informazione sul padre (Sistemando anche l'etichetta)\r\n // e lo aggiungo ai sottogruppi del padre\r\n sub.groupName = sub.groupName.replace(`${parentGroupName}§`, '');\r\n let parentGroup = this.Groups.find(x => x.groupName == parentGroupName);\r\n if (parentGroup?.subgroups.some(s => s.groupName == sub.groupName)) {\r\n let target = parentGroup.subgroups.find(f => f.groupName == sub.groupName);\r\n sub.parameters.map(p => target.parameters.push(p));\r\n sub.subgroups.map(s => target.subgroups.push(s));\r\n target.order = sub.order < target.order ? sub.order : target.order;\r\n } else {\r\n parentGroup?.subgroups.push(sub);\r\n }\r\n\r\n // Rimuovo il sottogruppo gruppo dalla lista\r\n this.Groups.splice(this.Groups.indexOf(sub), 1);\r\n }\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnTouched(fn): void { }\r\n\r\n /**\r\n * Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel\r\n */\r\n public changed() {\r\n if (!this.Parameters)\r\n return;\r\n\r\n if(!this.Groups)\r\n this.generateGroups();\r\n \r\n // Se ci sono delle modifiche ai binding potrebbero essere cambiati i required. Ricreo tutti i componenti e ri-idrato la cache dei parametri\r\n var changes = this.reviewParametersBindings();\r\n if (changes.length > 0) {\r\n\r\n // In base ai binding cambiati devo trovare tutti i parametri che han subito modifiche strutturali (visibilità, obbligatorietà)\r\n // distruggerli e ricrearli in modo che i binding lato html si aggiornino di conseguenza.\r\n // 1: Faccio una copia del parametro corrente\r\n // 2: Trovo la sua posizione all'interno dei gruppi e lo sostituisco con la copia\r\n // 3: Aggiorno la lista dei parametri e la sua cache in modo da puntare all'oggetto nuovo\r\n changes.forEach(ch => {\r\n let index = this.Parameters.findIndex(t => t.id == ch);\r\n let parameterCopy = this.utiExts.deepClone(this.Parameters[index]) as GenericParameter;\r\n\r\n let parameterRefFixed = false;\r\n for (let ig = 0; ig < this.Groups.length; ig++) {\r\n var g = this.Groups[ig];\r\n for (let ip = 0; ip < g.parameters.length; ip++) {\r\n var p = g.parameters[ip]\r\n if (p === this.Parameters[index]) {\r\n this.Groups[ig].parameters[ip] = parameterCopy;\r\n parameterRefFixed = true;\r\n break;\r\n }\r\n }\r\n if (parameterRefFixed)\r\n break;\r\n }\r\n \r\n this.Parameters[index] = parameterCopy\r\n this.ParametersCache[ch] = this.Parameters[index];\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n var ParametersClone = this.utiExts.deepClone(this.Parameters) as GenericParameter[];\r\n\r\n // Aggiusto le modalità di funzionamento dei parametri lista. Che internamente funzionano sempre con una lista di valori\r\n ParametersClone?.forEach(t => {\r\n if (t.type == \"enum\" && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && Array.isArray(t.value))\r\n t.value = t.value.join(',');\r\n });\r\n\r\n this.propagateChange(this.SingleParameterMode ? ParametersClone[0] : ParametersClone);\r\n }\r\n\r\n /**\r\n * Rimuove il parametro selezionato e propaga il modello\r\n * \r\n * @param {GenericParameter} par Parametro da rimuovere\r\n */\r\n public removeParameter(par: GenericParameter) {\r\n this.Parameters.splice(this.Parameters.indexOf(par), 1);\r\n this.changed();\r\n }\r\n\r\n public GenerateParameterGroups() {\r\n let Groups: { id: string, groups: string[], order: number }[] = [];\r\n\r\n this.Parameters.forEach(param => {\r\n Groups.push({ id: param.id, groups: param.group.split(\"§\"), order: param.order });\r\n });\r\n\r\n let GroupedGroups = Groups.reduce((r, a) => {\r\n let firstGroupId = a.groups?.length > 0 ? a.groups[0] : \"\";\r\n r[firstGroupId] = [...r[firstGroupId] || [], a];\r\n return r;\r\n }, {});\r\n\r\n console.log(GroupedGroups);\r\n\r\n // Ciclo del risultato, aggiungendo i gruppi al modello\r\n // Per ogni gruppo che aggiungo, assegno i parametri in ordine\r\n }\r\n\r\n /**\r\n * Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo\r\n * \r\n * @returns {string[]} lista con gli id dei parametri che sono stati modificati\r\n */\r\n private reviewParametersBindings(): string[] {\r\n let changes = [];\r\n for (let i = 0; i < this.Parameters.length; i++) {\r\n var p = this.Parameters[i];\r\n\r\n if (p.requiredexp) {\r\n let prevReq = p.required;\r\n p.required = this.evaluate(p.requiredexp);\r\n if (prevReq != p.required)\r\n changes.push(p.id);\r\n }\r\n if (p.visibleexp) {\r\n let prevVisi = p.visible;\r\n p.visible = this.evaluate(p.visibleexp);\r\n if (prevVisi != p.visible)\r\n changes.push(p.id)\r\n }\r\n }\r\n return changes;\r\n }\r\n\r\n /**\r\n * Valuta un'espressione in base ai parametri presenti nel modello attuale\r\n * \r\n * @param expr Espressione da valutare scritta nel formato (ripetibile) \"ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)\" separato eventualmente da && ed ||\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n private evaluate(expr: string): boolean {\r\n var regex = /\\s?([a-zA-Z0-9_-]+)\\s?(!=|==|<|>|<=|>=)\\s?(`[^`]+`|``|null|[0-9,]+|true|false)/gm;\r\n\r\n var matches: string[] = [];\r\n var finalExpr = expr;\r\n while (matches = regex.exec(expr)) {\r\n var fullMatch = matches[0].trim();\r\n var id = matches[1].trim();\r\n var operation = matches[2].trim();\r\n let bValue = matches[3].trim().trim();\r\n var value = matches[3].trim().trim().replace('`', '').replace('`', '');\r\n\r\n finalExpr = finalExpr.replace(fullMatch, `this.checkValue('${id}', '${operation}', ${bValue == 'null' ? 'null' : `'${value}'`})`);\r\n }\r\n\r\n return eval(finalExpr);\r\n }\r\n\r\n /**\r\n * Restituisce l'operazione di comparazione fra un singolo valore di un parametro e un suo valore di confronto in base ad un operatore\r\n * Richiamata da EVAL\r\n * \r\n * @param {string} key Chiave del parametro di cui verificare il valore\r\n * @param {string} operator Operatore con cui verificare il valore: ==, !=, >, <, >=, <=\r\n * @param {string} value Valore di confronto da utilizzare\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n public checkValue(key: string, operator: string, value: string): boolean {\r\n var rPar = this.ParametersCache[key];\r\n try {\r\n switch (rPar.type) {\r\n case \"string\":\r\n case \"enum\":\r\n return eval(`\"${this.defaultIfnullOrUndefined(rPar.value, ``)}\" ${operator} \"${this.defaultIfnullOrUndefined(value, ``)}\"`);\r\n case \"boolean\":\r\n return eval(`${this.defaultIfnullOrUndefined(rPar.value, ``).toString()} ${operator} ${this.defaultIfnullOrUndefined(value, ``)}`);\r\n case \"number\":\r\n return eval(`${this.defaultIfnullOrUndefined(rPar.value, '\"\"', true).replace(',', '.')} ${operator} ${this.defaultIfnullOrUndefined(value, '\"\"', true).replace(',', '.')}`);\r\n case \"date\":\r\n let parDateConv = `this.dates.getDateConvertion(\"${rPar.value}\")`;\r\n let valDateConv = `this.dates.getDateConvertion(\"${value}\")`;\r\n\r\n switch (operator) {\r\n\r\n case \"==\": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);\r\n case \"!=\": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);\r\n case \">\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);\r\n case \"<\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);\r\n case \">=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n case \"<=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n }\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n console.warn(\"Errori nella valutazione dell'espressione. Fallback a false\");\r\n return false;\r\n }\r\n\r\n throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;\r\n }\r\n\r\n /** @ignore */\r\n private defaultIfnullOrUndefined<T>(item: T, dflt: T, emptyStringIsNull: boolean = false): T {\r\n if (item == null || item == undefined || item.toString() == 'null' || (emptyStringIsNull && item.toString() == \"\"))\r\n return dflt;\r\n return item;\r\n }\r\n\r\n /** @ignore */\r\n public getSource(parameter: GenericParameter, search: string, byid: boolean): Observable<{ id: string, description: string }[]> {\r\n if (!this.AutoCompleteDataRetrieve) {\r\n console.error(\"@forms-and-validations: funzione di dataretrieve non impostata per un parametro autocomplete\");\r\n return of([])\r\n }\r\n else\r\n return this.AutoCompleteDataRetrieve(parameter, search, byid);\r\n }\r\n}","<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <ng-container *ngIf=\"par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\">&nbsp;</span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseCommaSeparatedList]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </ng-container>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { EsParametersComponent } from './es_parameters.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [EsParametersComponent],\r\n imports: [\r\n CommonModule,\r\n LocalizationModule,\r\n FormsModule,\r\n FormsAndValidationsModule,\r\n ],\r\n exports: [EsParametersComponent]\r\n})\r\nexport class EsParametersModule {\r\n }\r\n","/**\r\n * Classe che rappresenta un parametro generico\r\n */\r\nexport class GenericParameter {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice del parametro\r\n * @param {string} description Descrizione del parametro\r\n * @param {string} pattern Pattern di validazione\r\n * @param {'date' | 'string' | 'number' | 'boolean' | 'enum'} type Tipo di input \r\n * @param {boolean} required Indica se il valore è obbligatorio o meno\r\n * @param {any} v_default Valore di default per questo Parametro\r\n * @param {{ id: string, description: string }[]} enumvalues Qualora il **type** fosse di tipo **enum**, qui devono esserci tutti i valori che può assumere \r\n * @param {boolean} multienum Qualora il **type** fosse di tipo **enum**, indica se è possibile selezionare più valori (multiselect)\r\n * @param {string} sourceapi Nei casi in cui il **type** è **enum** indica l'api da cui recuperare i valori da bindare alla select o alla multiselect\r\n * @param {boolean} pageddata Nei casi in cui il **type** è **enum** indica che l'api specificata eventualmetne da **sourceapi** è paginata\r\n */\r\n constructor(\r\n public id: string,\r\n public description: string,\r\n public pattern: string,\r\n type: 'date' | 'string' | 'number' | 'boolean' | 'enum',\r\n public required: boolean,\r\n v_default: any = null,\r\n public enumvalues: { id: string, description: string }[] = [],\r\n public multienum?: boolean,\r\n public sourceapi?: string,\r\n public pageddata?: boolean) {\r\n\r\n this.type = type == 'enum' ? null : type;\r\n this.visible = true;\r\n this.enumtype = type == 'enum' ? type : \"\";\r\n this.isreadonly = false;\r\n\r\n if (!this.enumtype && enumvalues.length != 0)\r\n console.error(\"impossibile gestire valori di dizionario per un parametro non di tipo enum\");\r\n\r\n if (v_default != null)\r\n this.value = v_default;\r\n }\r\n\r\n /** Tipo di dato rappresentato da questo parametro */\r\n public type?: 'date' | 'string' | 'number' | 'boolean' | 'enum';\r\n\r\n /** Typecode lato C# che rappresenta il tipo di dato */\r\n public typecode: number;\r\n\r\n /** Indica se il campo specificato dev'essere di sola lettura o meno */\r\n public isreadonly: boolean;\r\n\r\n /** Valore del parametro */\r\n public value: any;\r\n\r\n /** Indica se questo parametro dev'essere inserito o no. In caso contrario viene semplicemente nascosto */\r\n public visible: boolean;\r\n\r\n /** Tipo Enum, valorizzato dal Backend */\r\n public enumtype: string;\r\n\r\n /** Tipo Dizionario, valorizzato dal Backend */\r\n public dicttype: string;\r\n\r\n /** Espressione di obbligatorietà */\r\n public requiredexp?: string;\r\n\r\n /** Espressione di visibilità */\r\n public visibleexp?: string;\r\n\r\n /** Ordinamento in base al quale verranno ordinati i parametri */\r\n public order: number;\r\n\r\n /** Gruppo di appartenenza del parametro */\r\n public group: string;\r\n}","/*\r\n * Public API Surface of parameters\r\n */\r\nexport * from './lib/es_parameters.module';\r\nexport * from './lib/models/GenericParameter';\r\nexport * from './lib/es_parameters.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -130,8 +130,8 @@ class EsParametersComponent {
130
130
  if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && !Array.isArray(t.value))
131
131
  t.value = t.value ? t.value.split(',').map(t => t.trim()) : [];
132
132
  if (t.type == 'enum' && t.multienum && t.value && !Array.isArray(t.value) && t.value.toString().startsWith("[") && t.value.toString().endsWith("]")) {
133
- let s = t.value.toString();
134
- t.value = s.substring(1, s.length - 1);
133
+ let s = JSON.parse(t.value);
134
+ t.value = s.join(',');
135
135
  }
136
136
  });
137
137
  this.reviewParametersBindings();
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-parameters.mjs","sources":["../../../projects/parameters/src/lib/es_parameters.component.loc.ts","../../../projects/parameters/src/lib/models/GenericParameterGroup.ts","../../../projects/parameters/src/lib/es_parameters.component.ts","../../../projects/parameters/src/lib/es_parameters.component.html","../../../projects/parameters/src/lib/es_parameters.module.ts","../../../projects/parameters/src/lib/models/GenericParameter.ts","../../../projects/parameters/src/public-api.ts","../../../projects/parameters/src/esfaenza-parameters.ts"],"sourcesContent":["import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsParametersComponent**\r\n */\r\n@Injectable()\r\nexport class EsParametersLoc extends LocalizationService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"it->en\", \"Seleziona\", [\"Select\"])\r\n }\r\n}","import { GenericParameter } from \"./GenericParameter\";\r\n\r\n/**\r\n * Classe che rappresenta un gruppo di parametri generico\r\n */\r\nexport class GenericParameterGroup {\r\n\r\n /**\r\n * Costruttore\r\n * @param {string} groupName Descrizione del gruppo che fa anche da id\r\n * @param {number} order ordine del gruppo\r\n */\r\n\r\n constructor(public groupName: string, public order: number) {\r\n this.parameters = [];\r\n this.subgroups = [];\r\n }\r\n\r\n /** Lista di Generic Parameters */\r\n public parameters: GenericParameter[];\r\n\r\n /** Eventuale lista di sottogruppi */\r\n public subgroups: GenericParameterGroup[];\r\n\r\n /** Eventuale lista di sottogruppi */\r\n // public : GenericParameterGroup[];\r\n\r\n}","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NgControl, NgForm, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from \"@angular/forms\";\r\nimport { ChangeDetectorRef, Component, forwardRef, Injector, Input, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { GenericParameter } from './models/GenericParameter';\r\n\r\n// Applicazione\r\nimport { EsParametersLoc } from \"./es_parameters.component.loc\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { GenericParameterGroup } from \"./models/GenericParameterGroup\";\r\n\r\n/** Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico */\r\n@Component({\r\n selector: \"es-parameters\",\r\n providers: [\r\n { provide: LocalizationService, useClass: EsParametersLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n }\r\n ],\r\n styleUrls: [\"./es_parameters.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: \"./es_parameters.component.html\"\r\n})\r\nexport class EsParametersComponent implements ControlValueAccessor {\r\n\r\n /** Indica se si lavora a singolo parametro forzato dentro un array for the glory of satan */\r\n private SingleParameterMode: boolean = false;\r\n\r\n /** Modello del componente su cui vengono effettuate le graficazioni */\r\n public Parameters: GenericParameter[];\r\n\r\n /** Modello del componente su cui vengono effettuate le graficazioni */\r\n public Groups: GenericParameterGroup[];\r\n\r\n /** Cache per fare lookup rapidi in fase di valutazione espressioni di visibilità e obbligatorietà */\r\n private ParametersCache: { [id: string]: GenericParameter };\r\n\r\n /**\r\n * Pipeline di Angular \r\n * \r\n * @ignore\r\n */\r\n propagateChange = (_: any) => { };\r\n\r\n /** Indica che il parametro deve essere in modalità display */\r\n @Input() DisplayMode: boolean = false;\r\n\r\n /** Indica che l'ultimo parametro non deve avere margine in fondo */\r\n @Input() LastParameterNoMargin: boolean = false;\r\n\r\n /** col-md-X per la label */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Input a cui collegare la variabile **submitted** del form all'interno del quale viene utilizzato questo componente */\r\n @Input() submitted: boolean = false;\r\n\r\n /** Valore da mostrare qualora non fossero ancora ricevuti i **Parameters** da mostrare */\r\n @Input() EmptyMessage: string = \"\";\r\n\r\n /** Permette di rimuovere i parametri dalla lista cliccando sulla X davanti alla Label */\r\n @Input() Removal: boolean = false;\r\n\r\n /** Indica se i componenti di Input generati sono Readonly o no */\r\n @Input() Readonly: boolean = false;\r\n\r\n /** Indica il formato lista che dev'essere utilizzato */\r\n @Input() ListFormat: 'CommaSeparated' | 'Array' = 'Array';\r\n\r\n /** Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit */\r\n @Input() Form: NgForm = null;\r\n\r\n /** Quando utilizza un sottocomponente autocomplete abilita o disabilita il reset dell'input per ogni selezione */\r\n @Input() AutocompleteHideChoicesOnSelection: boolean = false;\r\n\r\n /** Funzione da utilizzare per tirare fuori i dati di un autocomplete */\r\n @Input() AutoCompleteDataRetrieve: (parameter: GenericParameter, search: string, byid: boolean) => Observable<{ id: string, description: string }[]>\r\n\r\n /** Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private utiExts: UtilityService, public lc: LocalizationService, public cdr: ChangeDetectorRef, private inj: Injector, public dates: DateService) { }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public writeValue(obj): void {\r\n\r\n if (!obj)\r\n return;\r\n\r\n if(!Array.isArray(obj))\r\n this.SingleParameterMode = true;\r\n \r\n this.Parameters = Array.isArray(obj) ? obj : [obj];\r\n\r\n this.ParametersCache = {};\r\n\r\n this.Parameters.forEach(t => {\r\n this.ParametersCache[t.id] = t;\r\n\r\n if (!t.typecode && !t.type)\r\n console.warn(\"Non è stato specificato né un type né un typecode\");\r\n\r\n if (t.typecode && !t.type)\r\n t.type = this.utiExts.getJsTypeFromTypeCode(t.typecode);\r\n\r\n if (t.typecode && t.type != this.utiExts.getJsTypeFromTypeCode(t.typecode))\r\n console.warn(`Rilevate inconsistenze fra il Tipo ${t.type} e il Tipo ${this.utiExts.getJsTypeFromTypeCode(t.typecode)} calcolato da TypeCode ${t.typecode} per il parametro ${t.id}`);\r\n\r\n if (t.type == \"boolean\")\r\n t.value = t.value?.toString()?.toLowerCase() === \"true\";\r\n\r\n if (t.enumtype || t.dicttype)\r\n t.type = 'enum';\r\n\r\n // Valore valido ma modalità di utilizzo a CommaSeparated, devo assicurarmi di riemettere la versione con la stringa\r\n if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && Array.isArray(t.value))\r\n this.changed();\r\n\r\n // Aggiusto le modalità di funzionamento dei parametri lista. Che internamente funzionano sempre con una lista di valori\r\n if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && !Array.isArray(t.value))\r\n t.value = t.value ? t.value.split(',').map(t => t.trim()) : [];\r\n\r\n if (t.type == 'enum' && t.multienum && t.value && !Array.isArray(t.value) && t.value.toString().startsWith(\"[\") && t.value.toString().endsWith(\"]\")) {\r\n let s = (<string>t.value.toString());\r\n t.value = s.substring(1, s.length - 1);\r\n }\r\n });\r\n\r\n this.reviewParametersBindings();\r\n this.generateGroups();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di creare e ordinare i gruppi dei parametri\r\n */\r\n generateGroups() {\r\n this.Groups = [];\r\n\r\n if (this.Parameters?.length > 0) {\r\n this.Parameters.sort((a, b) => a.order < b.order ? -1 : 1);\r\n\r\n // Ciclo tutti i parametri\r\n for (let i = 0; this.Parameters.length > i; i++) {\r\n let par = this.Parameters[i];\r\n\r\n let parGroupName = par.group ?? \"\";\r\n let groupOrder = par.group ? par.order : -1;\r\n\r\n // Se il gruppo non esiste, lo aggiungo\r\n if (!this.Groups.some(x => x.groupName == parGroupName)) {\r\n this.Groups.push(new GenericParameterGroup(parGroupName, groupOrder));\r\n }\r\n\r\n // Inserisco il parametro dentro al suo gruppo\r\n this.Groups.find(g => g.groupName == parGroupName).parameters.push(par)\r\n }\r\n\r\n // Gestione sottogruppi\r\n let subgroups: GenericParameterGroup[] = this.Groups.filter(group => group.groupName.includes('§'));\r\n for (let _; subgroups.length > 0; () => { }) {\r\n // Recupero la lista di gruppi che hanno sottogruppi\r\n // Per convenzione, nel nome contengono \"§\"\r\n this.tryToAddSubgroups(subgroups);\r\n subgroups = this.Groups.filter(group => group.groupName.includes('§'));\r\n }\r\n\r\n this.Groups.sort((a, b) => a.order < b.order ? -1 : 1);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di creare e ordinare i sottogruppi dei parametri\r\n */\r\n tryToAddSubgroups(subgroups: GenericParameterGroup[]) {\r\n for (let i = 0; subgroups.length > i; i++) {\r\n let sub = subgroups[i];\r\n\r\n // Ottengo un lista con la gerarchia dei gruppi, in ordine\r\n let groupsParentHierarchy = sub.groupName.split('§') ?? [];\r\n\r\n // Recupero il gruppo padre\r\n let parentGroupName = sub.groupName.replace(`§${groupsParentHierarchy[groupsParentHierarchy.length - 1]}`, ``);\r\n\r\n // Se il gruppo padre non esiste, lo aggiungo\r\n if (!this.Groups.some(x => x.groupName == parentGroupName)) {\r\n this.Groups.push(new GenericParameterGroup(parentGroupName, sub.order));\r\n }\r\n\r\n // Rimuovo dal nome del gruppo l'informazione sul padre (Sistemando anche l'etichetta)\r\n // e lo aggiungo ai sottogruppi del padre\r\n sub.groupName = sub.groupName.replace(`${parentGroupName}§`, '');\r\n let parentGroup = this.Groups.find(x => x.groupName == parentGroupName);\r\n if (parentGroup?.subgroups.some(s => s.groupName == sub.groupName)) {\r\n let target = parentGroup.subgroups.find(f => f.groupName == sub.groupName);\r\n sub.parameters.map(p => target.parameters.push(p));\r\n sub.subgroups.map(s => target.subgroups.push(s));\r\n target.order = sub.order < target.order ? sub.order : target.order;\r\n } else {\r\n parentGroup?.subgroups.push(sub);\r\n }\r\n\r\n // Rimuovo il sottogruppo gruppo dalla lista\r\n this.Groups.splice(this.Groups.indexOf(sub), 1);\r\n }\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnTouched(fn): void { }\r\n\r\n /**\r\n * Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel\r\n */\r\n public changed() {\r\n if (!this.Parameters)\r\n return;\r\n\r\n if(!this.Groups)\r\n this.generateGroups();\r\n \r\n // Se ci sono delle modifiche ai binding potrebbero essere cambiati i required. Ricreo tutti i componenti e ri-idrato la cache dei parametri\r\n var changes = this.reviewParametersBindings();\r\n if (changes.length > 0) {\r\n\r\n // In base ai binding cambiati devo trovare tutti i parametri che han subito modifiche strutturali (visibilità, obbligatorietà)\r\n // distruggerli e ricrearli in modo che i binding lato html si aggiornino di conseguenza.\r\n // 1: Faccio una copia del parametro corrente\r\n // 2: Trovo la sua posizione all'interno dei gruppi e lo sostituisco con la copia\r\n // 3: Aggiorno la lista dei parametri e la sua cache in modo da puntare all'oggetto nuovo\r\n changes.forEach(ch => {\r\n let index = this.Parameters.findIndex(t => t.id == ch);\r\n let parameterCopy = this.utiExts.deepClone(this.Parameters[index]) as GenericParameter;\r\n\r\n let parameterRefFixed = false;\r\n for (let ig = 0; ig < this.Groups.length; ig++) {\r\n var g = this.Groups[ig];\r\n for (let ip = 0; ip < g.parameters.length; ip++) {\r\n var p = g.parameters[ip]\r\n if (p === this.Parameters[index]) {\r\n this.Groups[ig].parameters[ip] = parameterCopy;\r\n parameterRefFixed = true;\r\n break;\r\n }\r\n }\r\n if (parameterRefFixed)\r\n break;\r\n }\r\n \r\n this.Parameters[index] = parameterCopy\r\n this.ParametersCache[ch] = this.Parameters[index];\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n var ParametersClone = this.utiExts.deepClone(this.Parameters) as GenericParameter[];\r\n\r\n // Aggiusto le modalità di funzionamento dei parametri lista. Che internamente funzionano sempre con una lista di valori\r\n ParametersClone?.forEach(t => {\r\n if (t.type == \"enum\" && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && Array.isArray(t.value))\r\n t.value = t.value.join(',');\r\n });\r\n\r\n this.propagateChange(this.SingleParameterMode ? ParametersClone[0] : ParametersClone);\r\n }\r\n\r\n /**\r\n * Rimuove il parametro selezionato e propaga il modello\r\n * \r\n * @param {GenericParameter} par Parametro da rimuovere\r\n */\r\n public removeParameter(par: GenericParameter) {\r\n this.Parameters.splice(this.Parameters.indexOf(par), 1);\r\n this.changed();\r\n }\r\n\r\n public GenerateParameterGroups() {\r\n let Groups: { id: string, groups: string[], order: number }[] = [];\r\n\r\n this.Parameters.forEach(param => {\r\n Groups.push({ id: param.id, groups: param.group.split(\"§\"), order: param.order });\r\n });\r\n\r\n let GroupedGroups = Groups.reduce((r, a) => {\r\n let firstGroupId = a.groups?.length > 0 ? a.groups[0] : \"\";\r\n r[firstGroupId] = [...r[firstGroupId] || [], a];\r\n return r;\r\n }, {});\r\n\r\n console.log(GroupedGroups);\r\n\r\n // Ciclo del risultato, aggiungendo i gruppi al modello\r\n // Per ogni gruppo che aggiungo, assegno i parametri in ordine\r\n }\r\n\r\n /**\r\n * Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo\r\n * \r\n * @returns {string[]} lista con gli id dei parametri che sono stati modificati\r\n */\r\n private reviewParametersBindings(): string[] {\r\n let changes = [];\r\n for (let i = 0; i < this.Parameters.length; i++) {\r\n var p = this.Parameters[i];\r\n\r\n if (p.requiredexp) {\r\n let prevReq = p.required;\r\n p.required = this.evaluate(p.requiredexp);\r\n if (prevReq != p.required)\r\n changes.push(p.id);\r\n }\r\n if (p.visibleexp) {\r\n let prevVisi = p.visible;\r\n p.visible = this.evaluate(p.visibleexp);\r\n if (prevVisi != p.visible)\r\n changes.push(p.id)\r\n }\r\n }\r\n return changes;\r\n }\r\n\r\n /**\r\n * Valuta un'espressione in base ai parametri presenti nel modello attuale\r\n * \r\n * @param expr Espressione da valutare scritta nel formato (ripetibile) \"ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)\" separato eventualmente da && ed ||\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n private evaluate(expr: string): boolean {\r\n var regex = /\\s?([a-zA-Z0-9_-]+)\\s?(!=|==|<|>|<=|>=)\\s?(`[^`]+`|``|null|[0-9,]+|true|false)/gm;\r\n\r\n var matches: string[] = [];\r\n var finalExpr = expr;\r\n while (matches = regex.exec(expr)) {\r\n var fullMatch = matches[0].trim();\r\n var id = matches[1].trim();\r\n var operation = matches[2].trim();\r\n let bValue = matches[3].trim().trim();\r\n var value = matches[3].trim().trim().replace('`', '').replace('`', '');\r\n\r\n finalExpr = finalExpr.replace(fullMatch, `this.checkValue('${id}', '${operation}', ${bValue == 'null' ? 'null' : `'${value}'`})`);\r\n }\r\n\r\n return eval(finalExpr);\r\n }\r\n\r\n /**\r\n * Restituisce l'operazione di comparazione fra un singolo valore di un parametro e un suo valore di confronto in base ad un operatore\r\n * Richiamata da EVAL\r\n * \r\n * @param {string} key Chiave del parametro di cui verificare il valore\r\n * @param {string} operator Operatore con cui verificare il valore: ==, !=, >, <, >=, <=\r\n * @param {string} value Valore di confronto da utilizzare\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n public checkValue(key: string, operator: string, value: string): boolean {\r\n var rPar = this.ParametersCache[key];\r\n try {\r\n switch (rPar.type) {\r\n case \"string\":\r\n case \"enum\":\r\n return eval(`\"${this.defaultIfnullOrUndefined(rPar.value, ``)}\" ${operator} \"${this.defaultIfnullOrUndefined(value, ``)}\"`);\r\n case \"boolean\":\r\n return eval(`${this.defaultIfnullOrUndefined(rPar.value, ``).toString()} ${operator} ${this.defaultIfnullOrUndefined(value, ``)}`);\r\n case \"number\":\r\n return eval(`${this.defaultIfnullOrUndefined(rPar.value, '\"\"', true).replace(',', '.')} ${operator} ${this.defaultIfnullOrUndefined(value, '\"\"', true).replace(',', '.')}`);\r\n case \"date\":\r\n let parDateConv = `this.dates.getDateConvertion(\"${rPar.value}\")`;\r\n let valDateConv = `this.dates.getDateConvertion(\"${value}\")`;\r\n\r\n switch (operator) {\r\n\r\n case \"==\": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);\r\n case \"!=\": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);\r\n case \">\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);\r\n case \"<\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);\r\n case \">=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n case \"<=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n }\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n console.warn(\"Errori nella valutazione dell'espressione. Fallback a false\");\r\n return false;\r\n }\r\n\r\n throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;\r\n }\r\n\r\n /** @ignore */\r\n private defaultIfnullOrUndefined<T>(item: T, dflt: T, emptyStringIsNull: boolean = false): T {\r\n if (item == null || item == undefined || item.toString() == 'null' || (emptyStringIsNull && item.toString() == \"\"))\r\n return dflt;\r\n return item;\r\n }\r\n\r\n /** @ignore */\r\n public getSource(parameter: GenericParameter, search: string, byid: boolean): Observable<{ id: string, description: string }[]> {\r\n if (!this.AutoCompleteDataRetrieve) {\r\n console.error(\"@forms-and-validations: funzione di dataretrieve non impostata per un parametro autocomplete\");\r\n return of([])\r\n }\r\n else\r\n return this.AutoCompleteDataRetrieve(parameter, search, byid);\r\n }\r\n}","<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <ng-container *ngIf=\"par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\">&nbsp;</span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseCommaSeparatedList]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </ng-container>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { EsParametersComponent } from './es_parameters.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [EsParametersComponent],\r\n imports: [\r\n CommonModule,\r\n LocalizationModule,\r\n FormsModule,\r\n FormsAndValidationsModule,\r\n ],\r\n exports: [EsParametersComponent]\r\n})\r\nexport class EsParametersModule {\r\n }\r\n","/**\r\n * Classe che rappresenta un parametro generico\r\n */\r\nexport class GenericParameter {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice del parametro\r\n * @param {string} description Descrizione del parametro\r\n * @param {string} pattern Pattern di validazione\r\n * @param {'date' | 'string' | 'number' | 'boolean' | 'enum'} type Tipo di input \r\n * @param {boolean} required Indica se il valore è obbligatorio o meno\r\n * @param {any} v_default Valore di default per questo Parametro\r\n * @param {{ id: string, description: string }[]} enumvalues Qualora il **type** fosse di tipo **enum**, qui devono esserci tutti i valori che può assumere \r\n * @param {boolean} multienum Qualora il **type** fosse di tipo **enum**, indica se è possibile selezionare più valori (multiselect)\r\n * @param {string} sourceapi Nei casi in cui il **type** è **enum** indica l'api da cui recuperare i valori da bindare alla select o alla multiselect\r\n * @param {boolean} pageddata Nei casi in cui il **type** è **enum** indica che l'api specificata eventualmetne da **sourceapi** è paginata\r\n */\r\n constructor(\r\n public id: string,\r\n public description: string,\r\n public pattern: string,\r\n type: 'date' | 'string' | 'number' | 'boolean' | 'enum',\r\n public required: boolean,\r\n v_default: any = null,\r\n public enumvalues: { id: string, description: string }[] = [],\r\n public multienum?: boolean,\r\n public sourceapi?: string,\r\n public pageddata?: boolean) {\r\n\r\n this.type = type == 'enum' ? null : type;\r\n this.visible = true;\r\n this.enumtype = type == 'enum' ? type : \"\";\r\n this.isreadonly = false;\r\n\r\n if (!this.enumtype && enumvalues.length != 0)\r\n console.error(\"impossibile gestire valori di dizionario per un parametro non di tipo enum\");\r\n\r\n if (v_default != null)\r\n this.value = v_default;\r\n }\r\n\r\n /** Tipo di dato rappresentato da questo parametro */\r\n public type?: 'date' | 'string' | 'number' | 'boolean' | 'enum';\r\n\r\n /** Typecode lato C# che rappresenta il tipo di dato */\r\n public typecode: number;\r\n\r\n /** Indica se il campo specificato dev'essere di sola lettura o meno */\r\n public isreadonly: boolean;\r\n\r\n /** Valore del parametro */\r\n public value: any;\r\n\r\n /** Indica se questo parametro dev'essere inserito o no. In caso contrario viene semplicemente nascosto */\r\n public visible: boolean;\r\n\r\n /** Tipo Enum, valorizzato dal Backend */\r\n public enumtype: string;\r\n\r\n /** Tipo Dizionario, valorizzato dal Backend */\r\n public dicttype: string;\r\n\r\n /** Espressione di obbligatorietà */\r\n public requiredexp?: string;\r\n\r\n /** Espressione di visibilità */\r\n public visibleexp?: string;\r\n\r\n /** Ordinamento in base al quale verranno ordinati i parametri */\r\n public order: number;\r\n\r\n /** Gruppo di appartenenza del parametro */\r\n public group: string;\r\n}","/*\r\n * Public API Surface of parameters\r\n */\r\nexport * from './lib/es_parameters.module';\r\nexport * from './lib/models/GenericParameter';\r\nexport * from './lib/es_parameters.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-parameters.mjs","sources":["../../../projects/parameters/src/lib/es_parameters.component.loc.ts","../../../projects/parameters/src/lib/models/GenericParameterGroup.ts","../../../projects/parameters/src/lib/es_parameters.component.ts","../../../projects/parameters/src/lib/es_parameters.component.html","../../../projects/parameters/src/lib/es_parameters.module.ts","../../../projects/parameters/src/lib/models/GenericParameter.ts","../../../projects/parameters/src/public-api.ts","../../../projects/parameters/src/esfaenza-parameters.ts"],"sourcesContent":["import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsParametersComponent**\r\n */\r\n@Injectable()\r\nexport class EsParametersLoc extends LocalizationService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"it->en\", \"Seleziona\", [\"Select\"])\r\n }\r\n}","import { GenericParameter } from \"./GenericParameter\";\r\n\r\n/**\r\n * Classe che rappresenta un gruppo di parametri generico\r\n */\r\nexport class GenericParameterGroup {\r\n\r\n /**\r\n * Costruttore\r\n * @param {string} groupName Descrizione del gruppo che fa anche da id\r\n * @param {number} order ordine del gruppo\r\n */\r\n\r\n constructor(public groupName: string, public order: number) {\r\n this.parameters = [];\r\n this.subgroups = [];\r\n }\r\n\r\n /** Lista di Generic Parameters */\r\n public parameters: GenericParameter[];\r\n\r\n /** Eventuale lista di sottogruppi */\r\n public subgroups: GenericParameterGroup[];\r\n\r\n /** Eventuale lista di sottogruppi */\r\n // public : GenericParameterGroup[];\r\n\r\n}","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NgControl, NgForm, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from \"@angular/forms\";\r\nimport { ChangeDetectorRef, Component, forwardRef, Injector, Input, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { GenericParameter } from './models/GenericParameter';\r\n\r\n// Applicazione\r\nimport { EsParametersLoc } from \"./es_parameters.component.loc\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { GenericParameterGroup } from \"./models/GenericParameterGroup\";\r\n\r\n/** Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico */\r\n@Component({\r\n selector: \"es-parameters\",\r\n providers: [\r\n { provide: LocalizationService, useClass: EsParametersLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n }\r\n ],\r\n styleUrls: [\"./es_parameters.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: \"./es_parameters.component.html\"\r\n})\r\nexport class EsParametersComponent implements ControlValueAccessor {\r\n\r\n /** Indica se si lavora a singolo parametro forzato dentro un array for the glory of satan */\r\n private SingleParameterMode: boolean = false;\r\n\r\n /** Modello del componente su cui vengono effettuate le graficazioni */\r\n public Parameters: GenericParameter[];\r\n\r\n /** Modello del componente su cui vengono effettuate le graficazioni */\r\n public Groups: GenericParameterGroup[];\r\n\r\n /** Cache per fare lookup rapidi in fase di valutazione espressioni di visibilità e obbligatorietà */\r\n private ParametersCache: { [id: string]: GenericParameter };\r\n\r\n /**\r\n * Pipeline di Angular \r\n * \r\n * @ignore\r\n */\r\n propagateChange = (_: any) => { };\r\n\r\n /** Indica che il parametro deve essere in modalità display */\r\n @Input() DisplayMode: boolean = false;\r\n\r\n /** Indica che l'ultimo parametro non deve avere margine in fondo */\r\n @Input() LastParameterNoMargin: boolean = false;\r\n\r\n /** col-md-X per la label */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Input a cui collegare la variabile **submitted** del form all'interno del quale viene utilizzato questo componente */\r\n @Input() submitted: boolean = false;\r\n\r\n /** Valore da mostrare qualora non fossero ancora ricevuti i **Parameters** da mostrare */\r\n @Input() EmptyMessage: string = \"\";\r\n\r\n /** Permette di rimuovere i parametri dalla lista cliccando sulla X davanti alla Label */\r\n @Input() Removal: boolean = false;\r\n\r\n /** Indica se i componenti di Input generati sono Readonly o no */\r\n @Input() Readonly: boolean = false;\r\n\r\n /** Indica il formato lista che dev'essere utilizzato */\r\n @Input() ListFormat: 'CommaSeparated' | 'Array' = 'Array';\r\n\r\n /** Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit */\r\n @Input() Form: NgForm = null;\r\n\r\n /** Quando utilizza un sottocomponente autocomplete abilita o disabilita il reset dell'input per ogni selezione */\r\n @Input() AutocompleteHideChoicesOnSelection: boolean = false;\r\n\r\n /** Funzione da utilizzare per tirare fuori i dati di un autocomplete */\r\n @Input() AutoCompleteDataRetrieve: (parameter: GenericParameter, search: string, byid: boolean) => Observable<{ id: string, description: string }[]>\r\n\r\n /** Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private utiExts: UtilityService, public lc: LocalizationService, public cdr: ChangeDetectorRef, private inj: Injector, public dates: DateService) { }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public writeValue(obj): void {\r\n\r\n if (!obj)\r\n return;\r\n\r\n if(!Array.isArray(obj))\r\n this.SingleParameterMode = true;\r\n \r\n this.Parameters = Array.isArray(obj) ? obj : [obj];\r\n\r\n this.ParametersCache = {};\r\n\r\n this.Parameters.forEach(t => {\r\n this.ParametersCache[t.id] = t;\r\n\r\n if (!t.typecode && !t.type)\r\n console.warn(\"Non è stato specificato né un type né un typecode\");\r\n\r\n if (t.typecode && !t.type)\r\n t.type = this.utiExts.getJsTypeFromTypeCode(t.typecode);\r\n\r\n if (t.typecode && t.type != this.utiExts.getJsTypeFromTypeCode(t.typecode))\r\n console.warn(`Rilevate inconsistenze fra il Tipo ${t.type} e il Tipo ${this.utiExts.getJsTypeFromTypeCode(t.typecode)} calcolato da TypeCode ${t.typecode} per il parametro ${t.id}`);\r\n\r\n if (t.type == \"boolean\")\r\n t.value = t.value?.toString()?.toLowerCase() === \"true\";\r\n\r\n if (t.enumtype || t.dicttype)\r\n t.type = 'enum';\r\n\r\n // Valore valido ma modalità di utilizzo a CommaSeparated, devo assicurarmi di riemettere la versione con la stringa\r\n if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && Array.isArray(t.value))\r\n this.changed();\r\n\r\n // Aggiusto le modalità di funzionamento dei parametri lista. Che internamente funzionano sempre con una lista di valori\r\n if (t.type == 'enum' && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && !Array.isArray(t.value))\r\n t.value = t.value ? t.value.split(',').map(t => t.trim()) : [];\r\n\r\n if (t.type == 'enum' && t.multienum && t.value && !Array.isArray(t.value) && t.value.toString().startsWith(\"[\") && t.value.toString().endsWith(\"]\")) {\r\n let s = <string[]>JSON.parse(t.value)\r\n t.value = s.join(',');\r\n }\r\n });\r\n\r\n this.reviewParametersBindings();\r\n this.generateGroups();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di creare e ordinare i gruppi dei parametri\r\n */\r\n generateGroups() {\r\n this.Groups = [];\r\n\r\n if (this.Parameters?.length > 0) {\r\n this.Parameters.sort((a, b) => a.order < b.order ? -1 : 1);\r\n\r\n // Ciclo tutti i parametri\r\n for (let i = 0; this.Parameters.length > i; i++) {\r\n let par = this.Parameters[i];\r\n\r\n let parGroupName = par.group ?? \"\";\r\n let groupOrder = par.group ? par.order : -1;\r\n\r\n // Se il gruppo non esiste, lo aggiungo\r\n if (!this.Groups.some(x => x.groupName == parGroupName)) {\r\n this.Groups.push(new GenericParameterGroup(parGroupName, groupOrder));\r\n }\r\n\r\n // Inserisco il parametro dentro al suo gruppo\r\n this.Groups.find(g => g.groupName == parGroupName).parameters.push(par)\r\n }\r\n\r\n // Gestione sottogruppi\r\n let subgroups: GenericParameterGroup[] = this.Groups.filter(group => group.groupName.includes('§'));\r\n for (let _; subgroups.length > 0; () => { }) {\r\n // Recupero la lista di gruppi che hanno sottogruppi\r\n // Per convenzione, nel nome contengono \"§\"\r\n this.tryToAddSubgroups(subgroups);\r\n subgroups = this.Groups.filter(group => group.groupName.includes('§'));\r\n }\r\n\r\n this.Groups.sort((a, b) => a.order < b.order ? -1 : 1);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di creare e ordinare i sottogruppi dei parametri\r\n */\r\n tryToAddSubgroups(subgroups: GenericParameterGroup[]) {\r\n for (let i = 0; subgroups.length > i; i++) {\r\n let sub = subgroups[i];\r\n\r\n // Ottengo un lista con la gerarchia dei gruppi, in ordine\r\n let groupsParentHierarchy = sub.groupName.split('§') ?? [];\r\n\r\n // Recupero il gruppo padre\r\n let parentGroupName = sub.groupName.replace(`§${groupsParentHierarchy[groupsParentHierarchy.length - 1]}`, ``);\r\n\r\n // Se il gruppo padre non esiste, lo aggiungo\r\n if (!this.Groups.some(x => x.groupName == parentGroupName)) {\r\n this.Groups.push(new GenericParameterGroup(parentGroupName, sub.order));\r\n }\r\n\r\n // Rimuovo dal nome del gruppo l'informazione sul padre (Sistemando anche l'etichetta)\r\n // e lo aggiungo ai sottogruppi del padre\r\n sub.groupName = sub.groupName.replace(`${parentGroupName}§`, '');\r\n let parentGroup = this.Groups.find(x => x.groupName == parentGroupName);\r\n if (parentGroup?.subgroups.some(s => s.groupName == sub.groupName)) {\r\n let target = parentGroup.subgroups.find(f => f.groupName == sub.groupName);\r\n sub.parameters.map(p => target.parameters.push(p));\r\n sub.subgroups.map(s => target.subgroups.push(s));\r\n target.order = sub.order < target.order ? sub.order : target.order;\r\n } else {\r\n parentGroup?.subgroups.push(sub);\r\n }\r\n\r\n // Rimuovo il sottogruppo gruppo dalla lista\r\n this.Groups.splice(this.Groups.indexOf(sub), 1);\r\n }\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnTouched(fn): void { }\r\n\r\n /**\r\n * Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel\r\n */\r\n public changed() {\r\n if (!this.Parameters)\r\n return;\r\n\r\n if(!this.Groups)\r\n this.generateGroups();\r\n \r\n // Se ci sono delle modifiche ai binding potrebbero essere cambiati i required. Ricreo tutti i componenti e ri-idrato la cache dei parametri\r\n var changes = this.reviewParametersBindings();\r\n if (changes.length > 0) {\r\n\r\n // In base ai binding cambiati devo trovare tutti i parametri che han subito modifiche strutturali (visibilità, obbligatorietà)\r\n // distruggerli e ricrearli in modo che i binding lato html si aggiornino di conseguenza.\r\n // 1: Faccio una copia del parametro corrente\r\n // 2: Trovo la sua posizione all'interno dei gruppi e lo sostituisco con la copia\r\n // 3: Aggiorno la lista dei parametri e la sua cache in modo da puntare all'oggetto nuovo\r\n changes.forEach(ch => {\r\n let index = this.Parameters.findIndex(t => t.id == ch);\r\n let parameterCopy = this.utiExts.deepClone(this.Parameters[index]) as GenericParameter;\r\n\r\n let parameterRefFixed = false;\r\n for (let ig = 0; ig < this.Groups.length; ig++) {\r\n var g = this.Groups[ig];\r\n for (let ip = 0; ip < g.parameters.length; ip++) {\r\n var p = g.parameters[ip]\r\n if (p === this.Parameters[index]) {\r\n this.Groups[ig].parameters[ip] = parameterCopy;\r\n parameterRefFixed = true;\r\n break;\r\n }\r\n }\r\n if (parameterRefFixed)\r\n break;\r\n }\r\n \r\n this.Parameters[index] = parameterCopy\r\n this.ParametersCache[ch] = this.Parameters[index];\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n var ParametersClone = this.utiExts.deepClone(this.Parameters) as GenericParameter[];\r\n\r\n // Aggiusto le modalità di funzionamento dei parametri lista. Che internamente funzionano sempre con una lista di valori\r\n ParametersClone?.forEach(t => {\r\n if (t.type == \"enum\" && this.ListFormat == 'CommaSeparated' && t.multienum && t.value && Array.isArray(t.value))\r\n t.value = t.value.join(',');\r\n });\r\n\r\n this.propagateChange(this.SingleParameterMode ? ParametersClone[0] : ParametersClone);\r\n }\r\n\r\n /**\r\n * Rimuove il parametro selezionato e propaga il modello\r\n * \r\n * @param {GenericParameter} par Parametro da rimuovere\r\n */\r\n public removeParameter(par: GenericParameter) {\r\n this.Parameters.splice(this.Parameters.indexOf(par), 1);\r\n this.changed();\r\n }\r\n\r\n public GenerateParameterGroups() {\r\n let Groups: { id: string, groups: string[], order: number }[] = [];\r\n\r\n this.Parameters.forEach(param => {\r\n Groups.push({ id: param.id, groups: param.group.split(\"§\"), order: param.order });\r\n });\r\n\r\n let GroupedGroups = Groups.reduce((r, a) => {\r\n let firstGroupId = a.groups?.length > 0 ? a.groups[0] : \"\";\r\n r[firstGroupId] = [...r[firstGroupId] || [], a];\r\n return r;\r\n }, {});\r\n\r\n console.log(GroupedGroups);\r\n\r\n // Ciclo del risultato, aggiungendo i gruppi al modello\r\n // Per ogni gruppo che aggiungo, assegno i parametri in ordine\r\n }\r\n\r\n /**\r\n * Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo\r\n * \r\n * @returns {string[]} lista con gli id dei parametri che sono stati modificati\r\n */\r\n private reviewParametersBindings(): string[] {\r\n let changes = [];\r\n for (let i = 0; i < this.Parameters.length; i++) {\r\n var p = this.Parameters[i];\r\n\r\n if (p.requiredexp) {\r\n let prevReq = p.required;\r\n p.required = this.evaluate(p.requiredexp);\r\n if (prevReq != p.required)\r\n changes.push(p.id);\r\n }\r\n if (p.visibleexp) {\r\n let prevVisi = p.visible;\r\n p.visible = this.evaluate(p.visibleexp);\r\n if (prevVisi != p.visible)\r\n changes.push(p.id)\r\n }\r\n }\r\n return changes;\r\n }\r\n\r\n /**\r\n * Valuta un'espressione in base ai parametri presenti nel modello attuale\r\n * \r\n * @param expr Espressione da valutare scritta nel formato (ripetibile) \"ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)\" separato eventualmente da && ed ||\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n private evaluate(expr: string): boolean {\r\n var regex = /\\s?([a-zA-Z0-9_-]+)\\s?(!=|==|<|>|<=|>=)\\s?(`[^`]+`|``|null|[0-9,]+|true|false)/gm;\r\n\r\n var matches: string[] = [];\r\n var finalExpr = expr;\r\n while (matches = regex.exec(expr)) {\r\n var fullMatch = matches[0].trim();\r\n var id = matches[1].trim();\r\n var operation = matches[2].trim();\r\n let bValue = matches[3].trim().trim();\r\n var value = matches[3].trim().trim().replace('`', '').replace('`', '');\r\n\r\n finalExpr = finalExpr.replace(fullMatch, `this.checkValue('${id}', '${operation}', ${bValue == 'null' ? 'null' : `'${value}'`})`);\r\n }\r\n\r\n return eval(finalExpr);\r\n }\r\n\r\n /**\r\n * Restituisce l'operazione di comparazione fra un singolo valore di un parametro e un suo valore di confronto in base ad un operatore\r\n * Richiamata da EVAL\r\n * \r\n * @param {string} key Chiave del parametro di cui verificare il valore\r\n * @param {string} operator Operatore con cui verificare il valore: ==, !=, >, <, >=, <=\r\n * @param {string} value Valore di confronto da utilizzare\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n public checkValue(key: string, operator: string, value: string): boolean {\r\n var rPar = this.ParametersCache[key];\r\n try {\r\n switch (rPar.type) {\r\n case \"string\":\r\n case \"enum\":\r\n return eval(`\"${this.defaultIfnullOrUndefined(rPar.value, ``)}\" ${operator} \"${this.defaultIfnullOrUndefined(value, ``)}\"`);\r\n case \"boolean\":\r\n return eval(`${this.defaultIfnullOrUndefined(rPar.value, ``).toString()} ${operator} ${this.defaultIfnullOrUndefined(value, ``)}`);\r\n case \"number\":\r\n return eval(`${this.defaultIfnullOrUndefined(rPar.value, '\"\"', true).replace(',', '.')} ${operator} ${this.defaultIfnullOrUndefined(value, '\"\"', true).replace(',', '.')}`);\r\n case \"date\":\r\n let parDateConv = `this.dates.getDateConvertion(\"${rPar.value}\")`;\r\n let valDateConv = `this.dates.getDateConvertion(\"${value}\")`;\r\n\r\n switch (operator) {\r\n\r\n case \"==\": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);\r\n case \"!=\": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);\r\n case \">\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);\r\n case \"<\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);\r\n case \">=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n case \"<=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n }\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n console.warn(\"Errori nella valutazione dell'espressione. Fallback a false\");\r\n return false;\r\n }\r\n\r\n throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;\r\n }\r\n\r\n /** @ignore */\r\n private defaultIfnullOrUndefined<T>(item: T, dflt: T, emptyStringIsNull: boolean = false): T {\r\n if (item == null || item == undefined || item.toString() == 'null' || (emptyStringIsNull && item.toString() == \"\"))\r\n return dflt;\r\n return item;\r\n }\r\n\r\n /** @ignore */\r\n public getSource(parameter: GenericParameter, search: string, byid: boolean): Observable<{ id: string, description: string }[]> {\r\n if (!this.AutoCompleteDataRetrieve) {\r\n console.error(\"@forms-and-validations: funzione di dataretrieve non impostata per un parametro autocomplete\");\r\n return of([])\r\n }\r\n else\r\n return this.AutoCompleteDataRetrieve(parameter, search, byid);\r\n }\r\n}","<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <ng-container *ngIf=\"par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\">&nbsp;</span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseCommaSeparatedList]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </ng-container>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { EsParametersComponent } from './es_parameters.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [EsParametersComponent],\r\n imports: [\r\n CommonModule,\r\n LocalizationModule,\r\n FormsModule,\r\n FormsAndValidationsModule,\r\n ],\r\n exports: [EsParametersComponent]\r\n})\r\nexport class EsParametersModule {\r\n }\r\n","/**\r\n * Classe che rappresenta un parametro generico\r\n */\r\nexport class GenericParameter {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice del parametro\r\n * @param {string} description Descrizione del parametro\r\n * @param {string} pattern Pattern di validazione\r\n * @param {'date' | 'string' | 'number' | 'boolean' | 'enum'} type Tipo di input \r\n * @param {boolean} required Indica se il valore è obbligatorio o meno\r\n * @param {any} v_default Valore di default per questo Parametro\r\n * @param {{ id: string, description: string }[]} enumvalues Qualora il **type** fosse di tipo **enum**, qui devono esserci tutti i valori che può assumere \r\n * @param {boolean} multienum Qualora il **type** fosse di tipo **enum**, indica se è possibile selezionare più valori (multiselect)\r\n * @param {string} sourceapi Nei casi in cui il **type** è **enum** indica l'api da cui recuperare i valori da bindare alla select o alla multiselect\r\n * @param {boolean} pageddata Nei casi in cui il **type** è **enum** indica che l'api specificata eventualmetne da **sourceapi** è paginata\r\n */\r\n constructor(\r\n public id: string,\r\n public description: string,\r\n public pattern: string,\r\n type: 'date' | 'string' | 'number' | 'boolean' | 'enum',\r\n public required: boolean,\r\n v_default: any = null,\r\n public enumvalues: { id: string, description: string }[] = [],\r\n public multienum?: boolean,\r\n public sourceapi?: string,\r\n public pageddata?: boolean) {\r\n\r\n this.type = type == 'enum' ? null : type;\r\n this.visible = true;\r\n this.enumtype = type == 'enum' ? type : \"\";\r\n this.isreadonly = false;\r\n\r\n if (!this.enumtype && enumvalues.length != 0)\r\n console.error(\"impossibile gestire valori di dizionario per un parametro non di tipo enum\");\r\n\r\n if (v_default != null)\r\n this.value = v_default;\r\n }\r\n\r\n /** Tipo di dato rappresentato da questo parametro */\r\n public type?: 'date' | 'string' | 'number' | 'boolean' | 'enum';\r\n\r\n /** Typecode lato C# che rappresenta il tipo di dato */\r\n public typecode: number;\r\n\r\n /** Indica se il campo specificato dev'essere di sola lettura o meno */\r\n public isreadonly: boolean;\r\n\r\n /** Valore del parametro */\r\n public value: any;\r\n\r\n /** Indica se questo parametro dev'essere inserito o no. In caso contrario viene semplicemente nascosto */\r\n public visible: boolean;\r\n\r\n /** Tipo Enum, valorizzato dal Backend */\r\n public enumtype: string;\r\n\r\n /** Tipo Dizionario, valorizzato dal Backend */\r\n public dicttype: string;\r\n\r\n /** Espressione di obbligatorietà */\r\n public requiredexp?: string;\r\n\r\n /** Espressione di visibilità */\r\n public visibleexp?: string;\r\n\r\n /** Ordinamento in base al quale verranno ordinati i parametri */\r\n public order: number;\r\n\r\n /** Gruppo di appartenenza del parametro */\r\n public group: string;\r\n}","/*\r\n * Public API Surface of parameters\r\n */\r\nexport * from './lib/es_parameters.module';\r\nexport * from './lib/models/GenericParameter';\r\nexport * from './lib/es_parameters.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/parameters",
3
- "version": "15.2.24",
3
+ "version": "15.2.25",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },