@messaia/cdk 13.0.0 → 13.0.3

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.
@@ -235,7 +235,7 @@ export class GenericFormBaseComponent extends BaseComponent {
235
235
  /* Send the data to the server */
236
236
  this.create().subscribe({
237
237
  next: (response) => {
238
- this.id = response.id;
238
+ this.id = response?.id;
239
239
  this.onAfterSubmit(action, response);
240
240
  if (form) {
241
241
  Object.keys(form.controls).forEach(key => {
@@ -295,15 +295,7 @@ export class GenericFormBaseComponent extends BaseComponent {
295
295
  isFormValid(form = null) {
296
296
  /* Print some debug information */
297
297
  if (this.debug) {
298
- console.log('Form:', form);
299
- Object.keys(form.controls).forEach(key => {
300
- const controlErrors = form.controls[key].errors;
301
- if (controlErrors != null) {
302
- Object.keys(controlErrors).forEach(keyError => {
303
- console.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);
304
- });
305
- }
306
- });
298
+ this.debugForm(form);
307
299
  }
308
300
  /* If the form ist not valid.. */
309
301
  if (!form.valid) {
@@ -373,6 +365,21 @@ export class GenericFormBaseComponent extends BaseComponent {
373
365
  control.markAsTouched();
374
366
  }
375
367
  }
368
+ /**
369
+ * Shows form errors
370
+ * @param form
371
+ */
372
+ debugForm(form = null) {
373
+ console.log('Form:', form);
374
+ Object.keys(form.controls).forEach(key => {
375
+ const controlErrors = form.controls[key].errors;
376
+ if (controlErrors != null) {
377
+ Object.keys(controlErrors).forEach(keyError => {
378
+ console.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);
379
+ });
380
+ }
381
+ });
382
+ }
376
383
  /**
377
384
  * Loads the previous URL in the history list.
378
385
  * @param action
@@ -558,4 +565,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
558
565
  type: HostListener,
559
566
  args: ['document:keydown', ['$event']]
560
567
  }] } });
561
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvYmFzZS9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBbUIsU0FBUyxFQUE0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFFakQsV0FBVztBQUVYLE1BQU0sT0FBZ0Isd0JBQTRGLFNBQVEsYUFBYTtJQW1KdEk7OztPQUdHO0lBQ0gsWUFDUSxVQUE4QixFQUMzQixPQUFpQixFQUNqQixLQUFxQixFQUNyQixpQkFBb0M7UUFFOUMsS0FBSyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBTHpCLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTFKL0M7O1dBRUc7UUFDSSxXQUFNLEdBQVcsS0FBSyxDQUFD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QUUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDWjtJQUNGLENBQUM7OzJKQXZwQm9CLHdCQUF3QjsrSUFBeEIsd0JBQXdCLGtKQTJIbEMsVUFBVTsyRkEzSEEsd0JBQXdCO2tCQUQ3QyxTQUFTOytLQTZIQyxVQUFVO3NCQURuQixTQUFTO3VCQUFDLFVBQVU7Z0JBT2QsS0FBSztzQkFEWCxZQUFZO3VCQUFDLE9BQU87Z0JBOGZyQixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGVwcGVyU2VsZWN0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAsIE5nRm9ybSwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IElFbnRpdHkgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL2VudGl0eSc7XHJcbmltcG9ydCB7IFNhdmVBY3Rpb24gfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3NhdmUtYWN0aW9uJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9odHRwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbi8vIEBkeW5hbWljXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBJRW50aXR5LCBUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+PiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG5cdC8qKlxyXG5cdCAqIFRoZSBhY3Rpb24gb2YgdGhlIGZvcm0gKGFkZCB8IGVkaXQpXHJcblx0ICovXHJcblx0cHVibGljIGFjdGlvbjogc3RyaW5nID0gJ2FkZCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgdXJsIHRvIHJldHVybiB0byBhZnRlciBzYXZlXHJcblx0ICovXHJcblx0cHVibGljIHJldHVyblVybDogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBBY3Rpb24gPSBlZGl0P1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0VkaXRNb2RlOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlIGFjdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBTYXZlQWN0aW9uOiB0eXBlb2YgU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb247XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJvdXRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0U2F2ZUFuZENsb3NlUm91dGU6IHN0cmluZyA9ICcuLi8uLi8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kQ2xvc2VSb3V0ZTogc3RyaW5nID0gJy4uLyc7XHJcblx0cHVibGljIGFkZFNhdmVBbmRFZGl0Um91dGU6IHN0cmluZyA9ICcuLi9lZGl0Lyc7XHJcblx0cHVibGljIGFkZFNhdmVBbmROZXdSb3V0ZTogc3RyaW5nID0gJy4uL2FkZCc7XHJcblx0cHVibGljIGxpc3RSb3V0ZTogc3RyaW5nID0gdGhpcy5hZGRTYXZlQW5kQ2xvc2VSb3V0ZTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGlkIG9mIHRoZSBpdGVtIHRvIGxvYWRcclxuXHQgKi9cclxuXHRwdWJsaWMgaWQ6IG51bWJlciB8IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgaXRlbSB0byBhZGQgb3IgZWRpdFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpdGVtOiBURW50aXR5O1xyXG5cclxuXHQvKipcclxuXHQgKiBSZXByZXNlbnRzIHRoZSByZXF1ZXN0IGVycm9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBlcnJvcnM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmNsdWRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpbmNsdWRlczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIHVwZGF0ZUluY2x1ZGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgcGFyYW1zXHJcblx0ICovXHJcblx0cHVibGljIHF1ZXJ5OiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgZGF0ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGUgJiB0aW1lIG1hc2tcclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZVRpbWVNYXNrID0gWy9bMC0zXS8sIC9bMC05XS8sICcuJywgL1swLTFdLywgL1swLTldLywgJy4nLCAyLCAwLCAvWzEtMl0vLCAvWzAtOV0vLCAnICcsIC9bMC0yXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGUgbWFza1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRlTWFzayA9IFsvWzAtM10vLCAvWzAtOV0vLCAnLicsIC9bMC0xXS8sIC9bMC05XS8sICcuJywgMiwgMCwgL1sxLTJdLywgL1swLTldL107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRpbWUgbWFza1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB0aW1lTWFzayA9IFsvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHBhdHRlcm4gdG8gdmFsaWRhdGUgZGF0ZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZVBhdHRlcm46IHN0cmluZyA9IGAoPzooPzozMShcXFxcL3wtfFxcXFwuKSg/OjA/WzEzNTc4XXwxWzAyXSkpXFxcXDF8KD86KD86Mjl8MzApKFxcXFwvfC18XFxcXC4pKD86MD9bMSwzLTldfDFbMC0yXSlcXFxcMikpKD86KD86MVs2LTldfFsyLTldXFxcXGQpP1xcXFxkezJ9KSR8Xig/OjI5KFxcXFwvfC18XFxcXC4pMD8yXFxcXDMoPzooPzooPzoxWzYtOV18WzItOV1cXFxcZCk/KD86MFs0OF18WzI0NjhdWzA0OF18WzEzNTc5XVsyNl0pfCg/Oig/OjE2fFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKSkpJHxeKD86MD9bMS05XXwxXFxcXGR8MlswLThdKShcXFxcL3wtfFxcXFwuKSg/Oig/OjA/WzEtOV0pfCg/OjFbMC0yXSkpXFxcXDQoPzooPzoxWzYtOV18WzItOV1cXFxcZCk/XFxcXGR7Mn0pYDtcclxuXHJcblx0LyoqXHJcblx0ICogUGhvbmUgcHJlZml4IHZhbGlkYXRpb24gcGF0dGVyblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwaG9uZVByZWZpeFBhdHRlcm46IHN0cmluZyA9ICdeKDBcXFxcZHsyLDZ9KSQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBQaG9uZSBudW1iZXIgdmFsaWRhdGlvbiBwYXR0ZXJuXHJcblx0ICovXHJcblx0cHVibGljIHBob25lTnVtYmVyUGF0dGVybjogc3RyaW5nID0gJ14oXFxcXGR7MywzMH0pJCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhc3N3b3JkIHZhbGlkYXRpb24gcGF0dGVyblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYXNzd29yZFBhdHRlcm46IHN0cmluZyA9ICdeKD89LipbYS16XSkoPz0uKltBLVpdKSg/PS4qXFxcXGQpKD89LipbJEAkISUqPyZdKVtBLVphLXpcXFxcZCRAJCElKj8mXXs2LH0nO1xyXG5cclxuXHQvKipcclxuXHQgKiBEZWZhdWx0cyBtb2R1bGVzIGFuZCB0b29sYmFyXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvck9wdGlvbnMgPSB7XHJcblx0XHRtb2R1bGVzOiB7XHJcblx0XHRcdHRvb2xiYXI6IFtcclxuXHRcdFx0XHRbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZSddLFxyXG5cdFx0XHRcdFt7ICdsaXN0JzogJ29yZGVyZWQnIH0sIHsgJ2xpc3QnOiAnYnVsbGV0JyB9XSxcclxuXHRcdFx0XHRbeyAnaW5kZW50JzogJy0xJyB9LCB7ICdpbmRlbnQnOiAnKzEnIH1dLFxyXG5cdFx0XHRcdFt7ICdzaXplJzogWydzbWFsbCcsIGZhbHNlLCAnbGFyZ2UnLCAnaHVnZSddIH1dLFxyXG5cdFx0XHRcdFt7ICdoZWFkZXInOiBbMSwgMiwgMywgNCwgNSwgNiwgZmFsc2VdIH1dLFxyXG5cdFx0XHRcdFt7ICdjb2xvcic6IG5ldyBBcnJheTxhbnk+KCkgfSwgeyAnYmFja2dyb3VuZCc6IG5ldyBBcnJheTxhbnk+KCkgfV0sXHJcblx0XHRcdFx0WydsaW5rJywgJ2ltYWdlJ11cclxuXHRcdFx0XSxcclxuXHRcdFx0Y2xpcGJvYXJkOiB7XHJcblx0XHRcdFx0bWF0Y2hWaXN1YWw6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBNYXRTdGVwcGVyIHJlZlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0U3RlcHBlcilcclxuXHRwcm90ZWN0ZWQgbWF0U3RlcHBlcjogTWF0U3RlcHBlcjtcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWZlcmVuY2UgdG8gdGhlIGlucHV0IGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKCdmb2N1cycpXHJcblx0cHVibGljIGlucHV0OiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZvcm0gZ3JvdXBcclxuXHQgKi9cclxuXHRwdWJsaWMgZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGZvcm0gdmFsdWVcclxuXHQgKi9cclxuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0IGZvcm1WYWx1ZSgpOiBURW50aXR5IHwgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBwYW5lbElkOiBzdHJpbmdcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgcGFuZWxJZDogc3RyaW5nID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0gc2VydmljZSBcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyBlbnRpdHlDdG9yOiB7IG5ldygpOiBURW50aXR5IH0sXHJcblx0XHRwcm90ZWN0ZWQgc2VydmljZTogVFNlcnZpY2UsXHJcblx0XHRwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG5cdFx0cHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG5cdCkge1xyXG5cdFx0c3VwZXIocm91dGUsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5hZGRTYXZlQW5kQ2xvc2VSb3V0ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IsIGluaXRpYWxpemluZyBpbnB1dCBwcm9wZXJ0aWVzLCBcclxuXHQgKiBhbmQgdGhlIGZpcnN0IGNhbGwgdG8gbmdPbkNoYW5nZXMuXHJcblx0ICovXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuXHRcdC8qIEdldCBpZCBmcm9tIHRoZSB1cmwgKi9cclxuXHRcdGxldCBpZCA9IDxhbnk+dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJyk7XHJcblx0XHRpZiAoaWQgPiAwKSB7XHJcblx0XHRcdHRoaXMuaWQgPSBpZDtcclxuXHRcdH0gZWxzZSBpZiAoIXRoaXMuaWQgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uaWQpIHtcclxuXHRcdFx0dGhpcy5pZCA9IHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNldCBzb21lIHZhcmlhYmxlIGZvciBlZGl0IG1vZGUgKi9cclxuXHRcdGlmICh0aGlzLmlkKSB7XHJcblx0XHRcdHRoaXMuYWN0aW9uID0gJ2VkaXQnO1xyXG5cdFx0XHR0aGlzLmlzRWRpdE1vZGUgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmxpc3RSb3V0ZSA9IHRoaXMuZWRpdFNhdmVBbmRDbG9zZVJvdXRlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCB0aGUgcmV0dXJuIHVybCBpZiBhbnkgKi9cclxuXHRcdHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHR0aGlzLnJldHVyblVybCA9IHgucmV0dXJuVXJsID8gZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IoeC5yZXR1cm5VcmwpKSA6IG51bGw7XHJcblx0XHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5yZXR1cm5VcmwgfHwgdGhpcy5saXN0Um91dGU7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBTZXQgcGFuZWwgSUQgZnJvbSBxdWVyeSAqL1xyXG5cdFx0dGhpcy5wYW5lbElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcz8ucGFuZWxJZDtcclxuXHRcdHRoaXMuc3VidGl0bGUgfHw9IHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LnN1YnRpdGxlO1xyXG5cclxuXHRcdC8qIEFzc2lnbiBxdWVyeSBwYXJhbXMgaW50byBxdWVyeSBvYmplY3QgKi9cclxuXHRcdGxldCBpZ25vcmVkUGFyYW1zOiBzdHJpbmdbXSA9IFsnaWQnLCAncmV0dXJudXJsJywgJ3BhbmVsSWQnXTtcclxuXHRcdE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSxcclxuXHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcyB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcyksXHJcblx0XHRcdHRoaXMuc2FuaXRpemVPYmplY3QodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhPy5xdWVyeSB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcyksXHJcblx0XHRcdHRoaXMuc2FuaXRpemVPYmplY3QodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcylcclxuXHRcdCk7XHJcblxyXG5cdFx0LyogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBURW50aXR5ICovXHJcblx0XHRpZiAoIXRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHR0aGlzLml0ZW0gPSBPYmplY3QuYXNzaWduKHRoaXMubmV3SW5zdGFuY2UoKSwgdGhpcy5xdWVyeSk7XHJcblx0XHRcdHRoaXMuYnVpbGRGb3JtKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBhIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdBZnRlclZpZXdJbml0KCk7XHJcblxyXG5cdFx0LyogU2V0IHBhZ2UgdGl0bGUgKi9cclxuXHRcdHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlU2VydmljZS5nZXRUaXRsZSgpO1xyXG5cclxuXHRcdC8qIFNldCBmb2N1cyAqL1xyXG5cdFx0dGhpcy5mb2N1cygpO1xyXG5cclxuXHRcdC8qIFxyXG5cdFx0ICogRm9yY2UgYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBzaW5jZSBjaGFuZ2UgZGV0ZWN0aW9ucyBcclxuXHRcdCAqIGhhdmUgZmluaXNoZWQgd2hlbiBgbmdBZnRlclZpZXdJbml0YCBpcyBleGVjdXRlZFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblx0XHQvKiBMb2FkIGl0ZW0gZnJvbSBzZXJ2ZXIgKi9cclxuXHRcdHRoaXMubG9hZEl0ZW0oKTtcclxuXHJcblx0XHQvKiBMaXN0ZW4gZm9yIHN0ZXBwZXIgc2VsZWN0aW9uIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMubWF0U3RlcHBlcj8uc2VsZWN0aW9uQ2hhbmdlPy5zdWJzY3JpYmUoKGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpID0+IHRoaXMub25BZnRlclN0ZXBDaGFuZ2UoZXZlbnQpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvYWRzIGFuIGl0ZW0gYnkgSURcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZEl0ZW0oKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcblx0XHRcdHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdHRoaXMubG9hZEl0ZW1Bc3luYygpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKF8pID0+IHRoaXMuaXNMb2FkaW5nID0gZmFsc2UsXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5wYXJzZUVycm9ycyhlcnJvcilcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyBhbiBpdGVtIGJ5IElEIGFzeW5jbHlcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZEl0ZW1Bc3luYygpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdGlmICh0aGlzLmlkKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMuaWQsIE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSB8fCB7fSwgeyBpbmNsdWRlczogdGhpcy5pbmNsdWRlcyB9KSwgeyAnRGlzYWJsZS1DYWNoZSc6ICdZZXMnIH0pLnBpcGUoXHJcblx0XHRcdFx0bWFwKHggPT4gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHgpKSxcclxuXHRcdFx0XHR0YXAoeCA9PiB7XHJcblx0XHRcdFx0XHQvKiBTZXQgdGhlIGxvYWRlZCBpdGVtICovXHJcblx0XHRcdFx0XHR0aGlzLml0ZW0gPSBPYmplY3QuYXNzaWduKHRoaXMubmV3SW5zdGFuY2UoKSwgPFRFbnRpdHk+eCk7XHJcblxyXG5cdFx0XHRcdFx0LyogQnVpbGQgdGhlIGZvcm0gKi9cclxuXHRcdFx0XHRcdHRoaXMuYnVpbGRGb3JtKCk7XHJcblxyXG5cdFx0XHRcdFx0LyogVHJpZ2dlciBldmVudCBhZnRlckl0ZW1Mb2FkZWQgKi9cclxuXHRcdFx0XHRcdHRoaXMub25BZnRlckl0ZW1Mb2FkZWQoKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBuZXcgT2JzZXJ2YWJsZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZXMgZGF0YSBpbnRvIGRhdGFiYXNlLlxyXG5cdCAqIEBwYXJhbSBhY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc2F2ZShhY3Rpb246IFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSwgZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0LyogVmFsaWRhdGUgdGhlIGZvcm0gKi9cclxuXHRcdHRoaXMudmFsaWRhdGVGb3JtKCk7XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIGZvcm0gaXMgdmFsaWQgKi9cclxuXHRcdGZvcm0gPSB0aGlzLmZvcm0gfHwgZm9ybTtcclxuXHRcdGlmIChmb3JtICYmICF0aGlzLmlzRm9ybVZhbGlkKGZvcm0pKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBJZiB3ZSdyYSBpbiBlZGl0IG1vZGUsIHVwZGF0ZSB0aGUgcmVjb3JkICovXHJcblx0XHRpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcblx0XHRcdC8qIFRoZSBkYXRhIGhhcyBub3QgY2hhbmdlZD8gKi9cclxuXHRcdFx0aWYgKGZvcm0gJiYgZm9ybS5wcmlzdGluZSkge1xyXG5cdFx0XHRcdHRoaXMub25BZnRlclN1Ym1pdChhY3Rpb24pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQSBmbGFnIHRvIHByZXZlbnQgc2VuZGluZyB0aGUgZm9ybSB0d2ljZSAqL1xyXG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciAqL1xyXG5cdFx0XHR0aGlzLnVwZGF0ZSh7IHBhcmFtczogVXRpbHMudG9IdHRwUGFyYW1zKHsgaW5jbHVkZXM6IHRoaXMudXBkYXRlSW5jbHVkZXMgfSkgfSkuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRcdC8qIEFwcGx5IHNhdmVkIGRhdGEgdG8gdGhlIGZvcm0gKi9cclxuXHRcdFx0XHRcdHRoaXMub25BZnRlclN1Ym1pdChhY3Rpb24sIHJlc3BvbnNlKTtcclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgdXNlciBjbGlja3MgJ2FwcGx5JyByZWxvYWQgdGhlIHBhZ2UgKi9cclxuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlbG9hZFBhZ2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIE90aGVyd2lzZSwgY3JlYXRlIGEgbmV3IG9uZSAqL1xyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdC8qIEEgZmxhZyB0byBwcmV2ZW50IHNlbmRpbmcgdGhlIGZvcm0gdHdpY2UgKi9cclxuXHRcdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgKi9cclxuXHRcdFx0dGhpcy5jcmVhdGU8VEVudGl0eT4oKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pZCA9IHJlc3BvbnNlLmlkO1xyXG5cdFx0XHRcdFx0dGhpcy5vbkFmdGVyU3VibWl0KGFjdGlvbiwgcmVzcG9uc2UpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChmb3JtKSB7XHJcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgY3RyID0gZm9ybS5jb250cm9sc1trZXldO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0XHRcdFx0XHRjdHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZXMgZGF0YSBhbmQgbmF2aWdhdGVzIHRvIGVkaXQgdmlld1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhcHBseSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRFZGl0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlbGV0ZXMgdGhlIGN1cnJlbnQgcmVjb3JkLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNob3dEZWxldGVJdGVtRGlhbG9nKCkuc3Vic2NyaWJlKChhY2NlcHQ6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0aWYgKGFjY2VwdCkge1xyXG5cdFx0XHRcdHRoaXMuc2VydmljZS5kZWxldGUodGhpcy5pZCwgbnVsbCwgeyBoZWFkZXJzOiB0aGlzLnRvSHR0cEhlYWRlcnMoeyAnU2hvdy1NZXNzYWdlJzogJ3llcycgfSkgfSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuYmFjaygpO1xyXG5cdFx0XHRcdH0sIGVycm9yID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZGVidWcoZXJyb3IpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJ1aWxkcyBhIG5ldyBmb3JtXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJ1aWxkRm9ybSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBWYWxpZGF0ZXMgdGhlIGZvcm1cclxuXHQgKiBAcGFyYW0gZm9ybSBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGVGb3JtKGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCA9IG51bGwpOiB2b2lkIHtcclxuXHRcdHZhciBmb3JtID0gZm9ybSB8fCB0aGlzLmZvcm07XHJcblxyXG5cdFx0LyogU2V0IHRoZSBmb3JtIGFzIHN1Ym1pdHRlZCAqL1xyXG5cdFx0aWYgKGZvcm0gJiYgZm9ybSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG5cdFx0XHQvKiBTZXQgZm9ybSBhcyBzdWJtaXR0ZWQgKi9cclxuXHRcdFx0Zm9ybVsnc3VibWl0dGVkJ10gPSB0cnVlO1xyXG5cclxuXHRcdFx0LyogVXBkYXRlIHZhbHVlIGFuZCB2YWxpZGl0eSAqL1xyXG5cdFx0XHRmb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYXRlcyB0aGUgZm9ybVxyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpc0Zvcm1WYWxpZChmb3JtOiBOZ0Zvcm0gfCBGb3JtR3JvdXAgPSBudWxsKTogYm9vbGVhbiB7XHJcblx0XHQvKiBQcmludCBzb21lIGRlYnVnIGluZm9ybWF0aW9uICovXHJcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnRm9ybTonLCBmb3JtKTtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBmb3JtLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xyXG5cdFx0XHRcdGlmIChjb250cm9sRXJyb3JzICE9IG51bGwpIHtcclxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKGNvbnRyb2xFcnJvcnMpLmZvckVhY2goa2V5RXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnS2V5IGNvbnRyb2w6ICcgKyBrZXkgKyAnLCBrZXlFcnJvcjogJyArIGtleUVycm9yICsgJywgZXJyIHZhbHVlOiAnLCBjb250cm9sRXJyb3JzW2tleUVycm9yXSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIElmIHRoZSBmb3JtIGlzdCBub3QgdmFsaWQuLiAqL1xyXG5cdFx0aWYgKCFmb3JtLnZhbGlkKSB7XHJcblx0XHRcdC8qIE1hcmsgaW52YWxpZCBjb250cm9scyBhcyBkaXJ0dHkgYW5kIHRvdWNoZWQgKi9cclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm0uY29udHJvbHNbeF0udmFsaWQpXHJcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybS5jb250cm9sc1trZXldKSk7XHJcblxyXG5cdFx0XHQvKiBTaG93IGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0LyogV2FpdCB1bnRpbCAnbWF0LWVycm9yJyBkaXNwbGF5ZWQgKi9cclxuXHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSh5ID0+IHNldFRpbWVvdXQoeSwgMjAwKSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHRcdHZhciBlcnJvcnMgPSBBcnJheTxzdHJpbmc+KCk7XHJcblx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybS5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCBlcnJvciB0ZXh0ICovXHJcblx0XHRcdFx0XHRcdHZhciBlcnJvciA9IHRoaXMuZ2V0RWxlbWVudEVycm9yKChmb3JtLmNvbnRyb2xzW2tleV0gYXMgYW55KT8ubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIEJ1aWxkIGVycm9yIG1lc3NhZ2UgKi9cclxuXHRcdFx0XHR2YXIgbWVzc2FnZSA9IGVycm9ycy5sZW5ndGggPyBlcnJvcnMuc2xpY2UoMCwgMykuam9pbignXFxuJykgOiAkbG9jYWxpemVgOkBAc25hY2tiYXIuZXJyb3IucmVxdWlyZWQtZmllbGRzOkFsbCBmaWVsZHMgbWFya2VkIHdpdGggYW4gYXN0ZXJpc2sgKCopIGFyZSByZXF1aXJlZC5gO1xyXG5cclxuXHRcdFx0XHQvKiBzaG93IGEgbm90aWNlICovXHJcblx0XHRcdFx0dGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihtZXNzYWdlLCAnT2snLCB7IGR1cmF0aW9uOiAzMDAwLCBwYW5lbENsYXNzOiBbJ2Vycm9yJ10gfSk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzZXRzIGZvcm0gY29udHJvbHNcclxuXHQgKiBAcGFyYW0gZm9ybSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgcmVzZXRGb3JtKGZvcm06IE5nRm9ybSk6IHZvaWQge1xyXG5cdFx0aWYgKCFmb3JtKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGxldCBjdHIgPSBmb3JtLmNvbnRyb2xzW2tleV07XHJcblx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRjdHIubWFya0FzVW50b3VjaGVkKCk7XHJcblx0XHRcdGN0ci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEludmFsaWRhdGUgY29udHJvbHMgcmVjdXJzaXZlbHlcclxuXHQgKiBAcGFyYW0gY29udHJvbCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW52YWxpZGF0ZUNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcblx0XHQvKiBDaGVjayB0aGUgY29udHJvbCBhZ2FpbnN0IG51bGwgKi9cclxuXHRcdGlmICghY29udHJvbCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgYSBncm91cCAqL1xyXG5cdFx0bGV0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG5cdFx0aWYgKGZvcm1Hcm91cD8uY29udHJvbHMpIHtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKVxyXG5cdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybUdyb3VwLmNvbnRyb2xzW3hdLnZhbGlkKVxyXG5cdFx0XHRcdC5mb3JFYWNoKHggPT4gdGhpcy5pbnZhbGlkYXRlQ29udHJvbChmb3JtR3JvdXAuY29udHJvbHNbeF0pKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuXHRcdFx0Y29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyB0aGUgcHJldmlvdXMgVVJMIGluIHRoZSBoaXN0b3J5IGxpc3QuXHJcblx0ICogQHBhcmFtIGFjdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBiYWNrKGFjdGlvbjogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKTogdm9pZCB7XHJcblx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlICYmIHRoaXMucmV0dXJuVXJsKSB7XHJcblx0XHRcdHZhciB1cmxQYXJ0cyA9IFV0aWxzLmdldFVybFBhcnRzKHRoaXMucmV0dXJuVXJsKTtcclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybFBhcnRzLnVybF0sIHsgcXVlcnlQYXJhbXM6IHVybFBhcnRzLnBhcmFtcywgZnJhZ21lbnQ6IHVybFBhcnRzLmhhc2ggfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcblx0XHRcdFx0aWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCkge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWxvYWRQYWdlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpIHtcclxuXHRcdFx0XHRcdHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQgJiYgdGhpcy5pZCA+IDApIHtcclxuXHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLmFkZFNhdmVBbmRFZGl0Um91dGV9JHt0aGlzLmlkfWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kTmV3KSB7XHJcblx0XHRcdFx0XHR0aGlzLmFmdGVyUmVsb2FkKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBURW50aXR5XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG5ld0luc3RhbmNlKCk6IFRFbnRpdHkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbSA9IG5ldyB0aGlzLmVudGl0eUN0b3IoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgdGhlIGVudGl0eVxyXG5cdCAqIEBwYXJhbSBodHRwT3B0aW9ucyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY3JlYXRlPFRFbnRpdHk+KGh0dHBPcHRpb25zPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XHJcblx0XHR0aGlzLm9uQmVmb3JlQ3JlYXRlKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXJ2aWNlLmNyZWF0ZTxURW50aXR5Pih0aGlzLmZvcm1WYWx1ZSwgbnVsbCwgT2JqZWN0LmFzc2lnbihodHRwT3B0aW9ucyB8fCB7fSwgeyBoZWFkZXJzOiB0aGlzLnRvSHR0cEhlYWRlcnMoeyAnU2hvdy1NZXNzYWdlJzogJ3llcycgfSkgfSksIGZhbHNlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZXMgdGhlIGVudGl0eVxyXG5cdCAqIEBwYXJhbSBodHRwT3B0aW9ucyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdXBkYXRlKGh0dHBPcHRpb25zPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XHJcblx0XHR0aGlzLm9uQmVmb3JlVXBkYXRlKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0aGlzLmlkLCBPYmplY3QuYXNzaWduKHRoaXMuaXRlbSwgdGhpcy5mb3JtVmFsdWUpLCBudWxsLCBPYmplY3QuYXNzaWduKGh0dHBPcHRpb25zIHx8IHt9LCB7IGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSwgfSksIGZhbHNlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKiBAcGFyYW0gaW5jIFxyXG5cdCAqIEBwYXJhbSB1cGRhdGUgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGluY2x1ZGUoaW5jOiBzdHJpbmcsIHVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblx0XHR0aGlzLmluY2x1ZGVzLnB1c2goaW5jKTtcclxuXHRcdGlmICh1cGRhdGUpIHtcclxuXHRcdFx0dGhpcy51cGRhdGVJbmNsdWRlcy5wdXNoKGluYyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHN0ZXAgaGFzIGNoYW5nZWQuXHJcblx0ICogQHBhcmFtICRldmVudCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlclN0ZXBDaGFuZ2UoJGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBsb2FkZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJJdGVtTG9hZGVkKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgYmVmb3JlIHRoZSBmb3JtIGhhcyBidWlsdC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25CZWZvcmVGb3JtQnVpbGQoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBmb3JtIGhhcyBidWlsdC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckZvcm1CdWlsZCgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiB1cGRhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZVVwZGF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYmVmb3JlIGRhdGEgc3VibWl0aW9uXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJlZm9yZVN1Ym1pdChfOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIGFmdGVyIGRhdGEgc3VibWl0aW9uXHJcblx0ICogQHBhcmFtIGFjdGlvbiBcclxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJTdWJtaXQoYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UsIHJlc3BvbnNlOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblx0XHR0aGlzLmJhY2soYWN0aW9uKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBhZnRlciBwYWdlIHJlbG9hZGVkXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGFmdGVyUmVsb2FkKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHRoaXMucXVlcnkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBmb2N1cyB0byBmaXJzdCBpbnB1dFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBmb2N1cygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQuZmlyc3QgJiYgdGhpcy5pbnB1dC5maXJzdC5uYXRpdmVFbGVtZW50KSB7XHJcblx0XHRcdHRoaXMuaW5wdXQuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBlbGVtZW50IGVycm9yXHJcblx0ICogQHBhcmFtIG5hdGl2ZUVsZW1lbnQgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldEVsZW1lbnRFcnJvcihuYXRpdmVFbGVtZW50OiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0LyogR2V0IHBhcmFuZXQgZWxlbWVudCAnbWF0LWZvcm0tZmllbGQnICovXHJcblx0XHR2YXIgbWF0Rm9ybUZpZWxkID0gbmF0aXZlRWxlbWVudD8uY2xvc2VzdCgnLm1hdC1mb3JtLWZpZWxkJyk7XHJcblx0XHRpZiAoIW1hdEZvcm1GaWVsZCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgY2hpbGQgZWxlbWVudCAnbWF0LWVycm9yJyAqL1xyXG5cdFx0dmFyIG1hdEVycm9ycyA9IG1hdEZvcm1GaWVsZC5xdWVyeVNlbGVjdG9yQWxsKCcubWF0LWVycm9yJyk7XHJcblx0XHRpZiAoIW1hdEVycm9ycykge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgY2hpbGQgZWxlbWVudCAnbWF0LWxhYmVsJyAqL1xyXG5cdFx0dmFyIG1hdExhYmVsID0gbWF0Rm9ybUZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ21hdC1sYWJlbCcpO1xyXG5cdFx0aWYgKCFtYXRMYWJlbCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgZXJyb3IgdGV4dHMgKi9cclxuXHRcdHZhciBlcnJvcnNBcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG1hdEVycm9ycylcclxuXHRcdFx0Py5maWx0ZXIoKHg6IGFueSkgPT4geC50ZXh0Q29udGVudClcclxuXHRcdFx0Py5tYXAoKHg6IGFueSkgPT4geC50ZXh0Q29udGVudCk7XHJcblxyXG5cdFx0cmV0dXJuIGAnJHttYXRMYWJlbC50ZXh0Q29udGVudH0nOiAke2Vycm9yc0FycmF5Py5qb2luKCcsICcpfWA7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXNwb25kcyB0byB1c2VyLWluaXRpYXRlZCBldmVudHNcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICovXHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcblx0aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG5cdFx0aWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdGNhc2UgJ3MnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSAnZCc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZE5ldyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSAnZSc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKiBDYW5jZWwgdGhlIGZvcm0sIGlmIHRoZSB1c2VyIHByZXNzIHRoZSBFU0Mga2V5ICovXHJcblx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PSAyNykge1xyXG5cdFx0XHR0aGlzLmJhY2soKTtcclxuXHRcdH1cclxuXHR9XHJcbn0iXX0=
568
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvYmFzZS9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBbUIsU0FBUyxFQUE0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFFakQsV0FBVztBQUVYLE1BQU0sT0FBZ0Isd0JBQTRGLFNBQVEsYUFBYTtJQW1KdEk7OztPQUdHO0lBQ0gsWUFDUSxVQUE4QixFQUMzQixPQUFpQixFQUNqQixLQUFxQixFQUNyQixpQkFBb0M7UUFFOUMsS0FBSyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBTHpCLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTFKL0M7O1dBRUc7UUFDSSxXQUFNLEdBQVcsS0FBSyxDQUFDO1FBWTlCOztXQUVHO1FBQ0ksZUFBVSxHQUFzQixVQUFVLENBQUM7UUFFbEQ7O1dBRUc7UUFDSSwwQkFBcUIsR0FBVyxRQUFRLENBQUM7UUFDekMseUJBQW9CLEdBQVcsS0FBSyxDQUFDO1FBQ3JDLHdCQUFtQixHQUFXLFVBQVUsQ0FBQztRQUN6Qyx1QkFBa0IsR0FBVyxRQUFRLENBQUM7UUFDdEMsY0FBUyxHQUFXLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQVlyRDs7V0FFRztRQUNJLFdBQU0sR0FBa0IsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUVuRDs7V0FFRztRQUNJLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFFL0I7O1dBRUc7UUFDSSxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUVyQzs7V0FFRztRQUNJLFVBQUssR0FBUSxFQUFFLENBQUM7UUFFdkI7O1dBRUc7UUFDSSxnQkFBVyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFFdEM7O1dBRUc7UUFDSSxpQkFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0k7O1dBRUc7UUFDSSxhQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV6Rjs7V0FFRztRQUNJLGFBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1RDs7V0FFRztRQUNJLGdCQUFXLEdBQVcsc1ZBQXNWLENBQUM7UUFFcFg7O1dBRUc7UUFDSSx1QkFBa0IsR0FBVyxlQUFlLENBQUM7UUFFcEQ7O1dBRUc7UUFDSSx1QkFBa0IsR0FBVyxlQUFlLENBQUM7UUFFcEQ7O1dBRUc7UUFDSSxvQkFBZSxHQUFXLHlFQUF5RSxDQUFDO1FBRTNHOztXQUVHO1FBQ0ksa0JBQWEsR0FBRztZQUN0QixPQUFPLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFO29CQUNSLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUM7b0JBQy9CLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7b0JBQzdDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQ3hDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMvQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDekMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEtBQUssRUFBTyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxLQUFLLEVBQU8sRUFBRSxDQUFDO29CQUNuRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7aUJBQ2pCO2dCQUNELFNBQVMsRUFBRTtvQkFDVixXQUFXLEVBQUUsS0FBSztpQkFDbEI7YUFDRDtTQUNELENBQUM7UUF3QkY7O1dBRUc7UUFDTyxZQUFPLEdBQVcsSUFBSSxDQUFDO1FBYWhDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ1AsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLHlCQUF5QjtRQUN6QixJQUFJLEVBQUUsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNYLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ2I7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztTQUN4QztRQUVELHFDQUFxQztRQUNyQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztTQUM1QztRQUVELCtCQUErQjtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM1RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILDZCQUE2QjtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7UUFDeEQsSUFBSSxDQUFDLFFBQVEsS0FBYixJQUFJLENBQUMsUUFBUSxHQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUM7UUFFdEQsMkNBQTJDO1FBQzNDLElBQUksYUFBYSxHQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxFQUN2RSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsYUFBYSxDQUFDLEVBQzVFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUM1RSxDQUFDO1FBRUYsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNqQjtJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDZCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUxQyxlQUFlO1FBQ2YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWI7OztXQUdHO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXZDLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEIsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQTRCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQzlCLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLO2dCQUNuQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2FBQ3pDLENBQUMsQ0FBQztTQUNIO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDOUgsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDOUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNQLHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBVyxDQUFDLENBQUMsQ0FBQztnQkFFMUQsb0JBQW9CO2dCQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBRWpCLG1DQUFtQztnQkFDbkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQ0YsQ0FBQztTQUNGO1FBRUQsT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxJQUFJLENBQUMsU0FBcUIsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUEyQixJQUFJO1FBQ3hGLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsZ0NBQWdDO1FBQ2hDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztRQUN6QixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsT0FBTztTQUNQO1FBRUQsOENBQThDO1FBQzlDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQiwrQkFBK0I7WUFDL0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0IsT0FBTzthQUNQO1lBRUQsOENBQThDO1lBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRXJCLGlDQUFpQztZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDeEYsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ2xCLGtDQUFrQztvQkFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBRXJDLGdEQUFnRDtvQkFDaEQsSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRTt3QkFDckMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO3FCQUNsQjtnQkFDRixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7YUFDekMsQ0FBQyxDQUFDO1NBQ0g7UUFFRCxpQ0FBaUM7YUFDNUI7WUFDSiw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFFckIsaUNBQWlDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQVcsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNsQixJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUVyQyxJQUFJLElBQUksRUFBRTt3QkFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ3hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDOzRCQUN0QixHQUFHLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzt3QkFDOUIsQ0FBQyxDQUFDLENBQUM7cUJBQ0g7Z0JBQ0YsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2FBQ3pDLENBQUMsQ0FBQztTQUNIO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU07UUFDWixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUN6RCxJQUFJLE1BQU0sRUFBRTtnQkFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDbkgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNiLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QixDQUFDLENBQUMsQ0FBQzthQUNIO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDTyxTQUFTLEtBQVcsQ0FBQztJQUUvQjs7O09BR0c7SUFDTyxZQUFZLENBQUMsT0FBMkIsSUFBSTtRQUNyRCxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztRQUU3QiwrQkFBK0I7UUFDL0IsSUFBSSxJQUFJLElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRTtZQUN0QywyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUV6QiwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDOUI7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sV0FBVyxDQUFDLE9BQTJCLElBQUk7UUFDcEQsa0NBQWtDO1FBQ2xDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckI7UUFFRCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDaEIsaURBQWlEO1lBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztpQkFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTdELHlCQUF5QjtZQUN6QixDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNYLHNDQUFzQztnQkFDdEMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFM0MsOEJBQThCO2dCQUM5QixJQUFJLE1BQU0sR0FBRyxLQUFLLEVBQVUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3FCQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2Qsb0JBQW9CO29CQUNwQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQzdFLElBQUksS0FBSyxFQUFFO3dCQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ25CO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2dCQUVKLHlCQUF5QjtnQkFDekIsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUEsd0ZBQXdGLENBQUM7Z0JBRWhLLG1CQUFtQjtnQkFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRixPQUFPLEtBQUssQ0FBQztZQUNkLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFTCxPQUFPLEtBQUssQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFNBQVMsQ0FBQyxJQUFZO1FBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVixPQUFPO1NBQ1A7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RCLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNPLGlCQUFpQixDQUFDLE9BQXdCO1FBQ25ELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2IsT0FBTztTQUNQO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksU0FBUyxHQUFHLE9BQW9CLENBQUM7UUFDckMsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztpQkFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDekMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlEO2FBQU07WUFDTixPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3hCO0lBQ0YsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVMsQ0FBQyxPQUEyQixJQUFJO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QyxNQUFNLGFBQWEsR0FBcUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbEUsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLGNBQWMsR0FBRyxRQUFRLEdBQUcsZUFBZSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUMzRyxDQUFDLENBQUMsQ0FBQzthQUNIO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksSUFBSSxDQUFDLFNBQXFCLFVBQVUsQ0FBQyxZQUFZO1FBQ3ZELElBQUksTUFBTSxJQUFJLFVBQVUsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN4RCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNoRzthQUFNO1lBQ04sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFO29CQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNyQjtxQkFBTSxJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFO29CQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7aUJBQ2xCO2FBQ0Q7aUJBQU07Z0JBQ04sSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRTtvQkFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDckI7cUJBQU0sSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDNUY7cUJBQU0sSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUNuQjthQUNEO1NBQ0Q7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDTyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLE1BQU0sQ0FBVSxXQUFvQjtRQUM3QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBVSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoSyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLE1BQU0sQ0FBQyxXQUFvQjtRQUNwQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sT0FBTyxDQUFDLEdBQVcsRUFBRSxTQUFrQixLQUFLO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksTUFBTSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ08saUJBQWlCLENBQUMsTUFBNkIsSUFBVSxDQUFDO0lBRXBFOztPQUVHO0lBQ08saUJBQWlCLEtBQVcsQ0FBQztJQUV2Qzs7T0FFRztJQUNPLGlCQUFpQixLQUFXLENBQUM7SUFFdkM7O09BRUc7SUFDTyxnQkFBZ0IsS0FBVyxDQUFDO0lBRXRDOztPQUVHO0lBQ08sY0FBYyxLQUFXLENBQUM7SUFFcEM7O09BRUc7SUFDTyxjQUFjLEtBQVcsQ0FBQztJQUVwQzs7T0FFRztJQUNPLFlBQVksQ0FBQyxJQUFnQixVQUFVLENBQUMsWUFBWSxJQUFVLENBQUM7SUFFekU7Ozs7T0FJRztJQUNPLGFBQWEsQ0FBQyxTQUFxQixVQUFVLENBQUMsWUFBWSxFQUFFLFdBQWdCLElBQUk7UUFDekYsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxXQUFXO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUs7UUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQ3JFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN2QztJQUNGLENBQUM7SUFFRDs7O09BR0c7SUFDTyxlQUFlLENBQUMsYUFBa0I7UUFDM0MsMENBQTBDO1FBQzFDLElBQUksWUFBWSxHQUFHLGFBQWEsRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxtQ0FBbUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsbUNBQW1DO1FBQ25DLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN0RCxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUNuQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxRQUFRLENBQUMsV0FBVyxNQUFNLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7OztPQUdHO0lBRUgsbUJBQW1CLENBQUMsS0FBb0I7UUFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNsQixLQUFLLEdBQUc7b0JBQ1AsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDbkMsTUFBTTtnQkFFUCxLQUFLLEdBQUc7b0JBQ1AsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakMsTUFBTTtnQkFFUCxLQUFLLEdBQUc7b0JBQ1AsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDbEMsTUFBTTthQUNQO1NBQ0Q7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDWjtJQUNGLENBQUM7OzJKQS9wQm9CLHdCQUF3QjsrSUFBeEIsd0JBQXdCLGtKQTJIbEMsVUFBVTsyRkEzSEEsd0JBQXdCO2tCQUQ3QyxTQUFTOytLQTZIQyxVQUFVO3NCQURuQixTQUFTO3VCQUFDLFVBQVU7Z0JBT2QsS0FBSztzQkFEWCxZQUFZO3VCQUFDLE9BQU87Z0JBc2dCckIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RlcHBlclNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwLCBOZ0Zvcm0sIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFN0ZXBwZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvdXRpbHMnO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBTYXZlQWN0aW9uIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9zYXZlLWFjdGlvbic7XHJcbmltcG9ydCB7IEdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaHR0cC9zZXJ2aWNlcy9nZW5lcmljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5IGV4dGVuZHMgSUVudGl0eSwgVFNlcnZpY2UgZXh0ZW5kcyBHZW5lcmljU2VydmljZTxURW50aXR5Pj4gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuXHQvKipcclxuXHQgKiBUaGUgYWN0aW9uIG9mIHRoZSBmb3JtIChhZGQgfCBlZGl0KVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHVybCB0byByZXR1cm4gdG8gYWZ0ZXIgc2F2ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZXR1cm5Vcmw6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQWN0aW9uID0gZWRpdD9cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNFZGl0TW9kZTogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZSBhY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgU2F2ZUFjdGlvbjogdHlwZW9mIFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBSb3V0ZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdFNhdmVBbmRDbG9zZVJvdXRlOiBzdHJpbmcgPSAnLi4vLi4vJztcclxuXHRwdWJsaWMgYWRkU2F2ZUFuZENsb3NlUm91dGU6IHN0cmluZyA9ICcuLi8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kRWRpdFJvdXRlOiBzdHJpbmcgPSAnLi4vZWRpdC8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kTmV3Um91dGU6IHN0cmluZyA9ICcuLi9hZGQnO1xyXG5cdHB1YmxpYyBsaXN0Um91dGU6IHN0cmluZyA9IHRoaXMuYWRkU2F2ZUFuZENsb3NlUm91dGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBpZCBvZiB0aGUgaXRlbSB0byBsb2FkXHJcblx0ICovXHJcblx0cHVibGljIGlkOiBudW1iZXIgfCBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IGl0ZW0gdG8gYWRkIG9yIGVkaXRcclxuXHQgKi9cclxuXHRwdWJsaWMgaXRlbTogVEVudGl0eTtcclxuXHJcblx0LyoqXHJcblx0ICogUmVwcmVzZW50cyB0aGUgcmVxdWVzdCBlcnJvcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZXJyb3JzOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgaW5jbHVkZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZSBpbmNsdWRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGRhdGVJbmNsdWRlczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHBhcmFtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBxdWVyeTogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IGRhdGVcclxuXHQgKi9cclxuXHRwdWJsaWMgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRlICYgdGltZSBtYXNrXHJcblx0ICovXHJcblx0cHVibGljIGRhdGVUaW1lTWFzayA9IFsvWzAtM10vLCAvWzAtOV0vLCAnLicsIC9bMC0xXS8sIC9bMC05XS8sICcuJywgMiwgMCwgL1sxLTJdLywgL1swLTldLywgJyAnLCAvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRlIG1hc2tcclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZU1hc2sgPSBbL1swLTNdLywgL1swLTldLywgJy4nLCAvWzAtMV0vLCAvWzAtOV0vLCAnLicsIDIsIDAsIC9bMS0yXS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaW1lIG1hc2tcclxuXHQgKi9cclxuXHRwdWJsaWMgdGltZU1hc2sgPSBbL1swLTJdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vXTtcclxuXHJcblx0LyoqXHJcblx0ICogQSBwYXR0ZXJuIHRvIHZhbGlkYXRlIGRhdGVzXHJcblx0ICovXHJcblx0cHVibGljIGRhdGVQYXR0ZXJuOiBzdHJpbmcgPSBgKD86KD86MzEoXFxcXC98LXxcXFxcLikoPzowP1sxMzU3OF18MVswMl0pKVxcXFwxfCg/Oig/OjI5fDMwKShcXFxcL3wtfFxcXFwuKSg/OjA/WzEsMy05XXwxWzAtMl0pXFxcXDIpKSg/Oig/OjFbNi05XXxbMi05XVxcXFxkKT9cXFxcZHsyfSkkfF4oPzoyOShcXFxcL3wtfFxcXFwuKTA/MlxcXFwzKD86KD86KD86MVs2LTldfFsyLTldXFxcXGQpPyg/OjBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoPzooPzoxNnxbMjQ2OF1bMDQ4XXxbMzU3OV1bMjZdKTAwKSkpKSR8Xig/OjA/WzEtOV18MVxcXFxkfDJbMC04XSkoXFxcXC98LXxcXFxcLikoPzooPzowP1sxLTldKXwoPzoxWzAtMl0pKVxcXFw0KD86KD86MVs2LTldfFsyLTldXFxcXGQpP1xcXFxkezJ9KWA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBob25lIHByZWZpeCB2YWxpZGF0aW9uIHBhdHRlcm5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGhvbmVQcmVmaXhQYXR0ZXJuOiBzdHJpbmcgPSAnXigwXFxcXGR7Miw2fSkkJztcclxuXHJcblx0LyoqXHJcblx0ICogUGhvbmUgbnVtYmVyIHZhbGlkYXRpb24gcGF0dGVyblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwaG9uZU51bWJlclBhdHRlcm46IHN0cmluZyA9ICdeKFxcXFxkezMsMzB9KSQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBQYXNzd29yZCB2YWxpZGF0aW9uIHBhdHRlcm5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGFzc3dvcmRQYXR0ZXJuOiBzdHJpbmcgPSAnXig/PS4qW2Etel0pKD89LipbQS1aXSkoPz0uKlxcXFxkKSg/PS4qWyRAJCElKj8mXSlbQS1aYS16XFxcXGQkQCQhJSo/Jl17Nix9JztcclxuXHJcblx0LyoqXHJcblx0ICogRGVmYXVsdHMgbW9kdWxlcyBhbmQgdG9vbGJhclxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JPcHRpb25zID0ge1xyXG5cdFx0bW9kdWxlczoge1xyXG5cdFx0XHR0b29sYmFyOiBbXHJcblx0XHRcdFx0Wydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnXSxcclxuXHRcdFx0XHRbeyAnbGlzdCc6ICdvcmRlcmVkJyB9LCB7ICdsaXN0JzogJ2J1bGxldCcgfV0sXHJcblx0XHRcdFx0W3sgJ2luZGVudCc6ICctMScgfSwgeyAnaW5kZW50JzogJysxJyB9XSxcclxuXHRcdFx0XHRbeyAnc2l6ZSc6IFsnc21hbGwnLCBmYWxzZSwgJ2xhcmdlJywgJ2h1Z2UnXSB9XSxcclxuXHRcdFx0XHRbeyAnaGVhZGVyJzogWzEsIDIsIDMsIDQsIDUsIDYsIGZhbHNlXSB9XSxcclxuXHRcdFx0XHRbeyAnY29sb3InOiBuZXcgQXJyYXk8YW55PigpIH0sIHsgJ2JhY2tncm91bmQnOiBuZXcgQXJyYXk8YW55PigpIH1dLFxyXG5cdFx0XHRcdFsnbGluaycsICdpbWFnZSddXHJcblx0XHRcdF0sXHJcblx0XHRcdGNsaXBib2FyZDoge1xyXG5cdFx0XHRcdG1hdGNoVmlzdWFsOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWF0U3RlcHBlciByZWZcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFN0ZXBwZXIpXHJcblx0cHJvdGVjdGVkIG1hdFN0ZXBwZXI6IE1hdFN0ZXBwZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBlbGVtZW50XHJcblx0ICovXHJcblx0QFZpZXdDaGlsZHJlbignZm9jdXMnKVxyXG5cdHB1YmxpYyBpbnB1dDogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtIGdyb3VwXHJcblx0ICovXHJcblx0cHVibGljIGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cDtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBmb3JtIHZhbHVlXHJcblx0ICovXHJcblx0cHVibGljIGFic3RyYWN0IGdldCBmb3JtVmFsdWUoKTogVEVudGl0eSB8IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogcGFuZWxJZDogc3RyaW5nXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHBhbmVsSWQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHNlcnZpY2UgXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgZW50aXR5Q3RvcjogeyBuZXcoKTogVEVudGl0eSB9LFxyXG5cdFx0cHJvdGVjdGVkIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuXHQpIHtcclxuXHRcdHN1cGVyKHJvdXRlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblx0XHR0aGlzLmxpc3RSb3V0ZSA9IHRoaXMuYWRkU2F2ZUFuZENsb3NlUm91dGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yLCBpbml0aWFsaXppbmcgaW5wdXQgcHJvcGVydGllcywgXHJcblx0ICogYW5kIHRoZSBmaXJzdCBjYWxsIHRvIG5nT25DaGFuZ2VzLlxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHJcblx0XHQvKiBHZXQgaWQgZnJvbSB0aGUgdXJsICovXHJcblx0XHRsZXQgaWQgPSA8YW55PnRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xyXG5cdFx0aWYgKGlkID4gMCkge1xyXG5cdFx0XHR0aGlzLmlkID0gaWQ7XHJcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmlkICYmIHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkKSB7XHJcblx0XHRcdHRoaXMuaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90Py5kYXRhPy5pZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgc29tZSB2YXJpYWJsZSBmb3IgZWRpdCBtb2RlICovXHJcblx0XHRpZiAodGhpcy5pZCkge1xyXG5cdFx0XHR0aGlzLmFjdGlvbiA9ICdlZGl0JztcclxuXHRcdFx0dGhpcy5pc0VkaXRNb2RlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5saXN0Um91dGUgPSB0aGlzLmVkaXRTYXZlQW5kQ2xvc2VSb3V0ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgdGhlIHJldHVybiB1cmwgaWYgYW55ICovXHJcblx0XHR0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0dGhpcy5yZXR1cm5VcmwgPSB4LnJldHVyblVybCA/IGRlY29kZVVSSUNvbXBvbmVudChhdG9iKHgucmV0dXJuVXJsKSkgOiBudWxsO1xyXG5cdFx0XHR0aGlzLmxpc3RSb3V0ZSA9IHRoaXMucmV0dXJuVXJsIHx8IHRoaXMubGlzdFJvdXRlO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogU2V0IHBhbmVsIElEIGZyb20gcXVlcnkgKi9cclxuXHRcdHRoaXMucGFuZWxJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM/LnBhbmVsSWQ7XHJcblx0XHR0aGlzLnN1YnRpdGxlIHx8PSB0aGlzLnJvdXRlLnNuYXBzaG90Py5kYXRhPy5zdWJ0aXRsZTtcclxuXHJcblx0XHQvKiBBc3NpZ24gcXVlcnkgcGFyYW1zIGludG8gcXVlcnkgb2JqZWN0ICovXHJcblx0XHRsZXQgaWdub3JlZFBhcmFtczogc3RyaW5nW10gPSBbJ2lkJywgJ3JldHVybnVybCcsICdwYW5lbElkJ107XHJcblx0XHRPYmplY3QuYXNzaWduKHRoaXMucXVlcnksXHJcblx0XHRcdHRoaXMuc2FuaXRpemVPYmplY3QodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpLFxyXG5cdFx0XHR0aGlzLnNhbml0aXplT2JqZWN0KHRoaXMucm91dGUuc25hcHNob3QuZGF0YT8ucXVlcnkgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpLFxyXG5cdFx0XHR0aGlzLnNhbml0aXplT2JqZWN0KHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpXHJcblx0XHQpO1xyXG5cclxuXHRcdC8qIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgVEVudGl0eSAqL1xyXG5cdFx0aWYgKCF0aGlzLmlzRWRpdE1vZGUpIHtcclxuXHRcdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHRoaXMucXVlcnkpO1xyXG5cdFx0XHR0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG5cclxuXHRcdC8qIFNldCBwYWdlIHRpdGxlICovXHJcblx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKTtcclxuXHJcblx0XHQvKiBTZXQgZm9jdXMgKi9cclxuXHRcdHRoaXMuZm9jdXMoKTtcclxuXHJcblx0XHQvKiBcclxuXHRcdCAqIEZvcmNlIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0XHQgKiBoYXZlIGZpbmlzaGVkIHdoZW4gYG5nQWZ0ZXJWaWV3SW5pdGAgaXMgZXhlY3V0ZWRcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG5cdFx0LyogTG9hZCBpdGVtIGZyb20gc2VydmVyICovXHJcblx0XHR0aGlzLmxvYWRJdGVtKCk7XHJcblxyXG5cdFx0LyogTGlzdGVuIGZvciBzdGVwcGVyIHNlbGVjdGlvbiBjaGFuZ2VzICovXHJcblx0XHR0aGlzLm1hdFN0ZXBwZXI/LnNlbGVjdGlvbkNoYW5nZT8uc3Vic2NyaWJlKChldmVudDogU3RlcHBlclNlbGVjdGlvbkV2ZW50KSA9PiB0aGlzLm9uQWZ0ZXJTdGVwQ2hhbmdlKGV2ZW50KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyBhbiBpdGVtIGJ5IElEXHJcblx0ICovXHJcblx0cHVibGljIGxvYWRJdGVtKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHR0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR0aGlzLmxvYWRJdGVtQXN5bmMoKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChfKSA9PiB0aGlzLmlzTG9hZGluZyA9IGZhbHNlLFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgYW4gaXRlbSBieSBJRCBhc3luY2x5XHJcblx0ICovXHJcblx0cHVibGljIGxvYWRJdGVtQXN5bmMoKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XHJcblx0XHRpZiAodGhpcy5pZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5zZXJ2aWNlLmdldCh0aGlzLmlkLCBPYmplY3QuYXNzaWduKHRoaXMucXVlcnkgfHwge30sIHsgaW5jbHVkZXM6IHRoaXMuaW5jbHVkZXMgfSksIHsgJ0Rpc2FibGUtQ2FjaGUnOiAnWWVzJyB9KS5waXBlKFxyXG5cdFx0XHRcdG1hcCh4ID0+IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB4KSksXHJcblx0XHRcdFx0dGFwKHggPT4ge1xyXG5cdFx0XHRcdFx0LyogU2V0IHRoZSBsb2FkZWQgaXRlbSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIDxURW50aXR5PngpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEJ1aWxkIHRoZSBmb3JtICovXHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIFRyaWdnZXIgZXZlbnQgYWZ0ZXJJdGVtTG9hZGVkICovXHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJJdGVtTG9hZGVkKCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgaW50byBkYXRhYmFzZS5cclxuXHQgKiBAcGFyYW0gYWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHNhdmUoYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UsIGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCA9IG51bGwpOiB2b2lkIHtcclxuXHRcdC8qIFZhbGlkYXRlIHRoZSBmb3JtICovXHJcblx0XHR0aGlzLnZhbGlkYXRlRm9ybSgpO1xyXG5cclxuXHRcdC8qIENoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkICovXHJcblx0XHRmb3JtID0gdGhpcy5mb3JtIHx8IGZvcm07XHJcblx0XHRpZiAoZm9ybSAmJiAhdGhpcy5pc0Zvcm1WYWxpZChmb3JtKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgd2UncmEgaW4gZWRpdCBtb2RlLCB1cGRhdGUgdGhlIHJlY29yZCAqL1xyXG5cdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHQvKiBUaGUgZGF0YSBoYXMgbm90IGNoYW5nZWQ/ICovXHJcblx0XHRcdGlmIChmb3JtICYmIGZvcm0ucHJpc3RpbmUpIHtcclxuXHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEEgZmxhZyB0byBwcmV2ZW50IHNlbmRpbmcgdGhlIGZvcm0gdHdpY2UgKi9cclxuXHRcdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgKi9cclxuXHRcdFx0dGhpcy51cGRhdGUoeyBwYXJhbXM6IFV0aWxzLnRvSHR0cFBhcmFtcyh7IGluY2x1ZGVzOiB0aGlzLnVwZGF0ZUluY2x1ZGVzIH0pIH0pLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0XHQvKiBBcHBseSBzYXZlZCBkYXRhIHRvIHRoZSBmb3JtICovXHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uLCByZXNwb25zZSk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHVzZXIgY2xpY2tzICdhcHBseScgcmVsb2FkIHRoZSBwYWdlICovXHJcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRQYWdlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRlcnJvcjogKGVycm9yKSA9PiB0aGlzLnBhcnNlRXJyb3JzKGVycm9yKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBPdGhlcndpc2UsIGNyZWF0ZSBhIG5ldyBvbmUgKi9cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHQvKiBBIGZsYWcgdG8gcHJldmVudCBzZW5kaW5nIHRoZSBmb3JtIHR3aWNlICovXHJcblx0XHRcdHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG5cclxuXHRcdFx0LyogU2VuZCB0aGUgZGF0YSB0byB0aGUgc2VydmVyICovXHJcblx0XHRcdHRoaXMuY3JlYXRlPFRFbnRpdHk+KCkuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuaWQgPSByZXNwb25zZT8uaWQ7XHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uLCByZXNwb25zZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGZvcm0pIHtcclxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBjdHIgPSBmb3JtLmNvbnRyb2xzW2tleV07XHJcblx0XHRcdFx0XHRcdFx0Y3RyLm1hcmtBc1ByaXN0aW5lKCk7XHJcblx0XHRcdFx0XHRcdFx0Y3RyLm1hcmtBc1VudG91Y2hlZCgpO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5wYXJzZUVycm9ycyhlcnJvcilcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlcyBkYXRhIGFuZCBuYXZpZ2F0ZXMgdG8gZWRpdCB2aWV3XHJcblx0ICovXHJcblx0cHVibGljIGFwcGx5KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyB0aGUgY3VycmVudCByZWNvcmQuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkLCBudWxsLCB7IGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5iYWNrKCk7XHJcblx0XHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5kZWJ1ZyhlcnJvcik7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGRzIGEgbmV3IGZvcm1cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYnVpbGRGb3JtKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYXRlcyB0aGUgZm9ybVxyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB2YWxpZGF0ZUZvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dmFyIGZvcm0gPSBmb3JtIHx8IHRoaXMuZm9ybTtcclxuXHJcblx0XHQvKiBTZXQgdGhlIGZvcm0gYXMgc3VibWl0dGVkICovXHJcblx0XHRpZiAoZm9ybSAmJiBmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcblx0XHRcdC8qIFNldCBmb3JtIGFzIHN1Ym1pdHRlZCAqL1xyXG5cdFx0XHRmb3JtWydzdWJtaXR0ZWQnXSA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBVcGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5ICovXHJcblx0XHRcdGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVmFsaWRhdGVzIHRoZSBmb3JtXHJcblx0ICogQHBhcmFtIGZvcm0gXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGlzRm9ybVZhbGlkKGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCA9IG51bGwpOiBib29sZWFuIHtcclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdGlmICh0aGlzLmRlYnVnKSB7XHJcblx0XHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIElmIHRoZSBmb3JtIGlzdCBub3QgdmFsaWQuLiAqL1xyXG5cdFx0aWYgKCFmb3JtLnZhbGlkKSB7XHJcblx0XHRcdC8qIE1hcmsgaW52YWxpZCBjb250cm9scyBhcyBkaXJ0dHkgYW5kIHRvdWNoZWQgKi9cclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm0uY29udHJvbHNbeF0udmFsaWQpXHJcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybS5jb250cm9sc1trZXldKSk7XHJcblxyXG5cdFx0XHQvKiBTaG93IGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0LyogV2FpdCB1bnRpbCAnbWF0LWVycm9yJyBkaXNwbGF5ZWQgKi9cclxuXHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSh5ID0+IHNldFRpbWVvdXQoeSwgMjAwKSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHRcdHZhciBlcnJvcnMgPSBBcnJheTxzdHJpbmc+KCk7XHJcblx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybS5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCBlcnJvciB0ZXh0ICovXHJcblx0XHRcdFx0XHRcdHZhciBlcnJvciA9IHRoaXMuZ2V0RWxlbWVudEVycm9yKChmb3JtLmNvbnRyb2xzW2tleV0gYXMgYW55KT8ubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIEJ1aWxkIGVycm9yIG1lc3NhZ2UgKi9cclxuXHRcdFx0XHR2YXIgbWVzc2FnZSA9IGVycm9ycy5sZW5ndGggPyBlcnJvcnMuc2xpY2UoMCwgMykuam9pbignXFxuJykgOiAkbG9jYWxpemVgOkBAc25hY2tiYXIuZXJyb3IucmVxdWlyZWQtZmllbGRzOkFsbCBmaWVsZHMgbWFya2VkIHdpdGggYW4gYXN0ZXJpc2sgKCopIGFyZSByZXF1aXJlZC5gO1xyXG5cclxuXHRcdFx0XHQvKiBzaG93IGEgbm90aWNlICovXHJcblx0XHRcdFx0dGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihtZXNzYWdlLCAnT2snLCB7IGR1cmF0aW9uOiAzMDAwLCBwYW5lbENsYXNzOiBbJ2Vycm9yJ10gfSk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzZXRzIGZvcm0gY29udHJvbHNcclxuXHQgKiBAcGFyYW0gZm9ybSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgcmVzZXRGb3JtKGZvcm06IE5nRm9ybSk6IHZvaWQge1xyXG5cdFx0aWYgKCFmb3JtKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGxldCBjdHIgPSBmb3JtLmNvbnRyb2xzW2tleV07XHJcblx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRjdHIubWFya0FzVW50b3VjaGVkKCk7XHJcblx0XHRcdGN0ci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEludmFsaWRhdGUgY29udHJvbHMgcmVjdXJzaXZlbHlcclxuXHQgKiBAcGFyYW0gY29udHJvbCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW52YWxpZGF0ZUNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcblx0XHQvKiBDaGVjayB0aGUgY29udHJvbCBhZ2FpbnN0IG51bGwgKi9cclxuXHRcdGlmICghY29udHJvbCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgYSBncm91cCAqL1xyXG5cdFx0bGV0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG5cdFx0aWYgKGZvcm1Hcm91cD8uY29udHJvbHMpIHtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKVxyXG5cdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybUdyb3VwLmNvbnRyb2xzW3hdLnZhbGlkKVxyXG5cdFx0XHRcdC5mb3JFYWNoKHggPT4gdGhpcy5pbnZhbGlkYXRlQ29udHJvbChmb3JtR3JvdXAuY29udHJvbHNbeF0pKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuXHRcdFx0Y29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBmb3JtIGVycm9yc1xyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkZWJ1Z0Zvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0Y29uc29sZS5sb2coJ0Zvcm06JywgZm9ybSk7XHJcblx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBmb3JtLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xyXG5cdFx0XHRpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcblx0XHRcdFx0T2JqZWN0LmtleXMoY29udHJvbEVycm9ycykuZm9yRWFjaChrZXlFcnJvciA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnS2V5IGNvbnRyb2w6ICcgKyBrZXkgKyAnLCBrZXlFcnJvcjogJyArIGtleUVycm9yICsgJywgZXJyIHZhbHVlOiAnLCBjb250cm9sRXJyb3JzW2tleUVycm9yXSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgdGhlIHByZXZpb3VzIFVSTCBpbiB0aGUgaGlzdG9yeSBsaXN0LlxyXG5cdCAqIEBwYXJhbSBhY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgYmFjayhhY3Rpb246IFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSk6IHZvaWQge1xyXG5cdFx0aWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSAmJiB0aGlzLnJldHVyblVybCkge1xyXG5cdFx0XHR2YXIgdXJsUGFydHMgPSBVdGlscy5nZXRVcmxQYXJ0cyh0aGlzLnJldHVyblVybCk7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxQYXJ0cy51cmxdLCB7IHF1ZXJ5UGFyYW1zOiB1cmxQYXJ0cy5wYXJhbXMsIGZyYWdtZW50OiB1cmxQYXJ0cy5oYXNoIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpIHtcclxuXHRcdFx0XHRcdHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpIHtcclxuXHRcdFx0XHRcdHRoaXMucmVsb2FkUGFnZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRFZGl0ICYmIHRoaXMuaWQgPiAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5hZGRTYXZlQW5kRWRpdFJvdXRlfSR7dGhpcy5pZH1gXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZE5ldykge1xyXG5cdFx0XHRcdFx0dGhpcy5hZnRlclJlbG9hZCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgVEVudGl0eVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBuZXdJbnN0YW5jZSgpOiBURW50aXR5IHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW0gPSBuZXcgdGhpcy5lbnRpdHlDdG9yKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNyZWF0ZTxURW50aXR5PihodHRwT3B0aW9ucz86IE9iamVjdCk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xyXG5cdFx0dGhpcy5vbkJlZm9yZUNyZWF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VydmljZS5jcmVhdGU8VEVudGl0eT4odGhpcy5mb3JtVmFsdWUsIG51bGwsIE9iamVjdC5hc3NpZ24oaHR0cE9wdGlvbnMgfHwge30sIHsgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pIH0pLCBmYWxzZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHVwZGF0ZShodHRwT3B0aW9ucz86IE9iamVjdCk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xyXG5cdFx0dGhpcy5vbkJlZm9yZVVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5pZCwgT2JqZWN0LmFzc2lnbih0aGlzLml0ZW0sIHRoaXMuZm9ybVZhbHVlKSwgbnVsbCwgT2JqZWN0LmFzc2lnbihodHRwT3B0aW9ucyB8fCB7fSwgeyBoZWFkZXJzOiB0aGlzLnRvSHR0cEhlYWRlcnMoeyAnU2hvdy1NZXNzYWdlJzogJ3llcycgfSksIH0pLCBmYWxzZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIGluYyBcclxuXHQgKiBAcGFyYW0gdXBkYXRlIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbmNsdWRlKGluYzogc3RyaW5nLCB1cGRhdGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cdFx0dGhpcy5pbmNsdWRlcy5wdXNoKGluYyk7XHJcblx0XHRpZiAodXBkYXRlKSB7XHJcblx0XHRcdHRoaXMudXBkYXRlSW5jbHVkZXMucHVzaChpbmMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCBzdGVwIGhhcyBjaGFuZ2VkLlxyXG5cdCAqIEBwYXJhbSAkZXZlbnQgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJTdGVwQ2hhbmdlKCRldmVudDogU3RlcHBlclNlbGVjdGlvbkV2ZW50KTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gbG9hZGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVySXRlbUxvYWRlZCgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIGJlZm9yZSB0aGUgZm9ybSBoYXMgYnVpbHQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQmVmb3JlRm9ybUJ1aWxkKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBoYXMgYnVpbHQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJGb3JtQnVpbGQoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25CZWZvcmVDcmVhdGUoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gdXBkYXRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25CZWZvcmVVcGRhdGUoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsbGVkIGJlZm9yZSBkYXRhIHN1Ym1pdGlvblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBiZWZvcmVTdWJtaXQoXzogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCBhZnRlciBkYXRhIHN1Ym1pdGlvblxyXG5cdCAqIEBwYXJhbSBhY3Rpb24gXHJcblx0ICogQHBhcmFtIHJlc3BvbnNlIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVyU3VibWl0KGFjdGlvbjogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlLCByZXNwb25zZTogYW55ID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0dGhpcy5iYWNrKGFjdGlvbik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYWZ0ZXIgcGFnZSByZWxvYWRlZFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBhZnRlclJlbG9hZCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXRlbSA9IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB0aGlzLnF1ZXJ5KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgZm9jdXMgdG8gZmlyc3QgaW5wdXRcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZm9jdXMoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LmZpcnN0ICYmIHRoaXMuaW5wdXQuZmlyc3QubmF0aXZlRWxlbWVudCkge1xyXG5cdFx0XHR0aGlzLmlucHV0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgZWxlbWVudCBlcnJvclxyXG5cdCAqIEBwYXJhbSBuYXRpdmVFbGVtZW50IFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBnZXRFbGVtZW50RXJyb3IobmF0aXZlRWxlbWVudDogYW55KTogc3RyaW5nIHtcclxuXHRcdC8qIEdldCBwYXJhbmV0IGVsZW1lbnQgJ21hdC1mb3JtLWZpZWxkJyAqL1xyXG5cdFx0dmFyIG1hdEZvcm1GaWVsZCA9IG5hdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoJy5tYXQtZm9ybS1maWVsZCcpO1xyXG5cdFx0aWYgKCFtYXRGb3JtRmllbGQpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogR2V0IGNoaWxkIGVsZW1lbnQgJ21hdC1lcnJvcicgKi9cclxuXHRcdHZhciBtYXRFcnJvcnMgPSBtYXRGb3JtRmllbGQucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1lcnJvcicpO1xyXG5cdFx0aWYgKCFtYXRFcnJvcnMpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogR2V0IGNoaWxkIGVsZW1lbnQgJ21hdC1sYWJlbCcgKi9cclxuXHRcdHZhciBtYXRMYWJlbCA9IG1hdEZvcm1GaWVsZC5xdWVyeVNlbGVjdG9yKCdtYXQtbGFiZWwnKTtcclxuXHRcdGlmICghbWF0TGFiZWwpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogR2V0IGVycm9yIHRleHRzICovXHJcblx0XHR2YXIgZXJyb3JzQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtYXRFcnJvcnMpXHJcblx0XHRcdD8uZmlsdGVyKCh4OiBhbnkpID0+IHgudGV4dENvbnRlbnQpXHJcblx0XHRcdD8ubWFwKCh4OiBhbnkpID0+IHgudGV4dENvbnRlbnQpO1xyXG5cclxuXHRcdHJldHVybiBgJyR7bWF0TGFiZWwudGV4dENvbnRlbnR9JzogJHtlcnJvcnNBcnJheT8uam9pbignLCAnKX1gO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzcG9uZHMgdG8gdXNlci1pbml0aWF0ZWQgZXZlbnRzXHJcblx0ICogQHBhcmFtIGV2ZW50IFxyXG5cdCAqL1xyXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG5cdGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHRjYXNlICdzJzpcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHR0aGlzLnNhdmUoU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgJ2QnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmROZXcpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgJ2UnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRFZGl0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ2FuY2VsIHRoZSBmb3JtLCBpZiB0aGUgdXNlciBwcmVzcyB0aGUgRVNDIGtleSAqL1xyXG5cdFx0aWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHtcclxuXHRcdFx0dGhpcy5iYWNrKCk7XHJcblx0XHR9XHJcblx0fVxyXG59Il19
@@ -155,27 +155,8 @@ export class GenericListComponent extends BaseComponent {
155
155
  });
156
156
  }
157
157
  if (this.dynamicTable) {
158
- /* Add checkbox column */
159
- if (this.selectable) {
160
- this.columns.unshift({ name: 'select', type: TableColumnType.Checkbox, disable: (row) => !this.selectableItem(row), cellNgClass: (row) => this.selectColumnNgClass(row) });
161
- }
162
- /* Add duplicate menu */
163
- if (this.duplicable) {
164
- this.actionMenus.unshift({ title: $localize `:@@duplicate:Duplicate`, event: (row) => this.duplicate(row) });
165
- }
166
- /* Add download menu */
167
- if (this.downloadable) {
168
- this.actionMenus.unshift({ title: $localize `:@@download:Download`, event: (row) => this.download(row), hide: (row) => !this.canDownloadItem(row) });
169
- }
170
- /* Add delete menu */
171
- if (this.deleteable) {
172
- this.toolbarMenus.unshift({ title: $localize `:@@deleteSelected:Delete selected`, event: (_) => this.deleteItems() });
173
- this.actionMenus.unshift({ title: $localize `:@@delete:Delete`, event: (row) => this.deleteItem(row), hide: (row) => !this.canDeleteItem(row) });
174
- }
175
- /* Add edit menu */
176
- if (this.editable) {
177
- this.actionMenus.unshift({ title: $localize `:@@edit:Edit`, event: (row) => this.edit(row) });
178
- }
158
+ /* Add menu items for each row */
159
+ this.addRowMenuItems();
179
160
  /* Check if the action column already exists */
180
161
  var actionColmun = this.columns?.find(x => x.name == 'action');
181
162
  /* If so, just add the menu items to it */
@@ -315,7 +296,6 @@ export class GenericListComponent extends BaseComponent {
315
296
  }
316
297
  /**
317
298
  * Deletes an item from the database.
318
- * @param ids the IDs of the items to delete
319
299
  */
320
300
  deleteItems() {
321
301
  if (this.dataSource.selectionModel.hasValue()) {
@@ -333,8 +313,7 @@ export class GenericListComponent extends BaseComponent {
333
313
  }
334
314
  /**
335
315
  * Toggles a property
336
- * @param id
337
- * @param enabled
316
+ * @param item
338
317
  * @param property
339
318
  */
340
319
  toggle(item, property = 'enabled') {
@@ -388,6 +367,32 @@ export class GenericListComponent extends BaseComponent {
388
367
  include(...inc) {
389
368
  inc?.forEach(x => this.includes.push(x));
390
369
  }
370
+ /**
371
+ * Add row menu items
372
+ */
373
+ addRowMenuItems() {
374
+ /* Add checkbox column */
375
+ if (this.selectable) {
376
+ this.columns.unshift({ name: 'select', type: TableColumnType.Checkbox, disable: (row) => !this.selectableItem(row), cellNgClass: (row) => this.selectColumnNgClass(row) });
377
+ }
378
+ /* Add duplicate menu */
379
+ if (this.duplicable) {
380
+ this.actionMenus.unshift({ title: $localize `:@@duplicate:Duplicate`, event: (row) => this.duplicate(row) });
381
+ }
382
+ /* Add download menu */
383
+ if (this.downloadable) {
384
+ this.actionMenus.unshift({ title: $localize `:@@download:Download`, event: (row) => this.download(row), hide: (row) => !this.canDownloadItem(row) });
385
+ }
386
+ /* Add delete menu */
387
+ if (this.deleteable) {
388
+ this.toolbarMenus.unshift({ title: $localize `:@@deleteSelected:Delete selected`, event: (_) => this.deleteItems() });
389
+ this.actionMenus.unshift({ title: $localize `:@@delete:Delete`, event: (row) => this.deleteItem(row), hide: (row) => !this.canDeleteItem(row) });
390
+ }
391
+ /* Add edit menu */
392
+ if (this.editable) {
393
+ this.actionMenus.unshift({ title: $localize `:@@edit:Edit`, event: (row) => this.edit(row) });
394
+ }
395
+ }
391
396
  /**
392
397
  * Check if the item is deleteable
393
398
  */
@@ -458,4 +463,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
458
463
  type: HostListener,
459
464
  args: ['document:keydown', ['$event']]
460
465
  }] } });
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWpEOztHQUVHO0FBQ0gsV0FBVztBQUVYLE1BQU0sT0FBZ0Isb0JBQThGLFNBQVEsYUFBYTtJQWlJeEk7OztPQUdHO0lBQ0gsWUFDUSxPQUFp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O2dCQTBicEQsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBnZXRFbmRwb2ludCB9IGZyb20gJy4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQXBwU3RvcmFnZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9oZWxwZXJzL2FwcC1zdG9yYWdlJztcclxuaW1wb3J0IHsgSUVudGl0eSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvZW50aXR5JztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9odHRwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IFZkRHluYW1pY1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGFibGUvY29tcG9uZW50cy9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vdGFibGUvZW51bXMvdGFibGUtY29sdW1uLXR5cGUnO1xyXG5pbXBvcnQgeyBnZXRUYWJsZURlZmluaXRpb24gfSBmcm9tICcuLi8uLi90YWJsZS9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi90YWJsZS9tb2RlbHMvdGFibGUtY29sdW1uJztcclxuaW1wb3J0IHsgVGFibGVNZW51SXRlbSB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1tZW51LWl0ZW0nO1xyXG5pbXBvcnQgeyBUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi90YWJsZS90YWJsZS5kYXRhLXNvdXJjZSc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBBIGJhc2UgbGlzdCBjb21wb25lbnQgZm9yIGNvbXBvbmVudHMgd2l0aCBwYWdpbmF0aW9uIHN1cHBvcnRcclxuICovXHJcbi8vIEBkeW5hbWljXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY0xpc3RDb21wb25lbnQ8VEVudGl0eSBleHRlbmRzIElFbnRpdHkgfCBhbnksIFRTZXJ2aWNlIGV4dGVuZHMgR2VuZXJpY1NlcnZpY2U8VEVudGl0eT4+IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblx0LyoqXHJcblx0ICogTGlzdCB0aXRsZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdWJ0aXRsZTogc3RyaW5nID0gJyc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kUGFnaW5hdG9yIGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kU29ydCBhdHRyaWJ1dGVcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcblx0cHVibGljIHNvcnQ6IE1hdFNvcnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhZ2Ugc2l6ZSBvcHRpb25zXHJcblx0ICovXHJcblx0cHVibGljIHBhZ2VTaXplT3B0aW9uczogQXJyYXk8bnVtYmVyPiA9IFs1LCAxMCwgMTUsIDIwLCAzMCwgNTAsIDEwMCwgMjAwXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG5hdmlnYXRpb25zIHRvIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIGluY2x1ZGVzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBwYXJhbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgcXVlcnk6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRhLXRhYmxlIGRhdGFzb3VyY2VcclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0YVNvdXJjZTogVGFibGVEYXRhU291cmNlPFRFbnRpdHksIFRTZXJ2aWNlPiB8IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEN1cnJlbnQgc29ydCBjb2x1bW5cclxuXHQgKi9cclxuXHRwdWJsaWMgc29ydEFjdGl2ZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IHNvcnQgZGlyZWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHNvcnREaXJlY3Rpb246IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZSB0aGUgdGFibGUgZm9yXHJcblx0ICovXHJcblx0cHVibGljIGNsYXNzSW5zdGFuY2U6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogY29sdW1uczogVGFibGVDb2x1bW5bXSBcclxuXHQgKi9cclxuXHRwdWJsaWMgY29sdW1uczogKFRhYmxlQ29sdW1uIHwgc3RyaW5nKVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kU29ydCBhdHRyaWJ1dGVcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKFZkRHluYW1pY1RhYmxlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBkeW5hbWljVGFibGU6IFZkRHluYW1pY1RhYmxlQ29tcG9uZW50O1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgdHlwZSBvZiB0aGUgZGlhbG9nIGZvciBjcmVhdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGREaWFsb2dUeXBlOiBhbnkgPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyB0aGUgY29sdW1uICdDaGVja2JveCdcclxuXHQgKi9cclxuXHRwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIGJ1dHRvbiAnQWRkJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRWRpdCdcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEZWxldGUnXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEb3dubG9hZCdcclxuXHQgKi9cclxuXHRwdWJsaWMgZG93bmxvYWRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0R1cGxpY2F0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiByb3dOZ0NsYXNzOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3dOZ0NsYXNzOiBGdW5jdGlvbiA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHJvd0NsaWNrOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3dDbGljazogRnVuY3Rpb24gPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBkZXRhaWxzVGVtcGxhdGU6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIGRldGFpbHNUZW1wbGF0ZTogc3RyaW5nID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogVG9vbGJhciBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJNZW51czogVGFibGVNZW51SXRlbVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhYmxlIHJvdyBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIGFjdGlvbk1lbnVzOiBUYWJsZU1lbnVJdGVtW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YUxvYWRlZCBldmVudCBzdWJzY3JpcHRpb25cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZGF0YUxvYWRlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSBzZXJ2aWNlIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRwdWJsaWMgY2xhc3NUeXBlPzogeyBuZXcoKTogVEVudGl0eSB9XHJcblx0KSB7XHJcblx0XHRzdXBlcihyb3V0ZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIFxyXG5cdCAqIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG5cdFx0LyogUmVhZCBzb21lIHBhcmFtcyBmcm9tIHJvdXRpbmcgZGF0YSAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcblx0XHRcdE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSwgZGF0YS5xdWVyeSB8fCB7fSk7XHJcblx0XHRcdHRoaXMuY2xhc3NUeXBlIHx8PSBkYXRhLmNsYXNzVHlwZTtcclxuXHJcblx0XHRcdGlmIChkYXRhLmNvbHVtbnMpIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSBbLi4uKGRhdGEuY29sdW1ucyB8fCBbXSldO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZGF0YS5lbmRwb2ludCkge1xyXG5cdFx0XHRcdHRoaXMuc2VydmljZS5lbmRwb2ludCA9IGRhdGEuZW5kcG9pbnQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChkYXRhLmluY2x1ZGVzKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNsdWRlcyA9IGRhdGEuaW5jbHVkZXM7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goeCA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoeCkgJiYgeCAhPSAnY29sdW1ucycpIHtcclxuXHRcdFx0XHRcdHRoaXNbeF0gPSBkYXRhW3hdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBHZXQgY29sdW1ucyBmcm9tIGNsYXNzICovXHJcblx0XHRpZiAodGhpcy5jbGFzc1R5cGUpIHtcclxuXHRcdFx0dGhpcy5jbGFzc0luc3RhbmNlID0gbmV3IHRoaXMuY2xhc3NUeXBlKCk7XHJcblxyXG5cdFx0XHQvKiBHZXQgdGFibGUgZGVmaW5pdGlvbiAqL1xyXG5cdFx0XHR2YXIgdGFibGVEZWZpbml0aW9uID0gZ2V0VGFibGVEZWZpbml0aW9uKHRoaXMuY2xhc3NJbnN0YW5jZSk7XHJcblxyXG5cdFx0XHRPYmplY3Qua2V5cyh0YWJsZURlZmluaXRpb24gfHwge30pLmZvckVhY2goeCA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoeCkpIHtcclxuXHRcdFx0XHRcdHRoaXNbeF0gPSB0YWJsZURlZmluaXRpb25beF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIEdldCBlbmRwb2ludCAqL1xyXG5cdFx0XHRjb25zdCBlbmRwb2ludCA9IChnZXRFbmRwb2ludCh0aGlzLmNsYXNzSW5zdGFuY2UpIHx8IHRhYmxlRGVmaW5pdGlvbj8uZW5kcG9pbnQpO1xyXG5cdFx0XHRpZiAoZW5kcG9pbnQpIHtcclxuXHRcdFx0XHR0aGlzLnNlcnZpY2UuZW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogU29ydCB0aGUgY29sdW1ucyBieSBpbmRleCAqL1xyXG5cdFx0XHRVdGlscy5zb3J0QXJyYXkodGFibGVEZWZpbml0aW9uLmNvbHVtbnMsICdpbmRleCcpO1xyXG5cclxuXHRcdFx0LyogU29ydCB0aGUgY29sdW1ucyBieSBpbmRleCAqL1xyXG5cdFx0XHR0aGlzLmNvbHVtbnMgPSBbLi4udGFibGVEZWZpbml0aW9uLmNvbHVtbnNdO1xyXG5cclxuXHRcdFx0LyogSGFuZGxlIGV2ZW50cyAqL1xyXG5cdFx0XHR0aGlzLmNvbHVtbnM/LmZvckVhY2goKHg6IFRhYmxlQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB4LmV2ZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdFx0bGV0IGV2ZW50TmFtZTogc3RyaW5nID0gKCh4LmV2ZW50KSBhcyBzdHJpbmcpO1xyXG5cdFx0XHRcdFx0eC5ldmVudCA9IChyb3c6IGFueSkgPT4gKHguZXZlbnRBcmdzID8gdGhpc1tldmVudE5hbWVdKHJvdywgeC5ldmVudEFyZ3MpIDogdGhpc1tldmVudE5hbWVdKHJvdykpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBIaWRlIGNvbHVtbnMgdXNpbmcgcm91dGUgZGF0YSAqL1xyXG5cdFx0XHR0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeDogVGFibGVDb2x1bW4pID0+ICF4LmhpZGUgfHwgIXguaGlkZShkYXRhKSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmR5bmFtaWNUYWJsZSkge1xyXG5cdFx0XHQvKiBBZGQgY2hlY2tib3ggY29sdW1uICovXHJcblx0XHRcdGlmICh0aGlzLnNlbGVjdGFibGUpIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMudW5zaGlmdCh7IG5hbWU6ICdzZWxlY3QnLCB0eXBlOiBUYWJsZUNvbHVtblR5cGUuQ2hlY2tib3gsIGRpc2FibGU6IChyb3c6IFRFbnRpdHkpID0+ICF0aGlzLnNlbGVjdGFibGVJdGVtKHJvdyksIGNlbGxOZ0NsYXNzOiAocm93OiBURW50aXR5KSA9PiB0aGlzLnNlbGVjdENvbHVtbk5nQ2xhc3Mocm93KSB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQWRkIGR1cGxpY2F0ZSBtZW51ICovXHJcblx0XHRcdGlmICh0aGlzLmR1cGxpY2FibGUpIHtcclxuXHRcdFx0XHR0aGlzLmFjdGlvbk1lbnVzLnVuc2hpZnQoeyB0aXRsZTogJGxvY2FsaXplYDpAQGR1cGxpY2F0ZTpEdXBsaWNhdGVgLCBldmVudDogKHJvdzogYW55KSA9PiB0aGlzLmR1cGxpY2F0ZShyb3cpIH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBBZGQgZG93bmxvYWQgbWVudSAqL1xyXG5cdFx0XHRpZiAodGhpcy5kb3dubG9hZGFibGUpIHtcclxuXHRcdFx0XHR0aGlzLmFjdGlvbk1lbnVzLnVuc2hpZnQoeyB0aXRsZTogJGxvY2FsaXplYDpAQGRvd25sb2FkOkRvd25sb2FkYCwgZXZlbnQ6IChyb3c6IGFueSkgPT4gdGhpcy5kb3dubG9hZChyb3cpLCBoaWRlOiAocm93OiBURW50aXR5KSA9PiAhdGhpcy5jYW5Eb3dubG9hZEl0ZW0ocm93KSB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQWRkIGRlbGV0ZSBtZW51ICovXHJcblx0XHRcdGlmICh0aGlzLmRlbGV0ZWFibGUpIHtcclxuXHRcdFx0XHR0aGlzLnRvb2xiYXJNZW51cy51bnNoaWZ0KHsgdGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGVTZWxlY3RlZDpEZWxldGUgc2VsZWN0ZWRgLCBldmVudDogKF86IGFueSkgPT4gdGhpcy5kZWxldGVJdGVtcygpIH0pO1xyXG5cdFx0XHRcdHRoaXMuYWN0aW9uTWVudXMudW5zaGlmdCh7IHRpdGxlOiAkbG9jYWxpemVgOkBAZGVsZXRlOkRlbGV0ZWAsIGV2ZW50OiAocm93OiBhbnkpID0+IHRoaXMuZGVsZXRlSXRlbShyb3cpLCBoaWRlOiAocm93OiBURW50aXR5KSA9PiAhdGhpcy5jYW5EZWxldGVJdGVtKHJvdykgfSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEFkZCBlZGl0IG1lbnUgKi9cclxuXHRcdFx0aWYgKHRoaXMuZWRpdGFibGUpIHtcclxuXHRcdFx0XHR0aGlzLmFjdGlvbk1lbnVzLnVuc2hpZnQoeyB0aXRsZTogJGxvY2FsaXplYDpAQGVkaXQ6RWRpdGAsIGV2ZW50OiAocm93OiBhbnkpID0+IHRoaXMuZWRpdChyb3cpIH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBDaGVjayBpZiB0aGUgYWN0aW9uIGNvbHVtbiBhbHJlYWR5IGV4aXN0cyAqL1xyXG5cdFx0XHR2YXIgYWN0aW9uQ29sbXVuID0gKHRoaXMuY29sdW1ucyBhcyBUYWJsZUNvbHVtbltdKT8uZmluZCh4ID0+IHgubmFtZSA9PSAnYWN0aW9uJyk7XHJcblxyXG5cdFx0XHQvKiBJZiBzbywganVzdCBhZGQgdGhlIG1lbnUgaXRlbXMgdG8gaXQgKi9cclxuXHRcdFx0aWYgKGFjdGlvbkNvbG11biAhPSBudWxsKSB7XHJcblx0XHRcdFx0YWN0aW9uQ29sbXVuLmFjdGlvbk1lbnVzID0gYWN0aW9uQ29sbXVuLmFjdGlvbk1lbnVzIHx8IFtdO1xyXG5cdFx0XHRcdHRoaXMuYWN0aW9uTWVudXMuZm9yRWFjaCh5ID0+IGFjdGlvbkNvbG11bi5hY3Rpb25NZW51cy51bnNoaWZ0KHkpKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogT3RoZXJ3aXNlIGFkZCBhIG5ldyBvbmUgKi9cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5zLnB1c2gobmV3IFRhYmxlQ29sdW1uKHtcclxuXHRcdFx0XHRcdGluZGV4OiAyMDAwLFxyXG5cdFx0XHRcdFx0bmFtZTogJ2FjdGlvbicsXHJcblx0XHRcdFx0XHR0eXBlOiBUYWJsZUNvbHVtblR5cGUuQWN0aW9uLFxyXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWUsXHJcblx0XHRcdFx0XHRhY3Rpb25NZW51czogdGhpcy5hY3Rpb25NZW51c1xyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNldCBxdWVyeSBwYXJhbXMgaW50byBxdWVyeSBvYmplY3QgKi9cclxuXHRcdHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHggPT4gT2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5LCB4IHx8IHt9LCB7IHJldHVyblVybDogbnVsbCB9KSk7XHJcblxyXG5cdFx0LyogSW5pdGlsaWFsaXplIHRoZSBkYXRhIHNvdXJjZSB3aXRoIHRoZSBjdXJyZW50IHNlcnZpY2UsIHBhZ2luYXRvciBhbmQgc29ydCAqL1xyXG5cdFx0dGhpcy5zb3J0ID0gdGhpcy5keW5hbWljVGFibGU/Lm1hdFNvcnQgfHwgKHRoaXMuc29ydCA/IHRoaXMuc29ydCA6IG5ldyBNYXRTb3J0KCkpO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlID0gbmV3IFRhYmxlRGF0YVNvdXJjZTxURW50aXR5LCBUU2VydmljZT4odGhpcy5zZXJ2aWNlISwgdGhpcy5wYWdpbmF0b3IsIHRoaXMuc29ydCk7XHJcblxyXG5cdFx0LyogU2V0IGluY2x1ZGVzICovXHJcblx0XHR0aGlzLmRhdGFTb3VyY2UuaW5jbHVkZXMgPSB0aGlzLmluY2x1ZGVzO1xyXG5cclxuXHRcdC8qIExvYWQgcXVlcnkgZnJvbSBicm93c2VyIHN0b3JhZ2UgKi9cclxuXHRcdHZhciBzdG9ycmVkUXVlcnkgPSBBcHBTdG9yYWdlLmdldE9iamVjdChgJHt0aGlzLmFwcFNldHRpbmcucHJvamVjdE5hbWV9LiR7dGhpcy5yb3V0ZXIudXJsfWApO1xyXG5cdFx0aWYgKHN0b3JyZWRRdWVyeSkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2UuZmllbGRGaWx0ZXJzID0gdGhpcy5jbGVhbihzdG9ycmVkUXVlcnkuZmllbGRGaWx0ZXJzKSB8fCB7fTtcclxuXHRcdFx0dGhpcy5zb3J0QWN0aXZlID0gc3RvcnJlZFF1ZXJ5LnNvcnRCeTtcclxuXHRcdFx0dGhpcy5zb3J0RGlyZWN0aW9uID0gc3RvcnJlZFF1ZXJ5LnNvcnREaXJlY3Rpb247XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdlU2l6ZSA9IHN0b3JyZWRRdWVyeS5wYWdlU2l6ZTtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnBhZ2VJbmRleCA9IHN0b3JyZWRRdWVyeS5wYWdlSW5kZXg7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIHNvbWUgZmlsdGVyIGZyb20gcm91dGVyICovXHJcblx0XHRpZiAodGhpcy5xdWVyeSkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2Uuc3RhdGljRmllbGRGaWx0ZXJzID0gdGhpcy5xdWVyeTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBSZW1lbWJlciB0aGUgZmlsdGVycyAqL1xyXG5cdFx0dGhpcy5kYXRhTG9hZGVkU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhU291cmNlLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0QXBwU3RvcmFnZS5zZXRPYmplY3QoYCR7dGhpcy5hcHBTZXR0aW5nLnByb2plY3ROYW1lfS4ke3RoaXMucm91dGVyLnVybH1gLCB7XHJcblx0XHRcdFx0XHRmaWVsZEZpbHRlcnM6IHRoaXMuZGF0YVNvdXJjZS5maWVsZEZpbHRlcnMsXHJcblx0XHRcdFx0XHRzb3J0Qnk6IHRoaXMuc29ydC5hY3RpdmUsXHJcblx0XHRcdFx0XHRzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnQuZGlyZWN0aW9uLFxyXG5cdFx0XHRcdFx0cGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG5cdFx0XHRcdFx0cGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVsb2FkcyBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkTGlzdChyZXNldFNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5yZWxvYWQocmVzZXRTZWxlY3Rpb24pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2VhcmNoXHJcblx0ICogQHBhcmFtIGZpbHRlciBcclxuXHQgKi9cclxuXHRwdWJsaWMgc2VhcmNoKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBhZGQgcGFnZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuYWRkRGlhbG9nVHlwZSkge1xyXG5cdFx0XHR0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmFkZERpYWxvZ1R5cGUsIHsgd2lkdGg6ICc2NTBweCcsIGRhdGE6IHRoaXMuY2xhc3NJbnN0YW5jZSB9KVxyXG5cdFx0XHRcdC5hZnRlckNsb3NlZCgpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWRMaXN0KGZhbHNlKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfS9hZGRgXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIGVkaXQgcGFnZS5cclxuXHQgKiBAcGFyYW0gaXRlbSBUaGUgaWQgb2YgdGhlIGl0ZW1cclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdChpdGVtOiBURW50aXR5KTogdm9pZCB7XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfS9lZGl0LyR7KGl0ZW0gYXMgSUVudGl0eSkuaWR9YF0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyB0aGUgZW50aXR5XHJcblx0ICogUGF0Y2hlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIHBhdGNoXHJcblx0ICogQHBhcmFtIHZhbHVlIFRoZSAob3B0aW9uYWwpIHZhbHVlIHRvIGNoYW5nZVxyXG5cdCAqIEBwYXJhbSBpbmNsdWRlcyBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICovXHJcblx0cHVibGljIHBhdGNoKGlkOiBudW1iZXIsIGZpZWxkczogQXJyYXk8c3RyaW5nPiwgdmFsdWU6IGFueSwgaW5jbHVkZXM6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fcGF0Y2goaWQsIGZpZWxkcywgdmFsdWUsIGluY2x1ZGVzLCBfID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIChvcHRpb25hbCkgdmFsdWUgdG8gY2hhbmdlXHJcblx0ICogQHBhcmFtIGluY2x1ZGVzIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZSBjYWxsZWQgb24gc3VjY2Vzc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBfcGF0Y2goaWQ6IG51bWJlciwgZmllbGRzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZTogYW55LCBpbmNsdWRlczogYW55LCBzdWNjZXNzQ2FsbGJhY2s6IEZ1bmN0aW9uID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0LyogR2V0IGVudGl0eSBieSBJRCAqL1xyXG5cdFx0bGV0IGVudGl0eSA9IHRoaXMuZGF0YVNvdXJjZS5pdGVtcz8uZmlsdGVyKHggPT4gKDxhbnk+eCkuaWQgPT09IGlkKVswXTtcclxuXHRcdGlmIChlbnRpdHkpIHtcclxuXHRcdFx0LyogQnVpbGQgcGF0Y2ggbWV0aG9kcyAqL1xyXG5cdFx0XHRsZXQgcGF0Y2hlcyA9IGZpZWxkcy5tYXAoeCA9PiB7IHJldHVybiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvJHt4fWAsIHZhbHVlOiB2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6IGVudGl0eVt4XSB9OyB9KTtcclxuXHJcblx0XHRcdC8qIFNlbmQgcmVxdWVzdCAqL1xyXG5cdFx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0XHQucGF0Y2goaWQsIHBhdGNoZXMsIG51bGwsIHsgaGVhZGVyczogeyAnU2hvdy1NZXNzYWdlJzogJ1llcycgfSwgcGFyYW1zOiBpbmNsdWRlcyA/IFV0aWxzLnRvSHR0cFBhcmFtcyh7IGluY2x1ZGVzOiBpbmNsdWRlcyB9KSA6IG51bGwgfSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdC8qIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiwgaWYgYW55ICovXHJcblx0XHRcdFx0XHRpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3NDYWxsYmFjayh4KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fSwgXyA9PiB0aGlzLmlzU2F2aW5nID0gZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtKGl0ZW06IFRFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKVxyXG5cdFx0XHQuc3Vic2NyaWJlKChhY2NlcHQ6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0XHR0aGlzLnNlcnZpY2UuZGVsZXRlKChpdGVtIGFzIElFbnRpdHkpLmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRMaXN0KHRydWUpO1xyXG5cdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmRlYnVnKGVycm9yKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIGFuIGl0ZW0gZnJvbSB0aGUgZGF0YWJhc2UuXHJcblx0ICogQHBhcmFtIGlkcyB0aGUgSURzIG9mIHRoZSBpdGVtcyB0byBkZWxldGVcclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRlSXRlbXMoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5kYXRhU291cmNlLnNlbGVjdGlvbk1vZGVsLmhhc1ZhbHVlKCkpIHtcclxuXHRcdFx0dGhpcy5zaG93RGVsZXRlSXRlbXNEaWFsb2coKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGFjY2VwdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNlcnZpY2UuZGVsZXRlTGlzdCh0aGlzLmRhdGFTb3VyY2UuZ2V0U2VsZWN0ZWQoKSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxvYWRMaXN0KHRydWUpO1xyXG5cdFx0XHRcdFx0XHR9LCBlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5kZWJ1ZyhlcnJvcik7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVG9nZ2xlcyBhIHByb3BlcnR5XHJcblx0ICogQHBhcmFtIGlkIFxyXG5cdCAqIEBwYXJhbSBlbmFibGVkIFxyXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0b2dnbGUoaXRlbTogVEVudGl0eSwgcHJvcGVydHk6IHN0cmluZyA9ICdlbmFibGVkJyk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlXHJcblx0XHRcdC5wYXRjaCgoPGFueT5pdGVtKS5pZCwgW3sgb3A6ICdyZXBsYWNlJywgcGF0aDogYC8ke3Byb3BlcnR5fWAsIHZhbHVlOiBpdGVtW3Byb3BlcnR5XSB9XSlcclxuXHRcdFx0LnN1YnNjcmliZSh4ID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGxvYWRzIHRhcm5zZmVycyBjc3YgZmlsZXNcclxuXHQgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byB1cGxvYWRcclxuXHQgKiBAcGFyYW0gcmVsb2FkIElmIHRydWUsIHJlbG9hZCBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSwgcmVsb2FkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLnVwbG9hZChmaWxlKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRyZXNwb25zZSA9IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcblx0XHRcdC8qIFJlbG9hZCBsaXN0ICovXHJcblx0XHRcdGlmIChyZWxvYWQpIHtcclxuXHRcdFx0XHR0aGlzLmxvYWRMaXN0KCk7XHJcblx0XHRcdH1cclxuXHRcdH0sIGVycm9yID0+IHsgfSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEb3dubG9hZHMgYSBkb2N1bWVudFxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkb3dubG9hZChpdGVtOiBURW50aXR5LCBwYXRoOiBzdHJpbmcgPSAnZG93bmxvYWQnKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2UuZG93bmxvYWQoYCR7cGF0aH0vJHsoaXRlbSBhcyBJRW50aXR5KS5pZH1gKS5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdHNhdmVBcyhuZXcgQmxvYihbeC5kYXRhXSwge30pLCB4LmZpbGVuYW1lKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRHVwbGljYXRlcyBhIHJlY29yZFxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkdXBsaWNhdGUoaXRlbTogVEVudGl0eSkge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLmR1cGxpY2F0ZSgoaXRlbSBhcyBJRW50aXR5KS5pZCkuc3Vic2NyaWJlKF8gPT4gdGhpcy5sb2FkTGlzdCgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoaXMgaW5mb3JtcyB0aGUgdGFibGUgaG93IHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHJvd3MgdG8gXHJcblx0ICogdHJhY2sgaG93IHRoZSBkYXRhIGNoYW5nZXMgd2l0aCBlYWNoIHVwZGF0ZS5cclxuXHQgKiBAcGFyYW0gaW5kZXggXHJcblx0ICogQHBhcmFtIGl0ZW0gXHJcblx0ICovXHJcblx0cHVibGljIHRyYWNrQnlJZChfOiBudW1iZXIsIGl0ZW06IGFueSkge1xyXG5cdFx0cmV0dXJuIGl0ZW0uaWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIGluYyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5jbHVkZSguLi5pbmM6IHN0cmluZ1tdKSB7XHJcblx0XHRpbmM/LmZvckVhY2goeCA9PiB0aGlzLmluY2x1ZGVzLnB1c2goeCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhlIGl0ZW0gaXMgZGVsZXRlYWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EZWxldGVJdGVtKHJvdzogVEVudGl0eSk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZSB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRvd25sb2FkYWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5Eb3dubG9hZEl0ZW0ocm93OiBURW50aXR5KTogYm9vbGVhbiB7IHJldHVybiB0cnVlIH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhlIGl0ZW0gaXMgc2VsZWN0YWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RhYmxlSXRlbShyb3c6IFRFbnRpdHkpOiBib29sZWFuIHsgcmV0dXJuIHRydWUgfVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIE5nQ2xhc3Mgb2JqZWN0IGZvciBzZWxlY3QgY29sdW1uXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNlbGVjdENvbHVtbk5nQ2xhc3Mocm93OiBURW50aXR5KTogYW55IHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXNwb25kcyB0byB1c2VyLWluaXRpYXRlZCBldmVudHNcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICovXHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcblx0aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG5cdFx0aWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIGFkZCBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnYSc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5hZGQoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIHByZXZpb3VzIHBhZ2UgKi9cclxuXHRcdFx0XHRjYXNlICdQYWdlVXAnOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IucHJldmlvdXNQYWdlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0LyogTmF2aWdhdGUgdG8gbmV4dCBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnUGFnZURvd24nOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyIFxyXG5cdCAqIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZC5cclxuXHQgKi9cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmRhdGFMb2FkZWRTdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5kYXRhTG9hZGVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblx0fVxyXG59Il19
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWpEOztHQUVHO0FBQ0gsV0FBVztBQUVYLE1BQU0sT0FBZ0Isb0JBQThGLFNBQVEsYUFBYTtJQWlJeEk7OztPQUdHO0lBQ0gsWUFDUSxPQUFp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O2dCQStDN0IsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBZ2NwRCxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGdldEVuZHBvaW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvdXRpbHMnO1xyXG5pbXBvcnQgeyBBcHBTdG9yYWdlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2hlbHBlcnMvYXBwLXN0b3JhZ2UnO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uLy4uL2h0dHAvc2VydmljZXMvZ2VuZXJpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmREeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuLi8uLi90YWJsZS9lbnVtcy90YWJsZS1jb2x1bW4tdHlwZSc7XHJcbmltcG9ydCB7IGdldFRhYmxlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3RhYmxlL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZU1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vdGFibGUvbW9kZWxzL3RhYmxlLW1lbnUtaXRlbSc7XHJcbmltcG9ydCB7IFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL3RhYmxlL3RhYmxlLmRhdGEtc291cmNlJztcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEEgYmFzZSBsaXN0IGNvbXBvbmVudCBmb3IgY29tcG9uZW50cyB3aXRoIHBhZ2luYXRpb24gc3VwcG9ydFxyXG4gKi9cclxuLy8gQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljTGlzdENvbXBvbmVudDxURW50aXR5IGV4dGVuZHMgSUVudGl0eSB8IGFueSwgVFNlcnZpY2UgZXh0ZW5kcyBHZW5lcmljU2VydmljZTxURW50aXR5Pj4gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHQvKipcclxuXHQgKiBMaXN0IHRpdGxlXHJcblx0ICovXHJcblx0cHVibGljIHN1YnRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWZlcmVuY2UgdG8gTWRQYWdpbmF0b3IgZWxlbWVudFxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWZlcmVuY2UgdG8gTWRTb3J0IGF0dHJpYnV0ZVxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgc29ydDogTWF0U29ydDtcclxuXHJcblx0LyoqXHJcblx0ICogUGFnZSBzaXplIG9wdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgcGFnZVNpemVPcHRpb25zOiBBcnJheTxudW1iZXI+ID0gWzUsIDEwLCAxNSwgMjAsIDMwLCA1MCwgMTAwLCAyMDBdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbmF2aWdhdGlvbnMgdG8gaW5jbHVkZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgaW5jbHVkZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHBhcmFtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBxdWVyeTogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGEtdGFibGUgZGF0YXNvdXJjZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRhU291cmNlOiBUYWJsZURhdGFTb3VyY2U8VEVudGl0eSwgVFNlcnZpY2U+IHwgbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogQ3VycmVudCBzb3J0IGNvbHVtblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzb3J0QWN0aXZlOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEN1cnJlbnQgc29ydCBkaXJlY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc29ydERpcmVjdGlvbjogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBBbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgdG8gY3JlYXRlIHRoZSB0YWJsZSBmb3JcclxuXHQgKi9cclxuXHRwdWJsaWMgY2xhc3NJbnN0YW5jZTogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBjb2x1bW5zOiBUYWJsZUNvbHVtbltdIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb2x1bW5zOiAoVGFibGVDb2x1bW4gfCBzdHJpbmcpW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWZlcmVuY2UgdG8gTWRTb3J0IGF0dHJpYnV0ZVxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoVmREeW5hbWljVGFibGVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcblx0cHVibGljIGR5bmFtaWNUYWJsZTogVmREeW5hbWljVGFibGVDb21wb25lbnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSB0eXBlIG9mIHRoZSBkaWFsb2cgZm9yIGNyZWF0aW9uXHJcblx0ICovXHJcblx0cHVibGljIGFkZERpYWxvZ1R5cGU6IGFueSA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIHRoZSBjb2x1bW4gJ0NoZWNrYm94J1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZWxlY3RhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgYnV0dG9uICdBZGQnXHJcblx0ICovXHJcblx0cHVibGljIGFkZGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdFZGl0J1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0RlbGV0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRlYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0Rvd25sb2FkJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkb3dubG9hZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRHVwbGljYXRlJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkdXBsaWNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHJvd05nQ2xhc3M6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHJvd05nQ2xhc3M6IEZ1bmN0aW9uID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogcm93Q2xpY2s6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHJvd0NsaWNrOiBGdW5jdGlvbiA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGRldGFpbHNUZW1wbGF0ZTogRnVuY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgZGV0YWlsc1RlbXBsYXRlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgdG9vbGJhck1lbnVzOiBUYWJsZU1lbnVJdGVtW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGFibGUgcm93IG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgYWN0aW9uTWVudXM6IFRhYmxlTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRhTG9hZGVkIGV2ZW50IHN1YnNjcmlwdGlvblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkYXRhTG9hZGVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHNlcnZpY2UgXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgc2VydmljZTogVFNlcnZpY2UsXHJcblx0XHRwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG5cdFx0cHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRcdHB1YmxpYyBjbGFzc1R5cGU/OiB7IG5ldygpOiBURW50aXR5IH1cclxuXHQpIHtcclxuXHRcdHN1cGVyKHJvdXRlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBkYXRhLWJvdW5kIHByb3BlcnRpZXMgXHJcblx0ICogb2YgYSBkaXJlY3RpdmUgYXJlIGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHJcblx0XHQvKiBSZWFkIHNvbWUgcGFyYW1zIGZyb20gcm91dGluZyBkYXRhICovXHJcblx0XHR0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuXHRcdFx0T2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5LCBkYXRhLnF1ZXJ5IHx8IHt9KTtcclxuXHRcdFx0dGhpcy5jbGFzc1R5cGUgfHw9IGRhdGEuY2xhc3NUeXBlO1xyXG5cclxuXHRcdFx0aWYgKGRhdGEuY29sdW1ucykge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IFsuLi4oZGF0YS5jb2x1bW5zIHx8IFtdKV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChkYXRhLmVuZHBvaW50KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gZGF0YS5lbmRwb2ludDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuaW5jbHVkZXMpIHtcclxuXHRcdFx0XHR0aGlzLmluY2x1ZGVzID0gZGF0YS5pbmNsdWRlcztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0T2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCh4ID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSh4KSAmJiB4ICE9ICdjb2x1bW5zJykge1xyXG5cdFx0XHRcdFx0dGhpc1t4XSA9IGRhdGFbeF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIEdldCBjb2x1bW5zIGZyb20gY2xhc3MgKi9cclxuXHRcdGlmICh0aGlzLmNsYXNzVHlwZSkge1xyXG5cdFx0XHR0aGlzLmNsYXNzSW5zdGFuY2UgPSBuZXcgdGhpcy5jbGFzc1R5cGUoKTtcclxuXHJcblx0XHRcdC8qIEdldCB0YWJsZSBkZWZpbml0aW9uICovXHJcblx0XHRcdHZhciB0YWJsZURlZmluaXRpb24gPSBnZXRUYWJsZURlZmluaXRpb24odGhpcy5jbGFzc0luc3RhbmNlKTtcclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKHRhYmxlRGVmaW5pdGlvbiB8fCB7fSkuZm9yRWFjaCh4ID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSh4KSkge1xyXG5cdFx0XHRcdFx0dGhpc1t4XSA9IHRhYmxlRGVmaW5pdGlvblt4XTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0LyogR2V0IGVuZHBvaW50ICovXHJcblx0XHRcdGNvbnN0IGVuZHBvaW50ID0gKGdldEVuZHBvaW50KHRoaXMuY2xhc3NJbnN0YW5jZSkgfHwgdGFibGVEZWZpbml0aW9uPy5lbmRwb2ludCk7XHJcblx0XHRcdGlmIChlbmRwb2ludCkge1xyXG5cdFx0XHRcdHRoaXMuc2VydmljZS5lbmRwb2ludCA9IGVuZHBvaW50O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBTb3J0IHRoZSBjb2x1bW5zIGJ5IGluZGV4ICovXHJcblx0XHRcdFV0aWxzLnNvcnRBcnJheSh0YWJsZURlZmluaXRpb24uY29sdW1ucywgJ2luZGV4Jyk7XHJcblxyXG5cdFx0XHQvKiBTb3J0IHRoZSBjb2x1bW5zIGJ5IGluZGV4ICovXHJcblx0XHRcdHRoaXMuY29sdW1ucyA9IFsuLi50YWJsZURlZmluaXRpb24uY29sdW1uc107XHJcblxyXG5cdFx0XHQvKiBIYW5kbGUgZXZlbnRzICovXHJcblx0XHRcdHRoaXMuY29sdW1ucz8uZm9yRWFjaCgoeDogVGFibGVDb2x1bW4pID0+IHtcclxuXHRcdFx0XHRpZiAodHlwZW9mIHguZXZlbnQgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0XHRsZXQgZXZlbnROYW1lOiBzdHJpbmcgPSAoKHguZXZlbnQpIGFzIHN0cmluZyk7XHJcblx0XHRcdFx0XHR4LmV2ZW50ID0gKHJvdzogYW55KSA9PiAoeC5ldmVudEFyZ3MgPyB0aGlzW2V2ZW50TmFtZV0ocm93LCB4LmV2ZW50QXJncykgOiB0aGlzW2V2ZW50TmFtZV0ocm93KSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIEhpZGUgY29sdW1ucyB1c2luZyByb3V0ZSBkYXRhICovXHJcblx0XHRcdHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKCh4OiBUYWJsZUNvbHVtbikgPT4gIXguaGlkZSB8fCAheC5oaWRlKGRhdGEpKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZHluYW1pY1RhYmxlKSB7XHJcblx0XHRcdC8qIEFkZCBtZW51IGl0ZW1zIGZvciBlYWNoIHJvdyAqL1xyXG5cdFx0XHR0aGlzLmFkZFJvd01lbnVJdGVtcygpO1xyXG5cclxuXHRcdFx0LyogQ2hlY2sgaWYgdGhlIGFjdGlvbiBjb2x1bW4gYWxyZWFkeSBleGlzdHMgKi9cclxuXHRcdFx0dmFyIGFjdGlvbkNvbG11biA9ICh0aGlzLmNvbHVtbnMgYXMgVGFibGVDb2x1bW5bXSk/LmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2FjdGlvbicpO1xyXG5cclxuXHRcdFx0LyogSWYgc28sIGp1c3QgYWRkIHRoZSBtZW51IGl0ZW1zIHRvIGl0ICovXHJcblx0XHRcdGlmIChhY3Rpb25Db2xtdW4gIT0gbnVsbCkge1xyXG5cdFx0XHRcdGFjdGlvbkNvbG11bi5hY3Rpb25NZW51cyA9IGFjdGlvbkNvbG11bi5hY3Rpb25NZW51cyB8fCBbXTtcclxuXHRcdFx0XHR0aGlzLmFjdGlvbk1lbnVzLmZvckVhY2goeSA9PiBhY3Rpb25Db2xtdW4uYWN0aW9uTWVudXMudW5zaGlmdCh5KSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIE90aGVyd2lzZSBhZGQgYSBuZXcgb25lICovXHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29sdW1ucy5wdXNoKG5ldyBUYWJsZUNvbHVtbih7XHJcblx0XHRcdFx0XHRpbmRleDogMjAwMCxcclxuXHRcdFx0XHRcdG5hbWU6ICdhY3Rpb24nLFxyXG5cdFx0XHRcdFx0dHlwZTogVGFibGVDb2x1bW5UeXBlLkFjdGlvbixcclxuXHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG5cdFx0XHRcdFx0YWN0aW9uTWVudXM6IHRoaXMuYWN0aW9uTWVudXNcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgcXVlcnkgcGFyYW1zIGludG8gcXVlcnkgb2JqZWN0ICovXHJcblx0XHR0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh4ID0+IE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSwgeCB8fCB7fSwgeyByZXR1cm5Vcmw6IG51bGwgfSkpO1xyXG5cclxuXHRcdC8qIEluaXRpbGlhbGl6ZSB0aGUgZGF0YSBzb3VyY2Ugd2l0aCB0aGUgY3VycmVudCBzZXJ2aWNlLCBwYWdpbmF0b3IgYW5kIHNvcnQgKi9cclxuXHRcdHRoaXMuc29ydCA9IHRoaXMuZHluYW1pY1RhYmxlPy5tYXRTb3J0IHx8ICh0aGlzLnNvcnQgPyB0aGlzLnNvcnQgOiBuZXcgTWF0U29ydCgpKTtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBUYWJsZURhdGFTb3VyY2U8VEVudGl0eSwgVFNlcnZpY2U+KHRoaXMuc2VydmljZSEsIHRoaXMucGFnaW5hdG9yLCB0aGlzLnNvcnQpO1xyXG5cclxuXHRcdC8qIFNldCBpbmNsdWRlcyAqL1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLmluY2x1ZGVzID0gdGhpcy5pbmNsdWRlcztcclxuXHJcblx0XHQvKiBMb2FkIHF1ZXJ5IGZyb20gYnJvd3NlciBzdG9yYWdlICovXHJcblx0XHR2YXIgc3RvcnJlZFF1ZXJ5ID0gQXBwU3RvcmFnZS5nZXRPYmplY3QoYCR7dGhpcy5hcHBTZXR0aW5nLnByb2plY3ROYW1lfS4ke3RoaXMucm91dGVyLnVybH1gKTtcclxuXHRcdGlmIChzdG9ycmVkUXVlcnkpIHtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLmZpZWxkRmlsdGVycyA9IHRoaXMuY2xlYW4oc3RvcnJlZFF1ZXJ5LmZpZWxkRmlsdGVycykgfHwge307XHJcblx0XHRcdHRoaXMuc29ydEFjdGl2ZSA9IHN0b3JyZWRRdWVyeS5zb3J0Qnk7XHJcblx0XHRcdHRoaXMuc29ydERpcmVjdGlvbiA9IHN0b3JyZWRRdWVyeS5zb3J0RGlyZWN0aW9uO1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2UucGFnZVNpemUgPSBzdG9ycmVkUXVlcnkucGFnZVNpemU7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdlSW5kZXggPSBzdG9ycmVkUXVlcnkucGFnZUluZGV4O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBzb21lIGZpbHRlciBmcm9tIHJvdXRlciAqL1xyXG5cdFx0aWYgKHRoaXMucXVlcnkpIHtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnN0YXRpY0ZpZWxkRmlsdGVycyA9IHRoaXMucXVlcnk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogUmVtZW1iZXIgdGhlIGZpbHRlcnMgKi9cclxuXHRcdHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFMb2FkZWQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHRcdFx0aWYgKHJlc3VsdCkge1xyXG5cdFx0XHRcdEFwcFN0b3JhZ2Uuc2V0T2JqZWN0KGAke3RoaXMuYXBwU2V0dGluZy5wcm9qZWN0TmFtZX0uJHt0aGlzLnJvdXRlci51cmx9YCwge1xyXG5cdFx0XHRcdFx0ZmllbGRGaWx0ZXJzOiB0aGlzLmRhdGFTb3VyY2UuZmllbGRGaWx0ZXJzLFxyXG5cdFx0XHRcdFx0c29ydEJ5OiB0aGlzLnNvcnQuYWN0aXZlLFxyXG5cdFx0XHRcdFx0c29ydERpcmVjdGlvbjogdGhpcy5zb3J0LmRpcmVjdGlvbixcclxuXHRcdFx0XHRcdHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuXHRcdFx0XHRcdHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4LFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbG9hZHMgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZExpc3QocmVzZXRTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UucmVsb2FkKHJlc2V0U2VsZWN0aW9uKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlYXJjaFxyXG5cdCAqIEBwYXJhbSBmaWx0ZXIgXHJcblx0ICovXHJcblx0cHVibGljIHNlYXJjaChmaWx0ZXI6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLmZpbHRlciA9IGZpbHRlcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgYWRkIHBhZ2UuXHJcblx0ICovXHJcblx0cHVibGljIGFkZCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmFkZERpYWxvZ1R5cGUpIHtcclxuXHRcdFx0dGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5hZGREaWFsb2dUeXBlLCB7IHdpZHRoOiAnNjUwcHgnLCBkYXRhOiB0aGlzLmNsYXNzSW5zdGFuY2UgfSlcclxuXHRcdFx0XHQuYWZ0ZXJDbG9zZWQoKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkTGlzdChmYWxzZSkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVyLnVybH0vYWRkYF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBlZGl0IHBhZ2UuXHJcblx0ICogQHBhcmFtIGl0ZW0gVGhlIGlkIG9mIHRoZSBpdGVtXHJcblx0ICovXHJcblx0cHVibGljIGVkaXQoaXRlbTogVEVudGl0eSk6IHZvaWQge1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVyLnVybH0vZWRpdC8keyhpdGVtIGFzIElFbnRpdHkpLmlkfWBdKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhdGNoZXMgdGhlIGVudGl0eVxyXG5cdCAqIFBhdGNoZXMgdGhlIGVudGl0eVxyXG5cdCAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGVudGl0eVxyXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBwYXRjaFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgKG9wdGlvbmFsKSB2YWx1ZSB0byBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gaW5jbHVkZXMgSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYXRjaChpZDogbnVtYmVyLCBmaWVsZHM6IEFycmF5PHN0cmluZz4sIHZhbHVlOiBhbnksIGluY2x1ZGVzOiBhbnkpOiB2b2lkIHtcclxuXHRcdHRoaXMuX3BhdGNoKGlkLCBmaWVsZHMsIHZhbHVlLCBpbmNsdWRlcywgXyA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIHBhdGNoXHJcblx0ICogQHBhcmFtIHZhbHVlIFRoZSAob3B0aW9uYWwpIHZhbHVlIHRvIGNoYW5nZVxyXG5cdCAqIEBwYXJhbSBpbmNsdWRlcyBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIHN1Y2Nlc3NDYWxsYmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGUgY2FsbGVkIG9uIHN1Y2Nlc3NcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgX3BhdGNoKGlkOiBudW1iZXIsIGZpZWxkczogQXJyYXk8c3RyaW5nPiwgdmFsdWU6IGFueSwgaW5jbHVkZXM6IGFueSwgc3VjY2Vzc0NhbGxiYWNrOiBGdW5jdGlvbiA9IG51bGwpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG5cclxuXHRcdC8qIEdldCBlbnRpdHkgYnkgSUQgKi9cclxuXHRcdGxldCBlbnRpdHkgPSB0aGlzLmRhdGFTb3VyY2UuaXRlbXM/LmZpbHRlcih4ID0+ICg8YW55PngpLmlkID09PSBpZClbMF07XHJcblx0XHRpZiAoZW50aXR5KSB7XHJcblx0XHRcdC8qIEJ1aWxkIHBhdGNoIG1ldGhvZHMgKi9cclxuXHRcdFx0bGV0IHBhdGNoZXMgPSBmaWVsZHMubWFwKHggPT4geyByZXR1cm4geyBvcDogJ3JlcGxhY2UnLCBwYXRoOiBgLyR7eH1gLCB2YWx1ZTogdmFsdWUgIT0gdW5kZWZpbmVkID8gdmFsdWUgOiBlbnRpdHlbeF0gfTsgfSk7XHJcblxyXG5cdFx0XHQvKiBTZW5kIHJlcXVlc3QgKi9cclxuXHRcdFx0dGhpcy5zZXJ2aWNlXHJcblx0XHRcdFx0LnBhdGNoKGlkLCBwYXRjaGVzLCBudWxsLCB7IGhlYWRlcnM6IHsgJ1Nob3ctTWVzc2FnZSc6ICdZZXMnIH0sIHBhcmFtczogaW5jbHVkZXMgPyBVdGlscy50b0h0dHBQYXJhbXMoeyBpbmNsdWRlczogaW5jbHVkZXMgfSkgOiBudWxsIH0pXHJcblx0XHRcdFx0LnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHQvKiBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24sIGlmIGFueSAqL1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0XHRzdWNjZXNzQ2FsbGJhY2soeCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdH0sIF8gPT4gdGhpcy5pc1NhdmluZyA9IGZhbHNlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlbGV0ZXMgYW4gaXRlbSBmcm9tIHRoZSBkYXRhYmFzZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRlSXRlbShpdGVtOiBURW50aXR5KTogdm9pZCB7XHJcblx0XHR0aGlzLnNob3dEZWxldGVJdGVtRGlhbG9nKClcclxuXHRcdFx0LnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdCkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSgoaXRlbSBhcyBJRW50aXR5KS5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2FkTGlzdCh0cnVlKTtcclxuXHRcdFx0XHRcdH0sIGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5kZWJ1ZyhlcnJvcik7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtcygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0aW9uTW9kZWwuaGFzVmFsdWUoKSkge1xyXG5cdFx0XHR0aGlzLnNob3dEZWxldGVJdGVtc0RpYWxvZygpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2VydmljZS5kZWxldGVMaXN0KHRoaXMuZGF0YVNvdXJjZS5nZXRTZWxlY3RlZCgpKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubG9hZExpc3QodHJ1ZSk7XHJcblx0XHRcdFx0XHRcdH0sIGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmRlYnVnKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUb2dnbGVzIGEgcHJvcGVydHlcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKiBAcGFyYW0gcHJvcGVydHlcclxuXHQgKi9cclxuXHRwdWJsaWMgdG9nZ2xlKGl0ZW06IFRFbnRpdHksIHByb3BlcnR5OiBzdHJpbmcgPSAnZW5hYmxlZCcpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2VydmljZVxyXG5cdFx0XHQucGF0Y2goKDxhbnk+aXRlbSkuaWQsIFt7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvJHtwcm9wZXJ0eX1gLCB2YWx1ZTogaXRlbVtwcm9wZXJ0eV0gfV0pXHJcblx0XHRcdC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBsb2FkcyB0YXJuc2ZlcnMgY3N2IGZpbGVzXHJcblx0ICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gdXBsb2FkXHJcblx0ICogQHBhcmFtIHJlbG9hZCBJZiB0cnVlLCByZWxvYWQgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgdXBsb2FkKGZpbGU6IEZpbGUsIHJlbG9hZDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2VydmljZS51cGxvYWQoZmlsZSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuXHRcdFx0cmVzcG9uc2UgPSByZXNwb25zZS5qc29uKCk7XHJcblxyXG5cdFx0XHQvKiBSZWxvYWQgbGlzdCAqL1xyXG5cdFx0XHRpZiAocmVsb2FkKSB7XHJcblx0XHRcdFx0dGhpcy5sb2FkTGlzdCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9LCBlcnJvciA9PiB7IH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRG93bmxvYWRzIGEgZG9jdW1lbnRcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKi9cclxuXHRwdWJsaWMgZG93bmxvYWQoaXRlbTogVEVudGl0eSwgcGF0aDogc3RyaW5nID0gJ2Rvd25sb2FkJyk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLmRvd25sb2FkKGAke3BhdGh9LyR7KGl0ZW0gYXMgSUVudGl0eSkuaWR9YCkuc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRzYXZlQXMobmV3IEJsb2IoW3guZGF0YV0sIHt9KSwgeC5maWxlbmFtZSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIER1cGxpY2F0ZXMgYSByZWNvcmRcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYXRlKGl0ZW06IFRFbnRpdHkpIHtcclxuXHRcdHRoaXMuc2VydmljZS5kdXBsaWNhdGUoKGl0ZW0gYXMgSUVudGl0eSkuaWQpLnN1YnNjcmliZShfID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUaGlzIGluZm9ybXMgdGhlIHRhYmxlIGhvdyB0byB1bmlxdWVseSBpZGVudGlmeSByb3dzIHRvIFxyXG5cdCAqIHRyYWNrIGhvdyB0aGUgZGF0YSBjaGFuZ2VzIHdpdGggZWFjaCB1cGRhdGUuXHJcblx0ICogQHBhcmFtIGluZGV4IFxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0cmFja0J5SWQoXzogbnVtYmVyLCBpdGVtOiBhbnkpIHtcclxuXHRcdHJldHVybiBpdGVtLmlkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqIEBwYXJhbSBpbmMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGluY2x1ZGUoLi4uaW5jOiBzdHJpbmdbXSkge1xyXG5cdFx0aW5jPy5mb3JFYWNoKHggPT4gdGhpcy5pbmNsdWRlcy5wdXNoKHgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCByb3cgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBhZGRSb3dNZW51SXRlbXMoKTogdm9pZCB7XHJcblx0XHQvKiBBZGQgY2hlY2tib3ggY29sdW1uICovXHJcblx0XHRpZiAodGhpcy5zZWxlY3RhYmxlKSB7XHJcblx0XHRcdHRoaXMuY29sdW1ucy51bnNoaWZ0KHsgbmFtZTogJ3NlbGVjdCcsIHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5DaGVja2JveCwgZGlzYWJsZTogKHJvdzogVEVudGl0eSkgPT4gIXRoaXMuc2VsZWN0YWJsZUl0ZW0ocm93KSwgY2VsbE5nQ2xhc3M6IChyb3c6IFRFbnRpdHkpID0+IHRoaXMuc2VsZWN0Q29sdW1uTmdDbGFzcyhyb3cpIH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkdXBsaWNhdGUgbWVudSAqL1xyXG5cdFx0aWYgKHRoaXMuZHVwbGljYWJsZSkge1xyXG5cdFx0XHR0aGlzLmFjdGlvbk1lbnVzLnVuc2hpZnQoeyB0aXRsZTogJGxvY2FsaXplYDpAQGR1cGxpY2F0ZTpEdXBsaWNhdGVgLCBldmVudDogKHJvdzogYW55KSA9PiB0aGlzLmR1cGxpY2F0ZShyb3cpIH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkb3dubG9hZCBtZW51ICovXHJcblx0XHRpZiAodGhpcy5kb3dubG9hZGFibGUpIHtcclxuXHRcdFx0dGhpcy5hY3Rpb25NZW51cy51bnNoaWZ0KHsgdGl0bGU6ICRsb2NhbGl6ZWA6QEBkb3dubG9hZDpEb3dubG9hZGAsIGV2ZW50OiAocm93OiBhbnkpID0+IHRoaXMuZG93bmxvYWQocm93KSwgaGlkZTogKHJvdzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRG93bmxvYWRJdGVtKHJvdykgfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIGRlbGV0ZSBtZW51ICovXHJcblx0XHRpZiAodGhpcy5kZWxldGVhYmxlKSB7XHJcblx0XHRcdHRoaXMudG9vbGJhck1lbnVzLnVuc2hpZnQoeyB0aXRsZTogJGxvY2FsaXplYDpAQGRlbGV0ZVNlbGVjdGVkOkRlbGV0ZSBzZWxlY3RlZGAsIGV2ZW50OiAoXzogYW55KSA9PiB0aGlzLmRlbGV0ZUl0ZW1zKCkgfSk7XHJcblx0XHRcdHRoaXMuYWN0aW9uTWVudXMudW5zaGlmdCh7IHRpdGxlOiAkbG9jYWxpemVgOkBAZGVsZXRlOkRlbGV0ZWAsIGV2ZW50OiAocm93OiBhbnkpID0+IHRoaXMuZGVsZXRlSXRlbShyb3cpLCBoaWRlOiAocm93OiBURW50aXR5KSA9PiAhdGhpcy5jYW5EZWxldGVJdGVtKHJvdykgfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIGVkaXQgbWVudSAqL1xyXG5cdFx0aWYgKHRoaXMuZWRpdGFibGUpIHtcclxuXHRcdFx0dGhpcy5hY3Rpb25NZW51cy51bnNoaWZ0KHsgdGl0bGU6ICRsb2NhbGl6ZWA6QEBlZGl0OkVkaXRgLCBldmVudDogKHJvdzogYW55KSA9PiB0aGlzLmVkaXQocm93KSB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRlbGV0ZWFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuRGVsZXRlSXRlbShyb3c6IFRFbnRpdHkpOiBib29sZWFuIHsgcmV0dXJuIHRydWUgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB0aGUgaXRlbSBpcyBkb3dubG9hZGFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuRG93bmxvYWRJdGVtKHJvdzogVEVudGl0eSk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZSB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIHNlbGVjdGFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2VsZWN0YWJsZUl0ZW0ocm93OiBURW50aXR5KTogYm9vbGVhbiB7IHJldHVybiB0cnVlIH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBOZ0NsYXNzIG9iamVjdCBmb3Igc2VsZWN0IGNvbHVtblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RDb2x1bW5OZ0NsYXNzKHJvdzogVEVudGl0eSk6IGFueSB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzcG9uZHMgdG8gdXNlci1pbml0aWF0ZWQgZXZlbnRzXHJcblx0ICogQHBhcmFtIGV2ZW50IFxyXG5cdCAqL1xyXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG5cdGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byBhZGQgcGFnZSAqL1xyXG5cdFx0XHRcdGNhc2UgJ2EnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuYWRkKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnUGFnZVVwJzpcclxuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLnByZXZpb3VzUGFnZSgpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xyXG5cdFx0XHRcdGNhc2UgJ1BhZ2VEb3duJzpcclxuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQSBjYWxsYmFjayB1c2VkIGZvciBhbnkgY3VzdG9tIGNsZWFudXAgdGhhdCBuZWVkcyB0byBvY2N1ciBcclxuXHQgKiB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWQuXHJcblx0ICovXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5kYXRhTG9hZGVkU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxufSJdfQ==
@@ -37,10 +37,18 @@ export class GenericReactiveFormComponent extends GenericFormBaseComponent {
37
37
  this.form = this.formBuilder.formGroup(this.item, this.formBuilderConfig);
38
38
  this.onAfterFormBuild();
39
39
  }
40
+ /**
41
+ * Shows form errors
42
+ * @param form
43
+ */
44
+ debugForm(form = null) {
45
+ super.debugForm(form);
46
+ console.log(this.form.getErrorSummary(false));
47
+ }
40
48
  }
41
49
  /** @nocollapse */ /** @nocollapse */ GenericReactiveFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: GenericReactiveFormComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
42
50
  /** @nocollapse */ /** @nocollapse */ GenericReactiveFormComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.3", type: GenericReactiveFormComponent, usesInheritance: true, ngImport: i0 });
43
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: GenericReactiveFormComponent, decorators: [{
44
52
  type: Directive
45
53
  }], ctorParameters: function () { return [{ type: i0.Type }, { type: undefined }, { type: i1.ActivatedRoute }, { type: i0.ChangeDetectorRef }]; } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQVcsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLGtDQUFrQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFFekUsV0FBVztBQUVYLE1BQU0sT0FBZ0IsNEJBQWdHLFNBQVEsd0JBQTJDO0lBc0JySzs7O09BR0c7SUFDSCxZQUNXLFVBQXlCLEVBQ3RCLE9BQWlCLEVBQ2pCLEtBQXFCLEVBQ3JCLGlCQUFvQztRQUU5QyxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUw5QyxlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQ3RCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWxCbEQ7O1dBRUc7UUFDTyxzQkFBaUIsR0FBNkIsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBa0JuRixJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQWpCRDs7T0FFRztJQUNILElBQVcsU0FBUyxLQUFvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFnQmxFOztPQUVHO0lBQ08sU0FBUztRQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQWdCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQzs7K0pBM0NpQiw0QkFBNEI7bUpBQTVCLDRCQUE0QjsyRkFBNUIsNEJBQTRCO2tCQURqRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSUVudGl0eSwgU2VydmljZUxvY2F0b3IgfSBmcm9tICcuLi8uLi9jb21tb24vY29tbW9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm0tdmFsaWRhdG9ycy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBSeEZvcm1CdWlsZGVyLCBSeEZvcm1Hcm91cCB9IGZyb20gJy4uLy4uL2Zvcm0tdmFsaWRhdG9ycy9wdWJsaWNfYXBpJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9odHRwL2h0dHAubW9kdWxlJztcclxuaW1wb3J0IHsgR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9nZW5lcmljLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljUmVhY3RpdmVGb3JtQ29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBJRW50aXR5LCBUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+PiBleHRlbmRzIEdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5LCBUU2VydmljZT4ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9ybSBncm91cFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9ybSBidWlsZGVyXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogUnhGb3JtQnVpbGRlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGZvcm1CdWlsZGVyQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb25cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBuZXcgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGZvcm0gdmFsdWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBmb3JtVmFsdWUoKTogVEVudGl0eSB8IGFueSB7IHJldHVybiB0aGlzLmZvcm0udmFsdWU7IH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIHNlcnZpY2UgXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBlbnRpdHlDdG9yOiBUeXBlPFRFbnRpdHk+LFxyXG4gICAgICAgIHByb3RlY3RlZCBzZXJ2aWNlOiBUU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGVudGl0eUN0b3IsIHNlcnZpY2UsIHJvdXRlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgdGhpcy5mb3JtQnVpbGRlciA9IFNlcnZpY2VMb2NhdG9yLmdldFNlcnZpY2UoUnhGb3JtQnVpbGRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZHMgYSBuZXcgZm9ybVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYnVpbGRGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVGb3JtQnVpbGQoKTtcclxuICAgICAgICB0aGlzLmZvcm0gPSA8UnhGb3JtR3JvdXA+dGhpcy5mb3JtQnVpbGRlci5mb3JtR3JvdXAodGhpcy5pdGVtLCB0aGlzLmZvcm1CdWlsZGVyQ29uZmlnKTtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJGb3JtQnVpbGQoKTtcclxuICAgIH1cclxufSJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQVcsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLGtDQUFrQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFFekUsV0FBVztBQUVYLE1BQU0sT0FBZ0IsNEJBQWdHLFNBQVEsd0JBQTJDO0lBc0JySzs7O09BR0c7SUFDSCxZQUNXLFVBQXlCLEVBQ3RCLE9BQWlCLEVBQ2pCLEtBQXFCLEVBQ3JCLGlCQUFvQztRQUU5QyxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUw5QyxlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQ3RCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWxCbEQ7O1dBRUc7UUFDTyxzQkFBaUIsR0FBNkIsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBa0JuRixJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQWpCRDs7T0FFRztJQUNILElBQVcsU0FBUyxLQUFvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFnQmxFOztPQUVHO0lBQ08sU0FBUztRQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQWdCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVMsQ0FBQyxPQUFrQixJQUFJO1FBQ3RDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBRSxJQUFJLENBQUMsSUFBb0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDOzsrSkFwRGlCLDRCQUE0QjttSkFBNUIsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBRGpELFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBJRW50aXR5LCBTZXJ2aWNlTG9jYXRvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9jb21tb24ubW9kdWxlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybS12YWxpZGF0b3JzL21vZGVscyc7XHJcbmltcG9ydCB7IFJ4Rm9ybUJ1aWxkZXIsIFJ4Rm9ybUdyb3VwIH0gZnJvbSAnLi4vLi4vZm9ybS12YWxpZGF0b3JzL3B1YmxpY19hcGknO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uLy4uL2h0dHAvaHR0cC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBHZW5lcmljRm9ybUJhc2VDb21wb25lbnQgfSBmcm9tICcuL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlbmVyaWNSZWFjdGl2ZUZvcm1Db21wb25lbnQ8VEVudGl0eSBleHRlbmRzIElFbnRpdHksIFRTZXJ2aWNlIGV4dGVuZHMgR2VuZXJpY1NlcnZpY2U8VEVudGl0eT4+IGV4dGVuZHMgR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHksIFRTZXJ2aWNlPiB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtIGdyb3VwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtIGJ1aWxkZXJcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBSeEZvcm1CdWlsZGVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZm9ybUJ1aWxkZXJDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXJDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA9IG5ldyBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgZm9ybSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGZvcm1WYWx1ZSgpOiBURW50aXR5IHwgYW55IHsgcmV0dXJuIHRoaXMuZm9ybS52YWx1ZTsgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0gc2VydmljZSBcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGVudGl0eUN0b3I6IFR5cGU8VEVudGl0eT4sXHJcbiAgICAgICAgcHJvdGVjdGVkIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoZW50aXR5Q3Rvciwgc2VydmljZSwgcm91dGUsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB0aGlzLmZvcm1CdWlsZGVyID0gU2VydmljZUxvY2F0b3IuZ2V0U2VydmljZShSeEZvcm1CdWlsZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkcyBhIG5ldyBmb3JtXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBidWlsZEZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZUZvcm1CdWlsZCgpO1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IDxSeEZvcm1Hcm91cD50aGlzLmZvcm1CdWlsZGVyLmZvcm1Hcm91cCh0aGlzLml0ZW0sIHRoaXMuZm9ybUJ1aWxkZXJDb25maWcpO1xyXG4gICAgICAgIHRoaXMub25BZnRlckZvcm1CdWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvd3MgZm9ybSBlcnJvcnNcclxuICAgICAqIEBwYXJhbSBmb3JtIFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZGVidWdGb3JtKGZvcm06IEZvcm1Hcm91cCA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5kZWJ1Z0Zvcm0oZm9ybSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coKHRoaXMuZm9ybSBhcyBSeEZvcm1Hcm91cCkuZ2V0RXJyb3JTdW1tYXJ5KGZhbHNlKSk7XHJcbiAgICB9XHJcbn0iXX0=