@messaia/cdk 13.3.7 → 13.3.8

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.
@@ -2,7 +2,7 @@ import { ChangeDetectorRef, Directive, HostListener, Input, ViewChild, ViewChild
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { MatStepper } from '@angular/material/stepper';
4
4
  import { ActivatedRoute } from '@angular/router';
5
- import { map, Observable, tap } from 'rxjs';
5
+ import { Observable, map, tap } from 'rxjs';
6
6
  import { Utils } from '../../common/functions/utils';
7
7
  import { SaveAction } from '../../common/models/save-action';
8
8
  import { getFormGroups } from '../../forms/functions/functions';
@@ -219,7 +219,7 @@ export class GenericFormBaseComponent extends BaseComponent {
219
219
  */
220
220
  save(action = SaveAction.SaveAndClose, form = null) {
221
221
  /* Validate the form */
222
- this.validateForm();
222
+ this.validateForm(form);
223
223
  /* Check if the form is valid */
224
224
  form = this.form || form;
225
225
  if (form && !this.isFormValid(form)) {
@@ -618,4 +618,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImpor
618
618
  type: HostListener,
619
619
  args: ['document:keydown', ['$event']]
620
620
  }] } });
621
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvYmFzZS9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQW1CLFNBQVMsRUFBNEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQUVqRCxXQUFXO0FBRVgsTUFBTSxPQUFnQix3QkFBNEYsU0FBUSxhQUFhO0lBOEp0STs7O09BR0c7SUFDSCxZQUNRLFVBQThCLEVBQzNCLE9BQWlCLEVBQ2pCLEtBQXFCLEVBQ3JCLGlCQUFvQztRQUU5QyxLQUFLLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFMekIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixzQkFBaUIsR0FB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QUFvRDtRQUNwRCxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNaO0lBQ0YsQ0FBQzs7d0lBcnRCb0Isd0JBQXdCOzRIQUF4Qix3QkFBd0IsNEtBaUlsQyxVQUFVOzJGQWpJQSx3QkFBd0I7a0JBRDdDLFNBQVM7K0tBbUNGLElBQUk7c0JBRFYsS0FBSztnQkFpR0ksVUFBVTtzQkFEbkIsU0FBUzt1QkFBQyxVQUFVO2dCQU9kLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxPQUFPO2dCQXNqQnJCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0ZXBwZXJTZWxlY3Rpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAsIE5nRm9ybSwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IElFbnRpdHkgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL2VudGl0eSc7XHJcbmltcG9ydCB7IFNhdmVBY3Rpb24gfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3NhdmUtYWN0aW9uJztcclxuaW1wb3J0IHsgZ2V0Rm9ybUdyb3VwcyB9IGZyb20gJy4uLy4uL2Zvcm1zL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRHcm91cERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy9tb2RlbHMvZm9ybS1maWVsZC1ncm91cC1kZWZpbml0aW9uJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9odHRwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlTWVudUl0ZW0gfSBmcm9tICcuLi8uLi90YWJsZS9tb2RlbHMvdGFibGUtbWVudS1pdGVtJztcclxuaW1wb3J0IHsgSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWdlbmVyaWMtZm9ybS1iYXNlJztcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS5jb21wb25lbnQnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eSBleHRlbmRzIElFbnRpdHksIFRTZXJ2aWNlIGV4dGVuZHMgR2VuZXJpY1NlcnZpY2U8VEVudGl0eT4+IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4ge1xyXG5cdC8qKlxyXG5cdCAqIFRoZSBhY3Rpb24gb2YgdGhlIGZvcm0gKGFkZCB8IGVkaXQpXHJcblx0ICovXHJcblx0cHVibGljIGFjdGlvbjogc3RyaW5nID0gJ2FkZCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFjdGlvbiA9IGVkaXQ/XHJcblx0ICovXHJcblx0cHVibGljIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZSBhY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgU2F2ZUFjdGlvbjogdHlwZW9mIFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBSb3V0ZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdFNhdmVBbmRDbG9zZVJvdXRlOiBzdHJpbmcgPSAnLi4vLi4vJztcclxuXHRwdWJsaWMgYWRkU2F2ZUFuZENsb3NlUm91dGU6IHN0cmluZyA9ICcuLi8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kRWRpdFJvdXRlOiBzdHJpbmcgPSAnLi4vZWRpdC8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kTmV3Um91dGU6IHN0cmluZyA9ICcuLi9hZGQnO1xyXG5cdHB1YmxpYyBsaXN0Um91dGU6IHN0cmluZyA9IHRoaXMuYWRkU2F2ZUFuZENsb3NlUm91dGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBpZCBvZiB0aGUgaXRlbSB0byBsb2FkXHJcblx0ICovXHJcblx0cHVibGljIGlkOiBudW1iZXIgfCBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IGl0ZW0gdG8gYWRkIG9yIGVkaXRcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBpdGVtOiBURW50aXR5O1xyXG5cclxuXHQvKipcclxuXHQgKiBSZXByZXNlbnRzIHRoZSByZXF1ZXN0IGVycm9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBlcnJvcnM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmNsdWRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpbmNsdWRlczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIHVwZGF0ZUluY2x1ZGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgcGFyYW1zXHJcblx0ICovXHJcblx0cHVibGljIHF1ZXJ5OiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgZGF0ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGUgJiB0aW1lIG1hc2tcclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZVRpbWVNYXNrID0gWy9bMC0zXS8sIC9bMC05XS8sICcuJywgL1swLTFdLywgL1swLTldLywgJy4nLCAyLCAwLCAvWzEtMl0vLCAvWzAtOV0vLCAnICcsIC9bMC0yXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGUgbWFza1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRlTWFzayA9IFsvWzAtM10vLCAvWzAtOV0vLCAnLicsIC9bMC0xXS8sIC9bMC05XS8sICcuJywgMiwgMCwgL1sxLTJdLywgL1swLTldL107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRpbWUgbWFza1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB0aW1lTWFzayA9IFsvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHBhdHRlcm4gdG8gdmFsaWRhdGUgZGF0ZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZVBhdHRlcm46IHN0cmluZyA9IGAoPzooPzozMShcXFxcL3wtfFxcXFwuKSg/OjA/WzEzNTc4XXwxWzAyXSkpXFxcXDF8KD86KD86Mjl8MzApKFxcXFwvfC18XFxcXC4pKD86MD9bMSwzLTldfDFbMC0yXSlcXFxcMikpKD86KD86MVs2LTldfFsyLTldXFxcXGQpP1xcXFxkezJ9KSR8Xig/OjI5KFxcXFwvfC18XFxcXC4pMD8yXFxcXDMoPzooPzooPzoxWzYtOV18WzItOV1cXFxcZCk/KD86MFs0OF18WzI0NjhdWzA0OF18WzEzNTc5XVsyNl0pfCg/Oig/OjE2fFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKSkpJHxeKD86MD9bMS05XXwxXFxcXGR8MlswLThdKShcXFxcL3wtfFxcXFwuKSg/Oig/OjA/WzEtOV0pfCg/OjFbMC0yXSkpXFxcXDQoPzooPzoxWzYtOV18WzItOV1cXFxcZCk/XFxcXGR7Mn0pYDtcclxuXHJcblx0LyoqXHJcblx0ICogUGhvbmUgcHJlZml4IHZhbGlkYXRpb24gcGF0dGVyblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwaG9uZVByZWZpeFBhdHRlcm46IHN0cmluZyA9ICdeKDBcXFxcZHsyLDZ9KSQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBQaG9uZSBudW1iZXIgdmFsaWRhdGlvbiBwYXR0ZXJuXHJcblx0ICovXHJcblx0cHVibGljIHBob25lTnVtYmVyUGF0dGVybjogc3RyaW5nID0gJ14oXFxcXGR7MywzMH0pJCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhc3N3b3JkIHZhbGlkYXRpb24gcGF0dGVyblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYXNzd29yZFBhdHRlcm46IHN0cmluZyA9ICdeKD89LipbYS16XSkoPz0uKltBLVpdKSg/PS4qXFxcXGQpKD89LipbJEAkISUqPyZdKVtBLVphLXpcXFxcZCRAJCElKj8mXXs2LH0nO1xyXG5cclxuXHQvKipcclxuXHQgKiBEZWZhdWx0cyBtb2R1bGVzIGFuZCB0b29sYmFyXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvck9wdGlvbnMgPSB7XHJcblx0XHRtb2R1bGVzOiB7XHJcblx0XHRcdHRvb2xiYXI6IFtcclxuXHRcdFx0XHRbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZSddLFxyXG5cdFx0XHRcdFt7ICdsaXN0JzogJ29yZGVyZWQnIH0sIHsgJ2xpc3QnOiAnYnVsbGV0JyB9XSxcclxuXHRcdFx0XHRbeyAnaW5kZW50JzogJy0xJyB9LCB7ICdpbmRlbnQnOiAnKzEnIH1dLFxyXG5cdFx0XHRcdFt7ICdzaXplJzogWydzbWFsbCcsIGZhbHNlLCAnbGFyZ2UnLCAnaHVnZSddIH1dLFxyXG5cdFx0XHRcdFt7ICdoZWFkZXInOiBbMSwgMiwgMywgNCwgNSwgNiwgZmFsc2VdIH1dLFxyXG5cdFx0XHRcdFt7ICdjb2xvcic6IG5ldyBBcnJheTxhbnk+KCkgfSwgeyAnYmFja2dyb3VuZCc6IG5ldyBBcnJheTxhbnk+KCkgfV0sXHJcblx0XHRcdFx0WydsaW5rJywgJ2ltYWdlJ11cclxuXHRcdFx0XSxcclxuXHRcdFx0Y2xpcGJvYXJkOiB7XHJcblx0XHRcdFx0bWF0Y2hWaXN1YWw6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEZWxldGUnXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvb2xiYXIgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB0b29sYmFyTWVudUl0ZW1zOiBUYWJsZU1lbnVJdGVtW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogTWF0U3RlcHBlciByZWZcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFN0ZXBwZXIpXHJcblx0cHJvdGVjdGVkIG1hdFN0ZXBwZXI6IE1hdFN0ZXBwZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBlbGVtZW50XHJcblx0ICovXHJcblx0QFZpZXdDaGlsZHJlbignZm9jdXMnKVxyXG5cdHB1YmxpYyBpbnB1dDogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtIGdyb3VwXHJcblx0ICovXHJcblx0cHVibGljIGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cDtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBmb3JtIHZhbHVlXHJcblx0ICovXHJcblx0cHVibGljIGFic3RyYWN0IGdldCBmb3JtVmFsdWUoKTogVEVudGl0eSB8IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogZmllbGRHcm91cHM6IEZvcm1GaWVsZEdyb3VwW11cclxuXHQgKi9cclxuXHRwdWJsaWMgZmllbGRHcm91cHM6IEZvcm1GaWVsZEdyb3VwRGVmaW5pdGlvbltdO1xyXG5cclxuXHQvKipcclxuXHQgKiBwYW5lbElkOiBzdHJpbmdcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgcGFuZWxJZDogc3RyaW5nID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0gc2VydmljZSBcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyBlbnRpdHlDdG9yOiB7IG5ldygpOiBURW50aXR5IH0sXHJcblx0XHRwcm90ZWN0ZWQgc2VydmljZTogVFNlcnZpY2UsXHJcblx0XHRwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG5cdFx0cHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG5cdCkge1xyXG5cdFx0c3VwZXIocm91dGUsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5hZGRTYXZlQW5kQ2xvc2VSb3V0ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IsIGluaXRpYWxpemluZyBpbnB1dCBwcm9wZXJ0aWVzLCBcclxuXHQgKiBhbmQgdGhlIGZpcnN0IGNhbGwgdG8gbmdPbkNoYW5nZXMuXHJcblx0ICovXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuXHRcdGlmICh0aGlzLml0ZW0pIHtcclxuXHRcdFx0LyogU2V0IHRoZSBpZCBmcm9tIHRoZSBpdGVtICovXHJcblx0XHRcdHRoaXMuaWQgPSB0aGlzLml0ZW0/LmlkO1xyXG5cclxuXHRcdFx0LyogQ3JlYXRlIHRoZSBmcm9tIGZpZWxkcyB1c2luZyB0aGUgZW50aXR5IHR5cGUgKi9cclxuXHRcdFx0dGhpcy5maWVsZEdyb3VwcyA9IGdldEZvcm1Hcm91cHMobmV3IHRoaXMuZW50aXR5Q3RvcigpKTtcclxuXHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvKiBHZXQgaWQgZnJvbSB0aGUgdXJsICovXHJcblx0XHRcdGxldCBpZCA9IDxhbnk+dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJyk7XHJcblx0XHRcdGlmIChpZCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLmlkID0gaWQ7XHJcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuaWQgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uaWQpIHtcclxuXHRcdFx0XHR0aGlzLmlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uaWQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIFNldCBwYW5lbCBJRCBmcm9tIHF1ZXJ5ICovXHJcblx0XHRcdHRoaXMucGFuZWxJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM/LnBhbmVsSWQ7XHJcblx0XHRcdHRoaXMuc3VidGl0bGUgfHw9IHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LnN1YnRpdGxlO1xyXG5cclxuXHRcdFx0LyogQXNzaWduIHF1ZXJ5IHBhcmFtcyBpbnRvIHF1ZXJ5IG9iamVjdCAqL1xyXG5cdFx0XHRsZXQgaWdub3JlZFBhcmFtczogc3RyaW5nW10gPSBbJ2lkJywgJ3JldHVybnVybCcsICdwYW5lbElkJ107XHJcblx0XHRcdE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSxcclxuXHRcdFx0XHR0aGlzLnNhbml0aXplT2JqZWN0KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zIHx8IHt9LCAuLi5pZ25vcmVkUGFyYW1zKSxcclxuXHRcdFx0XHR0aGlzLnNhbml0aXplT2JqZWN0KHRoaXMucm91dGUuc25hcHNob3QuZGF0YT8ucXVlcnkgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpLFxyXG5cdFx0XHRcdHRoaXMuc2FuaXRpemVPYmplY3QodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcylcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgc29tZSB2YXJpYWJsZSBmb3IgZWRpdCBtb2RlICovXHJcblx0XHRpZiAodGhpcy5pZCkge1xyXG5cdFx0XHR0aGlzLmFjdGlvbiA9ICdlZGl0JztcclxuXHRcdFx0dGhpcy5pc0VkaXRNb2RlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5saXN0Um91dGUgPSB0aGlzLmVkaXRTYXZlQW5kQ2xvc2VSb3V0ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFRFbnRpdHkgKi9cclxuXHRcdGlmICghdGhpcy5pc0VkaXRNb2RlICYmICF0aGlzLmZvcm0pIHtcclxuXHRcdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHRoaXMuaXRlbSB8fCB7fSwgdGhpcy5xdWVyeSB8fCB7fSk7XHJcblx0XHRcdHRoaXMuYnVpbGRGb3JtKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIGxpc3QgbW5ldSBpdGVtcyAqL1xyXG5cdFx0dGhpcy5hZGRUb29sYmFyTWVudUl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBhIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdBZnRlclZpZXdJbml0KCk7XHJcblxyXG5cdFx0LyogU2V0IHBhZ2UgdGl0bGUgKi9cclxuXHRcdHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlU2VydmljZS5nZXRUaXRsZSgpO1xyXG5cclxuXHRcdC8qIFNldCBmb2N1cyAqL1xyXG5cdFx0dGhpcy5mb2N1cygpO1xyXG5cclxuXHRcdC8qIFxyXG5cdFx0ICogRm9yY2UgYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBzaW5jZSBjaGFuZ2UgZGV0ZWN0aW9ucyBcclxuXHRcdCAqIGhhdmUgZmluaXNoZWQgd2hlbiBgbmdBZnRlclZpZXdJbml0YCBpcyBleGVjdXRlZFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblx0XHQvKiBMb2FkIGl0ZW0gZnJvbSBzZXJ2ZXIgKi9cclxuXHRcdHRoaXMubG9hZEl0ZW0oKTtcclxuXHJcblx0XHQvKiBMaXN0ZW4gZm9yIHN0ZXBwZXIgc2VsZWN0aW9uIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMubWF0U3RlcHBlcj8uc2VsZWN0aW9uQ2hhbmdlPy5zdWJzY3JpYmUoKGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpID0+IHRoaXMub25BZnRlclN0ZXBDaGFuZ2UoZXZlbnQpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvYWRzIGFuIGl0ZW0gYnkgSURcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZEl0ZW0oKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcblx0XHRcdHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdHRoaXMubG9hZEl0ZW1Bc3luYygpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKF8pID0+IHRoaXMuaXNMb2FkaW5nID0gZmFsc2UsXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5wYXJzZUVycm9ycyhlcnJvcilcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyBhbiBpdGVtIGJ5IElEIGFzeW5jbHlcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZEl0ZW1Bc3luYygpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdGlmICh0aGlzLmlkKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMuaWQsIE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSB8fCB7fSwgeyBpbmNsdWRlczogdGhpcy5pbmNsdWRlcyB9KSwgeyAnRGlzYWJsZS1DYWNoZSc6ICdZZXMnIH0pLnBpcGUoXHJcblx0XHRcdFx0bWFwKHggPT4gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHgpKSxcclxuXHRcdFx0XHR0YXAoeCA9PiB7XHJcblx0XHRcdFx0XHQvKiBTZXQgdGhlIGxvYWRlZCBpdGVtICovXHJcblx0XHRcdFx0XHR0aGlzLml0ZW0gPSBPYmplY3QuYXNzaWduKHRoaXMubmV3SW5zdGFuY2UoKSwgPFRFbnRpdHk+eCk7XHJcblxyXG5cdFx0XHRcdFx0LyogQnVpbGQgdGhlIGZvcm0gKi9cclxuXHRcdFx0XHRcdHRoaXMuYnVpbGRGb3JtKCk7XHJcblxyXG5cdFx0XHRcdFx0LyogVHJpZ2dlciBldmVudCBhZnRlckl0ZW1Mb2FkZWQgKi9cclxuXHRcdFx0XHRcdHRoaXMub25BZnRlckl0ZW1Mb2FkZWQoKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBuZXcgT2JzZXJ2YWJsZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZXMgZGF0YSBpbnRvIGRhdGFiYXNlLlxyXG5cdCAqIEBwYXJhbSBhY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc2F2ZShhY3Rpb246IFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSwgZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0LyogVmFsaWRhdGUgdGhlIGZvcm0gKi9cclxuXHRcdHRoaXMudmFsaWRhdGVGb3JtKCk7XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIGZvcm0gaXMgdmFsaWQgKi9cclxuXHRcdGZvcm0gPSB0aGlzLmZvcm0gfHwgZm9ybTtcclxuXHRcdGlmIChmb3JtICYmICF0aGlzLmlzRm9ybVZhbGlkKGZvcm0pKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBJZiB3ZSdyYSBpbiBlZGl0IG1vZGUsIHVwZGF0ZSB0aGUgcmVjb3JkICovXHJcblx0XHRpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcblx0XHRcdC8qIFRoZSBkYXRhIGhhcyBub3QgY2hhbmdlZD8gKi9cclxuXHRcdFx0aWYgKGZvcm0gJiYgZm9ybS5wcmlzdGluZSkge1xyXG5cdFx0XHRcdHRoaXMub25BZnRlclN1Ym1pdChhY3Rpb24pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQSBmbGFnIHRvIHByZXZlbnQgc2VuZGluZyB0aGUgZm9ybSB0d2ljZSAqL1xyXG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciAqL1xyXG5cdFx0XHR0aGlzLnVwZGF0ZSh7IHBhcmFtczogVXRpbHMudG9IdHRwUGFyYW1zKHsgaW5jbHVkZXM6IHRoaXMudXBkYXRlSW5jbHVkZXMgfSkgfSkuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRcdC8qIEFwcGx5IHNhdmVkIGRhdGEgdG8gdGhlIGZvcm0gKi9cclxuXHRcdFx0XHRcdHRoaXMub25BZnRlclN1Ym1pdChhY3Rpb24sIHJlc3BvbnNlKTtcclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgdXNlciBjbGlja3MgJ2FwcGx5JyByZWxvYWQgdGhlIHBhZ2UgKi9cclxuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlbG9hZFBhZ2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIE90aGVyd2lzZSwgY3JlYXRlIGEgbmV3IG9uZSAqL1xyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdC8qIEEgZmxhZyB0byBwcmV2ZW50IHNlbmRpbmcgdGhlIGZvcm0gdHdpY2UgKi9cclxuXHRcdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgKi9cclxuXHRcdFx0dGhpcy5jcmVhdGU8VEVudGl0eT4oKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pZCA9IHJlc3BvbnNlPy5pZDtcclxuXHRcdFx0XHRcdHRoaXMub25BZnRlclN1Ym1pdChhY3Rpb24sIHJlc3BvbnNlKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZm9ybSkge1xyXG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGN0ciA9IGZvcm0uY29udHJvbHNba2V5XTtcclxuXHRcdFx0XHRcdFx0XHRjdHIubWFya0FzUHJpc3RpbmUoKTtcclxuXHRcdFx0XHRcdFx0XHRjdHIubWFya0FzVW50b3VjaGVkKCk7XHJcblx0XHRcdFx0XHRcdFx0Y3RyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRlcnJvcjogKGVycm9yKSA9PiB0aGlzLnBhcnNlRXJyb3JzKGVycm9yKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBEZXRlY3QgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlcyBkYXRhIGFuZCBuYXZpZ2F0ZXMgdG8gZWRpdCB2aWV3XHJcblx0ICovXHJcblx0cHVibGljIGFwcGx5KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyB0aGUgY3VycmVudCByZWNvcmQuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkLCBudWxsLCB7IGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5iYWNrKCk7XHJcblx0XHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5kZWJ1ZyhlcnJvcik7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQnVpbGRzIGEgbmV3IGZvcm1cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYnVpbGRGb3JtKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYXRlcyB0aGUgZm9ybVxyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyB2YWxpZGF0ZUZvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dmFyIGZvcm0gPSBmb3JtIHx8IHRoaXMuZm9ybTtcclxuXHJcblx0XHQvKiBTZXQgdGhlIGZvcm0gYXMgc3VibWl0dGVkICovXHJcblx0XHRpZiAoZm9ybSAmJiBmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcblx0XHRcdC8qIFNldCBmb3JtIGFzIHN1Ym1pdHRlZCAqL1xyXG5cdFx0XHRmb3JtWydzdWJtaXR0ZWQnXSA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBVcGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5ICovXHJcblx0XHRcdGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVmFsaWRhdGVzIHRoZSBmb3JtXHJcblx0ICogQHBhcmFtIGZvcm0gXHJcblx0ICovXHJcblx0cHVibGljIGlzRm9ybVZhbGlkKGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCA9IG51bGwpOiBib29sZWFuIHtcclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cclxuXHRcdC8qIElmIHRoZSBmb3JtIGlzdCBub3QgdmFsaWQuLiAqL1xyXG5cdFx0aWYgKCFmb3JtLnZhbGlkKSB7XHJcblx0XHRcdC8qIE1hcmsgaW52YWxpZCBjb250cm9scyBhcyBkaXJ0dHkgYW5kIHRvdWNoZWQgKi9cclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm0uY29udHJvbHNbeF0udmFsaWQpXHJcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybS5jb250cm9sc1trZXldKSk7XHJcblxyXG5cdFx0XHQvKiBTaG93IGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0LyogV2FpdCB1bnRpbCAnbWF0LWVycm9yJyBkaXNwbGF5ZWQgKi9cclxuXHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSh5ID0+IHNldFRpbWVvdXQoeSwgMjAwKSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHRcdHZhciBlcnJvcnMgPSBBcnJheTxzdHJpbmc+KCk7XHJcblx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybS5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCBlcnJvciB0ZXh0ICovXHJcblx0XHRcdFx0XHRcdHZhciBlcnJvciA9IHRoaXMuZ2V0RWxlbWVudEVycm9yKChmb3JtLmNvbnRyb2xzW2tleV0gYXMgYW55KT8ubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIEJ1aWxkIGVycm9yIG1lc3NhZ2UgKi9cclxuXHRcdFx0XHR2YXIgbWVzc2FnZSA9IGVycm9ycy5sZW5ndGggPyBlcnJvcnMuc2xpY2UoMCwgMykuam9pbignXFxuJykgOiAkbG9jYWxpemVgOkBAc25hY2tiYXIuZXJyb3IucmVxdWlyZWQtZmllbGRzOkFsbCBmaWVsZHMgbWFya2VkIHdpdGggYW4gYXN0ZXJpc2sgKCopIGFyZSByZXF1aXJlZC5gO1xyXG5cclxuXHRcdFx0XHQvKiBzaG93IGEgbm90aWNlICovXHJcblx0XHRcdFx0dGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihtZXNzYWdlLCAnT2snLCB7IGR1cmF0aW9uOiAzMDAwLCBwYW5lbENsYXNzOiBbJ2Vycm9yJ10gfSk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzZXRzIGZvcm0gY29udHJvbHNcclxuXHQgKiBAcGFyYW0gZm9ybSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgcmVzZXRGb3JtKGZvcm06IE5nRm9ybSk6IHZvaWQge1xyXG5cdFx0aWYgKCFmb3JtKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGxldCBjdHIgPSBmb3JtLmNvbnRyb2xzW2tleV07XHJcblx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRjdHIubWFya0FzVW50b3VjaGVkKCk7XHJcblx0XHRcdGN0ci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEludmFsaWRhdGUgY29udHJvbHMgcmVjdXJzaXZlbHlcclxuXHQgKiBAcGFyYW0gY29udHJvbCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW52YWxpZGF0ZUNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcblx0XHQvKiBDaGVjayB0aGUgY29udHJvbCBhZ2FpbnN0IG51bGwgKi9cclxuXHRcdGlmICghY29udHJvbCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgYSBncm91cCAqL1xyXG5cdFx0bGV0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG5cdFx0aWYgKGZvcm1Hcm91cD8uY29udHJvbHMpIHtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKVxyXG5cdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybUdyb3VwLmNvbnRyb2xzW3hdLnZhbGlkKVxyXG5cdFx0XHRcdC5mb3JFYWNoKHggPT4gdGhpcy5pbnZhbGlkYXRlQ29udHJvbChmb3JtR3JvdXAuY29udHJvbHNbeF0pKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuXHRcdFx0Y29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBmb3JtIGVycm9yc1xyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkZWJ1Z0Zvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ0Zvcm06JywgZm9ybSk7XHJcblx0XHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb250cm9sRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gZm9ybS5jb250cm9sc1trZXldLmVycm9ycztcclxuXHRcdFx0XHRpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKGtleUVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0tleSBjb250cm9sOiAnICsga2V5ICsgJywga2V5RXJyb3I6ICcgKyBrZXlFcnJvciArICcsIGVyciB2YWx1ZTogJywgY29udHJvbEVycm9yc1trZXlFcnJvcl0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCB0b29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkVG9vbGJhck1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCAnRGVsZXRlJyBtZW51IGl0ZW0gKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMucHVzaCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGljb25DbGFzczogJ3RjLW9yYW5nZS04MDAnLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLmRlbGV0ZSgpLFxyXG5cdFx0XHRcdGRpc2FibGU6ICgpID0+ICF0aGlzLmlkLFxyXG5cdFx0XHRcdGhpZGU6ICgpID0+ICF0aGlzLmNhbkRlbGV0ZSgpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgdGhlIHByZXZpb3VzIFVSTCBpbiB0aGUgaGlzdG9yeSBsaXN0LlxyXG5cdCAqIEBwYXJhbSBhY3Rpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgYmFjayhhY3Rpb246IFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSk6IHZvaWQge1xyXG5cdFx0aWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSAmJiB0aGlzLnJldHVyblVybCkge1xyXG5cdFx0XHR0aGlzLm5hdmlnYXRlVG9SZXR1cm5VcmwoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuXHRcdFx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRFZGl0KSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlbG9hZFBhZ2UoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCAmJiB0aGlzLmlkID4gMCkge1xyXG5cdFx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMuYWRkU2F2ZUFuZEVkaXRSb3V0ZX0ke3RoaXMuaWR9YF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmROZXcpIHtcclxuXHRcdFx0XHRcdHRoaXMuYWZ0ZXJSZWxvYWQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgcmV0dXJuIHVybFxyXG5cdCAqIEBwYXJhbSByZXR1cm5VcmwgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFJldHVyblVybChyZXR1cm5Vcmw6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0c3VwZXIuc2V0UmV0dXJuVXJsKHJldHVyblVybCk7XHJcblx0XHR0aGlzLmxpc3RSb3V0ZSA9IHRoaXMucmV0dXJuVXJsIHx8IHRoaXMubGlzdFJvdXRlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgVEVudGl0eVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBuZXdJbnN0YW5jZSgpOiBURW50aXR5IHtcclxuXHRcdHJldHVybiBuZXcgdGhpcy5lbnRpdHlDdG9yKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNyZWF0ZTxURW50aXR5PihodHRwT3B0aW9ucz86IE9iamVjdCk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xyXG5cdFx0dGhpcy5vbkJlZm9yZUNyZWF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VydmljZS5jcmVhdGU8VEVudGl0eT4odGhpcy5mb3JtVmFsdWUsIG51bGwsIE9iamVjdC5hc3NpZ24oaHR0cE9wdGlvbnMgfHwge30sIHsgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pIH0pLCBmYWxzZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHVwZGF0ZShodHRwT3B0aW9ucz86IE9iamVjdCk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xyXG5cdFx0dGhpcy5vbkJlZm9yZVVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5pZCwgT2JqZWN0LmFzc2lnbih0aGlzLml0ZW0sIHRoaXMuZm9ybVZhbHVlKSwgbnVsbCwgT2JqZWN0LmFzc2lnbihodHRwT3B0aW9ucyB8fCB7fSwgeyBoZWFkZXJzOiB0aGlzLnRvSHR0cEhlYWRlcnMoeyAnU2hvdy1NZXNzYWdlJzogJ3llcycgfSksIH0pLCBmYWxzZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIGluYyBcclxuXHQgKiBAcGFyYW0gdXBkYXRlIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbmNsdWRlKGluYzogc3RyaW5nLCB1cGRhdGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cdFx0dGhpcy5pbmNsdWRlcy5wdXNoKGluYyk7XHJcblx0XHRpZiAodXBkYXRlKSB7XHJcblx0XHRcdHRoaXMudXBkYXRlSW5jbHVkZXMucHVzaChpbmMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhlIGl0ZW0gaXMgZGVsZXRhYmxlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNhbkRlbGV0ZSgpOiBib29sZWFuIHsgcmV0dXJuICF0aGlzLml0ZW0/Lmhhc093blByb3BlcnR5KCdkZWxldGFibGUnKSB8fCB0aGlzLml0ZW1bJ2RlbGV0YWJsZSddOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgc3RlcCBoYXMgY2hhbmdlZC5cclxuXHQgKiBAcGFyYW0gJGV2ZW50IFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVyU3RlcENoYW5nZSgkZXZlbnQ6IFN0ZXBwZXJTZWxlY3Rpb25FdmVudCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZW50aXR5IGhhcyBiZWVuIGxvYWRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckl0ZW1Mb2FkZWQoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCBiZWZvcmUgdGhlIGZvcm0gaGFzIGJ1aWx0LlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZUZvcm1CdWlsZCgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGZvcm0gaGFzIGJ1aWx0LlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVyRm9ybUJ1aWxkKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZW50aXR5IGhhcyBiZWVuIGNyZWF0ZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQmVmb3JlQ3JlYXRlKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZW50aXR5IGhhcyBiZWVuIHVwZGF0ZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQmVmb3JlVXBkYXRlKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBiZWZvcmUgZGF0YSBzdWJtaXRpb25cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYmVmb3JlU3VibWl0KF86IFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgYWZ0ZXIgZGF0YSBzdWJtaXRpb25cclxuXHQgKiBAcGFyYW0gYWN0aW9uIFxyXG5cdCAqIEBwYXJhbSByZXNwb25zZSBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlclN1Ym1pdChhY3Rpb246IFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSwgcmVzcG9uc2U6IGFueSA9IG51bGwpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0dGhpcy5iYWNrKGFjdGlvbik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYWZ0ZXIgcGFnZSByZWxvYWRlZFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBhZnRlclJlbG9hZCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXRlbSA9IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB0aGlzLnF1ZXJ5KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgZm9jdXMgdG8gZmlyc3QgaW5wdXRcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZm9jdXMoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LmZpcnN0ICYmIHRoaXMuaW5wdXQuZmlyc3QubmF0aXZlRWxlbWVudCkge1xyXG5cdFx0XHR0aGlzLmlucHV0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgZWxlbWVudCBlcnJvclxyXG5cdCAqIEBwYXJhbSBuYXRpdmVFbGVtZW50IFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBnZXRFbGVtZW50RXJyb3IobmF0aXZlRWxlbWVudDogYW55KTogc3RyaW5nIHtcclxuXHRcdC8qIEdldCBwYXJhbmV0IGVsZW1lbnQgJ21hdC1mb3JtLWZpZWxkJyAqL1xyXG5cdFx0dmFyIG1hdEZvcm1GaWVsZCA9IG5hdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoJy5tYXQtZm9ybS1maWVsZCcpO1xyXG5cdFx0aWYgKCFtYXRGb3JtRmllbGQpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogR2V0IGNoaWxkIGVsZW1lbnQgJ21hdC1lcnJvcicgKi9cclxuXHRcdHZhciBtYXRFcnJvcnMgPSBtYXRGb3JtRmllbGQucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1lcnJvcicpO1xyXG5cdFx0aWYgKCFtYXRFcnJvcnMpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogR2V0IGNoaWxkIGVsZW1lbnQgJ21hdC1sYWJlbCcgKi9cclxuXHRcdHZhciBtYXRMYWJlbCA9IG1hdEZvcm1GaWVsZC5xdWVyeVNlbGVjdG9yKCdtYXQtbGFiZWwnKTtcclxuXHRcdGlmICghbWF0TGFiZWwpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogR2V0IGVycm9yIHRleHRzICovXHJcblx0XHR2YXIgZXJyb3JzQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtYXRFcnJvcnMpXHJcblx0XHRcdD8uZmlsdGVyKCh4OiBhbnkpID0+IHgudGV4dENvbnRlbnQpXHJcblx0XHRcdD8ubWFwKCh4OiBhbnkpID0+IHgudGV4dENvbnRlbnQpO1xyXG5cclxuXHRcdHJldHVybiBgJyR7bWF0TGFiZWwudGV4dENvbnRlbnR9JzogJHtlcnJvcnNBcnJheT8uam9pbignLCAnKX1gO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzcG9uZHMgdG8gdXNlci1pbml0aWF0ZWQgZXZlbnRzXHJcblx0ICogQHBhcmFtIGV2ZW50IFxyXG5cdCAqL1xyXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG5cdGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHRjYXNlICdzJzpcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHR0aGlzLnNhdmUoU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgJ2QnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmROZXcpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgJ2UnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRFZGl0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ2FuY2VsIHRoZSBmb3JtLCBpZiB0aGUgdXNlciBwcmVzcyB0aGUgRVNDIGtleSAqL1xyXG5cdFx0aWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHtcclxuXHRcdFx0dGhpcy5iYWNrKCk7XHJcblx0XHR9XHJcblx0fVxyXG59Il19
621
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvYmFzZS9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQW1CLFNBQVMsRUFBNEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQUVqRCxXQUFXO0FBRVgsTUFBTSxPQUFnQix3QkFBNEYsU0FBUSxhQUFhO0lBOEp0STs7O09BR0c7SUFDSCxZQUNRLFVBQThCLEVBQzNCLE9BQWlCLEVBQ2pCLEtBQXFCLEVBQ3JCLGlCQUFvQztRQUU5QyxLQUFLLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFMekIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixzQkFBaUIsR0FB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Q0Q7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDWjtJQUNGLENBQUM7O3dJQXJ0Qm9CLHdCQUF3Qjs0SEFBeEIsd0JBQXdCLDRLQWlJbEMsVUFBVTsyRkFqSUEsd0JBQXdCO2tCQUQ3QyxTQUFTOytLQW1DRixJQUFJO3NCQURWLEtBQUs7Z0JBaUdJLFVBQVU7c0JBRG5CLFNBQVM7dUJBQUMsVUFBVTtnQkFPZCxLQUFLO3NCQURYLFlBQVk7dUJBQUMsT0FBTztnQkFzakJyQixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGVwcGVyU2VsZWN0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwLCBOZ0Zvcm0sIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFN0ZXBwZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvdXRpbHMnO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBTYXZlQWN0aW9uIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9zYXZlLWFjdGlvbic7XHJcbmltcG9ydCB7IGdldEZvcm1Hcm91cHMgfSBmcm9tICcuLi8uLi9mb3Jtcy9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkR3JvdXBEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvbW9kZWxzL2Zvcm0tZmllbGQtZ3JvdXAtZGVmaW5pdGlvbic7XHJcbmltcG9ydCB7IEdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaHR0cC9zZXJ2aWNlcy9nZW5lcmljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZU1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vdGFibGUvbW9kZWxzL3RhYmxlLW1lbnUtaXRlbSc7XHJcbmltcG9ydCB7IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2lnZW5lcmljLWZvcm0tYmFzZSc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbi8vIEBkeW5hbWljXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBJRW50aXR5LCBUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+PiBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+IHtcclxuXHQvKipcclxuXHQgKiBUaGUgYWN0aW9uIG9mIHRoZSBmb3JtIChhZGQgfCBlZGl0KVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBBY3Rpb24gPSBlZGl0P1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmUgYWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIFNhdmVBY3Rpb246IHR5cGVvZiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogUm91dGVzXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRTYXZlQW5kQ2xvc2VSb3V0ZTogc3RyaW5nID0gJy4uLy4uLyc7XHJcblx0cHVibGljIGFkZFNhdmVBbmRDbG9zZVJvdXRlOiBzdHJpbmcgPSAnLi4vJztcclxuXHRwdWJsaWMgYWRkU2F2ZUFuZEVkaXRSb3V0ZTogc3RyaW5nID0gJy4uL2VkaXQvJztcclxuXHRwdWJsaWMgYWRkU2F2ZUFuZE5ld1JvdXRlOiBzdHJpbmcgPSAnLi4vYWRkJztcclxuXHRwdWJsaWMgbGlzdFJvdXRlOiBzdHJpbmcgPSB0aGlzLmFkZFNhdmVBbmRDbG9zZVJvdXRlO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgaWQgb2YgdGhlIGl0ZW0gdG8gbG9hZFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpZDogbnVtYmVyIHwgc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgY3VycmVudCBpdGVtIHRvIGFkZCBvciBlZGl0XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgaXRlbTogVEVudGl0eTtcclxuXHJcblx0LyoqXHJcblx0ICogUmVwcmVzZW50cyB0aGUgcmVxdWVzdCBlcnJvcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZXJyb3JzOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXNcclxuXHQgKi9cclxuXHRwdWJsaWMgaW5jbHVkZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZSBpbmNsdWRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGRhdGVJbmNsdWRlczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHBhcmFtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBxdWVyeTogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IGRhdGVcclxuXHQgKi9cclxuXHRwdWJsaWMgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRlICYgdGltZSBtYXNrXHJcblx0ICovXHJcblx0cHVibGljIGRhdGVUaW1lTWFzayA9IFsvWzAtM10vLCAvWzAtOV0vLCAnLicsIC9bMC0xXS8sIC9bMC05XS8sICcuJywgMiwgMCwgL1sxLTJdLywgL1swLTldLywgJyAnLCAvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRlIG1hc2tcclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZU1hc2sgPSBbL1swLTNdLywgL1swLTldLywgJy4nLCAvWzAtMV0vLCAvWzAtOV0vLCAnLicsIDIsIDAsIC9bMS0yXS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaW1lIG1hc2tcclxuXHQgKi9cclxuXHRwdWJsaWMgdGltZU1hc2sgPSBbL1swLTJdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vXTtcclxuXHJcblx0LyoqXHJcblx0ICogQSBwYXR0ZXJuIHRvIHZhbGlkYXRlIGRhdGVzXHJcblx0ICovXHJcblx0cHVibGljIGRhdGVQYXR0ZXJuOiBzdHJpbmcgPSBgKD86KD86MzEoXFxcXC98LXxcXFxcLikoPzowP1sxMzU3OF18MVswMl0pKVxcXFwxfCg/Oig/OjI5fDMwKShcXFxcL3wtfFxcXFwuKSg/OjA/WzEsMy05XXwxWzAtMl0pXFxcXDIpKSg/Oig/OjFbNi05XXxbMi05XVxcXFxkKT9cXFxcZHsyfSkkfF4oPzoyOShcXFxcL3wtfFxcXFwuKTA/MlxcXFwzKD86KD86KD86MVs2LTldfFsyLTldXFxcXGQpPyg/OjBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoPzooPzoxNnxbMjQ2OF1bMDQ4XXxbMzU3OV1bMjZdKTAwKSkpKSR8Xig/OjA/WzEtOV18MVxcXFxkfDJbMC04XSkoXFxcXC98LXxcXFxcLikoPzooPzowP1sxLTldKXwoPzoxWzAtMl0pKVxcXFw0KD86KD86MVs2LTldfFsyLTldXFxcXGQpP1xcXFxkezJ9KWA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBob25lIHByZWZpeCB2YWxpZGF0aW9uIHBhdHRlcm5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGhvbmVQcmVmaXhQYXR0ZXJuOiBzdHJpbmcgPSAnXigwXFxcXGR7Miw2fSkkJztcclxuXHJcblx0LyoqXHJcblx0ICogUGhvbmUgbnVtYmVyIHZhbGlkYXRpb24gcGF0dGVyblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwaG9uZU51bWJlclBhdHRlcm46IHN0cmluZyA9ICdeKFxcXFxkezMsMzB9KSQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBQYXNzd29yZCB2YWxpZGF0aW9uIHBhdHRlcm5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGFzc3dvcmRQYXR0ZXJuOiBzdHJpbmcgPSAnXig/PS4qW2Etel0pKD89LipbQS1aXSkoPz0uKlxcXFxkKSg/PS4qWyRAJCElKj8mXSlbQS1aYS16XFxcXGQkQCQhJSo/Jl17Nix9JztcclxuXHJcblx0LyoqXHJcblx0ICogRGVmYXVsdHMgbW9kdWxlcyBhbmQgdG9vbGJhclxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JPcHRpb25zID0ge1xyXG5cdFx0bW9kdWxlczoge1xyXG5cdFx0XHR0b29sYmFyOiBbXHJcblx0XHRcdFx0Wydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnXSxcclxuXHRcdFx0XHRbeyAnbGlzdCc6ICdvcmRlcmVkJyB9LCB7ICdsaXN0JzogJ2J1bGxldCcgfV0sXHJcblx0XHRcdFx0W3sgJ2luZGVudCc6ICctMScgfSwgeyAnaW5kZW50JzogJysxJyB9XSxcclxuXHRcdFx0XHRbeyAnc2l6ZSc6IFsnc21hbGwnLCBmYWxzZSwgJ2xhcmdlJywgJ2h1Z2UnXSB9XSxcclxuXHRcdFx0XHRbeyAnaGVhZGVyJzogWzEsIDIsIDMsIDQsIDUsIDYsIGZhbHNlXSB9XSxcclxuXHRcdFx0XHRbeyAnY29sb3InOiBuZXcgQXJyYXk8YW55PigpIH0sIHsgJ2JhY2tncm91bmQnOiBuZXcgQXJyYXk8YW55PigpIH1dLFxyXG5cdFx0XHRcdFsnbGluaycsICdpbWFnZSddXHJcblx0XHRcdF0sXHJcblx0XHRcdGNsaXBib2FyZDoge1xyXG5cdFx0XHRcdG1hdGNoVmlzdWFsOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRGVsZXRlJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgdG9vbGJhck1lbnVJdGVtczogVGFibGVNZW51SXRlbVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1hdFN0ZXBwZXIgcmVmXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTdGVwcGVyKVxyXG5cdHByb3RlY3RlZCBtYXRTdGVwcGVyOiBNYXRTdGVwcGVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlZmVyZW5jZSB0byB0aGUgaW5wdXQgZWxlbWVudFxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oJ2ZvY3VzJylcclxuXHRwdWJsaWMgaW5wdXQ6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogRm9ybSBncm91cFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmb3JtOiBOZ0Zvcm0gfCBGb3JtR3JvdXA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgZm9ybSB2YWx1ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhYnN0cmFjdCBnZXQgZm9ybVZhbHVlKCk6IFRFbnRpdHkgfCBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGZpZWxkR3JvdXBzOiBGb3JtRmllbGRHcm91cFtdXHJcblx0ICovXHJcblx0cHVibGljIGZpZWxkR3JvdXBzOiBGb3JtRmllbGRHcm91cERlZmluaXRpb25bXTtcclxuXHJcblx0LyoqXHJcblx0ICogcGFuZWxJZDogc3RyaW5nXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHBhbmVsSWQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHNlcnZpY2UgXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgZW50aXR5Q3RvcjogeyBuZXcoKTogVEVudGl0eSB9LFxyXG5cdFx0cHJvdGVjdGVkIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuXHQpIHtcclxuXHRcdHN1cGVyKHJvdXRlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblx0XHR0aGlzLmxpc3RSb3V0ZSA9IHRoaXMuYWRkU2F2ZUFuZENsb3NlUm91dGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yLCBpbml0aWFsaXppbmcgaW5wdXQgcHJvcGVydGllcywgXHJcblx0ICogYW5kIHRoZSBmaXJzdCBjYWxsIHRvIG5nT25DaGFuZ2VzLlxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHJcblx0XHRpZiAodGhpcy5pdGVtKSB7XHJcblx0XHRcdC8qIFNldCB0aGUgaWQgZnJvbSB0aGUgaXRlbSAqL1xyXG5cdFx0XHR0aGlzLmlkID0gdGhpcy5pdGVtPy5pZDtcclxuXHJcblx0XHRcdC8qIENyZWF0ZSB0aGUgZnJvbSBmaWVsZHMgdXNpbmcgdGhlIGVudGl0eSB0eXBlICovXHJcblx0XHRcdHRoaXMuZmllbGRHcm91cHMgPSBnZXRGb3JtR3JvdXBzKG5ldyB0aGlzLmVudGl0eUN0b3IoKSk7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0LyogR2V0IGlkIGZyb20gdGhlIHVybCAqL1xyXG5cdFx0XHRsZXQgaWQgPSA8YW55PnRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xyXG5cdFx0XHRpZiAoaWQgPiAwKSB7XHJcblx0XHRcdFx0dGhpcy5pZCA9IGlkO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLmlkICYmIHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkKSB7XHJcblx0XHRcdFx0dGhpcy5pZCA9IHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBTZXQgcGFuZWwgSUQgZnJvbSBxdWVyeSAqL1xyXG5cdFx0XHR0aGlzLnBhbmVsSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zPy5wYW5lbElkO1xyXG5cdFx0XHR0aGlzLnN1YnRpdGxlIHx8PSB0aGlzLnJvdXRlLnNuYXBzaG90Py5kYXRhPy5zdWJ0aXRsZTtcclxuXHJcblx0XHRcdC8qIEFzc2lnbiBxdWVyeSBwYXJhbXMgaW50byBxdWVyeSBvYmplY3QgKi9cclxuXHRcdFx0bGV0IGlnbm9yZWRQYXJhbXM6IHN0cmluZ1tdID0gWydpZCcsICdyZXR1cm51cmwnLCAncGFuZWxJZCddO1xyXG5cdFx0XHRPYmplY3QuYXNzaWduKHRoaXMucXVlcnksXHJcblx0XHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcyB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcyksXHJcblx0XHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGE/LnF1ZXJ5IHx8IHt9LCAuLi5pZ25vcmVkUGFyYW1zKSxcclxuXHRcdFx0XHR0aGlzLnNhbml0aXplT2JqZWN0KHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHNvbWUgdmFyaWFibGUgZm9yIGVkaXQgbW9kZSAqL1xyXG5cdFx0aWYgKHRoaXMuaWQpIHtcclxuXHRcdFx0dGhpcy5hY3Rpb24gPSAnZWRpdCc7XHJcblx0XHRcdHRoaXMuaXNFZGl0TW9kZSA9IHRydWU7XHJcblx0XHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5lZGl0U2F2ZUFuZENsb3NlUm91dGU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBURW50aXR5ICovXHJcblx0XHRpZiAoIXRoaXMuaXNFZGl0TW9kZSAmJiAhdGhpcy5mb3JtKSB7XHJcblx0XHRcdHRoaXMuaXRlbSA9IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB0aGlzLml0ZW0gfHwge30sIHRoaXMucXVlcnkgfHwge30pO1xyXG5cdFx0XHR0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBsaXN0IG1uZXUgaXRlbXMgKi9cclxuXHRcdHRoaXMuYWRkVG9vbGJhck1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG5cclxuXHRcdC8qIFNldCBwYWdlIHRpdGxlICovXHJcblx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKTtcclxuXHJcblx0XHQvKiBTZXQgZm9jdXMgKi9cclxuXHRcdHRoaXMuZm9jdXMoKTtcclxuXHJcblx0XHQvKiBcclxuXHRcdCAqIEZvcmNlIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0XHQgKiBoYXZlIGZpbmlzaGVkIHdoZW4gYG5nQWZ0ZXJWaWV3SW5pdGAgaXMgZXhlY3V0ZWRcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG5cdFx0LyogTG9hZCBpdGVtIGZyb20gc2VydmVyICovXHJcblx0XHR0aGlzLmxvYWRJdGVtKCk7XHJcblxyXG5cdFx0LyogTGlzdGVuIGZvciBzdGVwcGVyIHNlbGVjdGlvbiBjaGFuZ2VzICovXHJcblx0XHR0aGlzLm1hdFN0ZXBwZXI/LnNlbGVjdGlvbkNoYW5nZT8uc3Vic2NyaWJlKChldmVudDogU3RlcHBlclNlbGVjdGlvbkV2ZW50KSA9PiB0aGlzLm9uQWZ0ZXJTdGVwQ2hhbmdlKGV2ZW50KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyBhbiBpdGVtIGJ5IElEXHJcblx0ICovXHJcblx0cHVibGljIGxvYWRJdGVtKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHR0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR0aGlzLmxvYWRJdGVtQXN5bmMoKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChfKSA9PiB0aGlzLmlzTG9hZGluZyA9IGZhbHNlLFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgYW4gaXRlbSBieSBJRCBhc3luY2x5XHJcblx0ICovXHJcblx0cHVibGljIGxvYWRJdGVtQXN5bmMoKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XHJcblx0XHRpZiAodGhpcy5pZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5zZXJ2aWNlLmdldCh0aGlzLmlkLCBPYmplY3QuYXNzaWduKHRoaXMucXVlcnkgfHwge30sIHsgaW5jbHVkZXM6IHRoaXMuaW5jbHVkZXMgfSksIHsgJ0Rpc2FibGUtQ2FjaGUnOiAnWWVzJyB9KS5waXBlKFxyXG5cdFx0XHRcdG1hcCh4ID0+IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB4KSksXHJcblx0XHRcdFx0dGFwKHggPT4ge1xyXG5cdFx0XHRcdFx0LyogU2V0IHRoZSBsb2FkZWQgaXRlbSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIDxURW50aXR5PngpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEJ1aWxkIHRoZSBmb3JtICovXHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIFRyaWdnZXIgZXZlbnQgYWZ0ZXJJdGVtTG9hZGVkICovXHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJJdGVtTG9hZGVkKCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgaW50byBkYXRhYmFzZS5cclxuXHQgKiBAcGFyYW0gYWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHNhdmUoYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UsIGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCA9IG51bGwpOiB2b2lkIHtcclxuXHRcdC8qIFZhbGlkYXRlIHRoZSBmb3JtICovXHJcblx0XHR0aGlzLnZhbGlkYXRlRm9ybShmb3JtKTtcclxuXHJcblx0XHQvKiBDaGVjayBpZiB0aGUgZm9ybSBpcyB2YWxpZCAqL1xyXG5cdFx0Zm9ybSA9IHRoaXMuZm9ybSB8fCBmb3JtO1xyXG5cdFx0aWYgKGZvcm0gJiYgIXRoaXMuaXNGb3JtVmFsaWQoZm9ybSkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIElmIHdlJ3JhIGluIGVkaXQgbW9kZSwgdXBkYXRlIHRoZSByZWNvcmQgKi9cclxuXHRcdGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuXHRcdFx0LyogVGhlIGRhdGEgaGFzIG5vdCBjaGFuZ2VkPyAqL1xyXG5cdFx0XHRpZiAoZm9ybSAmJiBmb3JtLnByaXN0aW5lKSB7XHJcblx0XHRcdFx0dGhpcy5vbkFmdGVyU3VibWl0KGFjdGlvbik7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBBIGZsYWcgdG8gcHJldmVudCBzZW5kaW5nIHRoZSBmb3JtIHR3aWNlICovXHJcblx0XHRcdHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG5cclxuXHRcdFx0LyogU2VuZCB0aGUgZGF0YSB0byB0aGUgc2VydmVyICovXHJcblx0XHRcdHRoaXMudXBkYXRlKHsgcGFyYW1zOiBVdGlscy50b0h0dHBQYXJhbXMoeyBpbmNsdWRlczogdGhpcy51cGRhdGVJbmNsdWRlcyB9KSB9KS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0LyogQXBwbHkgc2F2ZWQgZGF0YSB0byB0aGUgZm9ybSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5vbkFmdGVyU3VibWl0KGFjdGlvbiwgcmVzcG9uc2UpO1xyXG5cclxuXHRcdFx0XHRcdC8qIElmIHRoZSB1c2VyIGNsaWNrcyAnYXBwbHknIHJlbG9hZCB0aGUgcGFnZSAqL1xyXG5cdFx0XHRcdFx0aWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRFZGl0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVsb2FkUGFnZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4gdGhpcy5wYXJzZUVycm9ycyhlcnJvcilcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgb25lICovXHJcblx0XHRlbHNlIHtcclxuXHRcdFx0LyogQSBmbGFnIHRvIHByZXZlbnQgc2VuZGluZyB0aGUgZm9ybSB0d2ljZSAqL1xyXG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciAqL1xyXG5cdFx0XHR0aGlzLmNyZWF0ZTxURW50aXR5PigpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmlkID0gcmVzcG9uc2U/LmlkO1xyXG5cdFx0XHRcdFx0dGhpcy5vbkFmdGVyU3VibWl0KGFjdGlvbiwgcmVzcG9uc2UpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChmb3JtKSB7XHJcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgY3RyID0gZm9ybS5jb250cm9sc1trZXldO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0XHRcdFx0XHRjdHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgYW5kIG5hdmlnYXRlcyB0byBlZGl0IHZpZXdcclxuXHQgKi9cclxuXHRwdWJsaWMgYXBwbHkoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNhdmUoU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIHRoZSBjdXJyZW50IHJlY29yZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zaG93RGVsZXRlSXRlbURpYWxvZygpLnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHR0aGlzLnNlcnZpY2UuZGVsZXRlKHRoaXMuaWQsIG51bGwsIHsgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJhY2soKTtcclxuXHRcdFx0XHR9LCBlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmRlYnVnKGVycm9yKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBCdWlsZHMgYSBuZXcgZm9ybVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBidWlsZEZvcm0oKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogVmFsaWRhdGVzIHRoZSBmb3JtXHJcblx0ICogQHBhcmFtIGZvcm0gXHJcblx0ICovXHJcblx0cHVibGljIHZhbGlkYXRlRm9ybShmb3JtOiBOZ0Zvcm0gfCBGb3JtR3JvdXAgPSBudWxsKTogdm9pZCB7XHJcblx0XHR2YXIgZm9ybSA9IGZvcm0gfHwgdGhpcy5mb3JtO1xyXG5cclxuXHRcdC8qIFNldCB0aGUgZm9ybSBhcyBzdWJtaXR0ZWQgKi9cclxuXHRcdGlmIChmb3JtICYmIGZvcm0gaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuXHRcdFx0LyogU2V0IGZvcm0gYXMgc3VibWl0dGVkICovXHJcblx0XHRcdGZvcm1bJ3N1Ym1pdHRlZCddID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFVwZGF0ZSB2YWx1ZSBhbmQgdmFsaWRpdHkgKi9cclxuXHRcdFx0Zm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogUHJpbnQgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiAqL1xyXG5cdFx0dGhpcy5kZWJ1Z0Zvcm0oZm9ybSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBWYWxpZGF0ZXMgdGhlIGZvcm1cclxuXHQgKiBAcGFyYW0gZm9ybSBcclxuXHQgKi9cclxuXHRwdWJsaWMgaXNGb3JtVmFsaWQoZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwID0gbnVsbCk6IGJvb2xlYW4ge1xyXG5cdFx0LyogUHJpbnQgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiAqL1xyXG5cdFx0dGhpcy5kZWJ1Z0Zvcm0oZm9ybSk7XHJcblxyXG5cdFx0LyogSWYgdGhlIGZvcm0gaXN0IG5vdCB2YWxpZC4uICovXHJcblx0XHRpZiAoIWZvcm0udmFsaWQpIHtcclxuXHRcdFx0LyogTWFyayBpbnZhbGlkIGNvbnRyb2xzIGFzIGRpcnR0eSBhbmQgdG91Y2hlZCAqL1xyXG5cdFx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKVxyXG5cdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybS5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHQuZm9yRWFjaChrZXkgPT4gdGhpcy5pbnZhbGlkYXRlQ29udHJvbChmb3JtLmNvbnRyb2xzW2tleV0pKTtcclxuXHJcblx0XHRcdC8qIFNob3cgZXJyb3IgbWVzc2FnZXMgKi9cclxuXHRcdFx0KGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHQvKiBXYWl0IHVudGlsICdtYXQtZXJyb3InIGRpc3BsYXllZCAqL1xyXG5cdFx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKHkgPT4gc2V0VGltZW91dCh5LCAyMDApKTtcclxuXHJcblx0XHRcdFx0LyogUGFyc2UgdGhlIGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdFx0dmFyIGVycm9ycyA9IEFycmF5PHN0cmluZz4oKTtcclxuXHRcdFx0XHRPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKVxyXG5cdFx0XHRcdFx0LmZpbHRlcih4ID0+ICFmb3JtLmNvbnRyb2xzW3hdLnZhbGlkKVxyXG5cdFx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0XHRcdFx0LyogR2V0IGVycm9yIHRleHQgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGVycm9yID0gdGhpcy5nZXRFbGVtZW50RXJyb3IoKGZvcm0uY29udHJvbHNba2V5XSBhcyBhbnkpPy5uYXRpdmVFbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0aWYgKGVycm9yKSB7XHJcblx0XHRcdFx0XHRcdFx0ZXJyb3JzLnB1c2goZXJyb3IpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0LyogQnVpbGQgZXJyb3IgbWVzc2FnZSAqL1xyXG5cdFx0XHRcdHZhciBtZXNzYWdlID0gZXJyb3JzLmxlbmd0aCA/IGVycm9ycy5zbGljZSgwLCAzKS5qb2luKCdcXG4nKSA6ICRsb2NhbGl6ZWA6QEBzbmFja2Jhci5lcnJvci5yZXF1aXJlZC1maWVsZHM6QWxsIGZpZWxkcyBtYXJrZWQgd2l0aCBhbiBhc3RlcmlzayAoKikgYXJlIHJlcXVpcmVkLmA7XHJcblxyXG5cdFx0XHRcdC8qIHNob3cgYSBub3RpY2UgKi9cclxuXHRcdFx0XHR0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKG1lc3NhZ2UsICdPaycsIHsgZHVyYXRpb246IDMwMDAsIHBhbmVsQ2xhc3M6IFsnZXJyb3InXSB9KTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0pKCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXNldHMgZm9ybSBjb250cm9sc1xyXG5cdCAqIEBwYXJhbSBmb3JtIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZXNldEZvcm0oZm9ybTogTmdGb3JtKTogdm9pZCB7XHJcblx0XHRpZiAoIWZvcm0pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0bGV0IGN0ciA9IGZvcm0uY29udHJvbHNba2V5XTtcclxuXHRcdFx0Y3RyLm1hcmtBc1ByaXN0aW5lKCk7XHJcblx0XHRcdGN0ci5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0Y3RyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW52YWxpZGF0ZSBjb250cm9scyByZWN1cnNpdmVseVxyXG5cdCAqIEBwYXJhbSBjb250cm9sIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbnZhbGlkYXRlQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIHRoZSBjb250cm9sIGFnYWluc3QgbnVsbCAqL1xyXG5cdFx0aWYgKCFjb250cm9sKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBDaGVjayBpZiB0aGUgY29udHJvbCBpcyBhIGdyb3VwICovXHJcblx0XHRsZXQgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcblx0XHRpZiAoZm9ybUdyb3VwPy5jb250cm9scykge1xyXG5cdFx0XHRPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpXHJcblx0XHRcdFx0LmZpbHRlcih4ID0+ICFmb3JtR3JvdXAuY29udHJvbHNbeF0udmFsaWQpXHJcblx0XHRcdFx0LmZvckVhY2goeCA9PiB0aGlzLmludmFsaWRhdGVDb250cm9sKGZvcm1Hcm91cC5jb250cm9sc1t4XSkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG5cdFx0XHRjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIGZvcm0gZXJyb3JzXHJcblx0ICogQHBhcmFtIGZvcm0gXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGRlYnVnRm9ybShmb3JtOiBOZ0Zvcm0gfCBGb3JtR3JvdXAgPSBudWxsKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnRm9ybTonLCBmb3JtKTtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBmb3JtLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xyXG5cdFx0XHRcdGlmIChjb250cm9sRXJyb3JzICE9IG51bGwpIHtcclxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKGNvbnRyb2xFcnJvcnMpLmZvckVhY2goa2V5RXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnS2V5IGNvbnRyb2w6ICcgKyBrZXkgKyAnLCBrZXlFcnJvcjogJyArIGtleUVycm9yICsgJywgZXJyIHZhbHVlOiAnLCBjb250cm9sRXJyb3JzW2tleUVycm9yXSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHRvb2xiYXIgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBhZGRUb29sYmFyTWVudUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0LyogQWRkICdEZWxldGUnIG1lbnUgaXRlbSAqL1xyXG5cdFx0aWYgKHRoaXMuZGVsZXRhYmxlKSB7XHJcblx0XHRcdHRoaXMudG9vbGJhck1lbnVJdGVtcy5wdXNoKHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0XHRcdGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcblx0XHRcdFx0aWNvbkNsYXNzOiAndGMtb3JhbmdlLTgwMCcsXHJcblx0XHRcdFx0ZXZlbnQ6ICgpID0+IHRoaXMuZGVsZXRlKCksXHJcblx0XHRcdFx0ZGlzYWJsZTogKCkgPT4gIXRoaXMuaWQsXHJcblx0XHRcdFx0aGlkZTogKCkgPT4gIXRoaXMuY2FuRGVsZXRlKClcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyB0aGUgcHJldmlvdXMgVVJMIGluIHRoZSBoaXN0b3J5IGxpc3QuXHJcblx0ICogQHBhcmFtIGFjdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBiYWNrKGFjdGlvbjogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKTogdm9pZCB7XHJcblx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlICYmIHRoaXMucmV0dXJuVXJsKSB7XHJcblx0XHRcdHRoaXMubmF2aWdhdGVUb1JldHVyblVybCgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpIHtcclxuXHRcdFx0XHRcdHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpIHtcclxuXHRcdFx0XHRcdHRoaXMucmVsb2FkUGFnZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PSBTYXZlQWN0aW9uLlNhdmVBbmRFZGl0ICYmIDxudW1iZXI+dGhpcy5pZCA+IDApIHtcclxuXHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLmFkZFNhdmVBbmRFZGl0Um91dGV9JHt0aGlzLmlkfWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kTmV3KSB7XHJcblx0XHRcdFx0XHR0aGlzLmFmdGVyUmVsb2FkKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIHJldHVybiB1cmxcclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZXRSZXR1cm5VcmwocmV0dXJuVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHN1cGVyLnNldFJldHVyblVybChyZXR1cm5VcmwpO1xyXG5cdFx0dGhpcy5saXN0Um91dGUgPSB0aGlzLnJldHVyblVybCB8fCB0aGlzLmxpc3RSb3V0ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFRFbnRpdHlcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbmV3SW5zdGFuY2UoKTogVEVudGl0eSB7XHJcblx0XHRyZXR1cm4gbmV3IHRoaXMuZW50aXR5Q3RvcigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjcmVhdGU8VEVudGl0eT4oaHR0cE9wdGlvbnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdHRoaXMub25CZWZvcmVDcmVhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzLnNlcnZpY2UuY3JlYXRlPFRFbnRpdHk+KHRoaXMuZm9ybVZhbHVlLCBudWxsLCBPYmplY3QuYXNzaWduKGh0dHBPcHRpb25zIHx8IHt9LCB7IGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSB9KSwgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB1cGRhdGUoaHR0cE9wdGlvbnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcclxuXHRcdHRoaXMub25CZWZvcmVVcGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzLnNlcnZpY2UudXBkYXRlKHRoaXMuaWQsIE9iamVjdC5hc3NpZ24odGhpcy5pdGVtLCB0aGlzLmZvcm1WYWx1ZSksIG51bGwsIE9iamVjdC5hc3NpZ24oaHR0cE9wdGlvbnMgfHwge30sIHsgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pLCB9KSwgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqIEBwYXJhbSBpbmMgXHJcblx0ICogQHBhcmFtIHVwZGF0ZSBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5jbHVkZShpbmM6IHN0cmluZywgdXBkYXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHRcdHRoaXMuaW5jbHVkZXMucHVzaChpbmMpO1xyXG5cdFx0aWYgKHVwZGF0ZSkge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUluY2x1ZGVzLnB1c2goaW5jKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRlbGV0YWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EZWxldGUoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5pdGVtPy5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRhYmxlJykgfHwgdGhpcy5pdGVtWydkZWxldGFibGUnXTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHN0ZXAgaGFzIGNoYW5nZWQuXHJcblx0ICogQHBhcmFtICRldmVudCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlclN0ZXBDaGFuZ2UoJGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBsb2FkZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJJdGVtTG9hZGVkKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgYmVmb3JlIHRoZSBmb3JtIGhhcyBidWlsdC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25CZWZvcmVGb3JtQnVpbGQoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBmb3JtIGhhcyBidWlsdC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckZvcm1CdWlsZCgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiB1cGRhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZVVwZGF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYmVmb3JlIGRhdGEgc3VibWl0aW9uXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJlZm9yZVN1Ym1pdChfOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIGFmdGVyIGRhdGEgc3VibWl0aW9uXHJcblx0ICogQHBhcmFtIGFjdGlvbiBcclxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJTdWJtaXQoYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UsIHJlc3BvbnNlOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdHRoaXMuYmFjayhhY3Rpb24pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsbGVkIGFmdGVyIHBhZ2UgcmVsb2FkZWRcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWZ0ZXJSZWxvYWQoKTogdm9pZCB7XHJcblx0XHR0aGlzLml0ZW0gPSBPYmplY3QuYXNzaWduKHRoaXMubmV3SW5zdGFuY2UoKSwgdGhpcy5xdWVyeSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIGZvY3VzIHRvIGZpcnN0IGlucHV0XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGZvY3VzKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5maXJzdCAmJiB0aGlzLmlucHV0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0dGhpcy5pbnB1dC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGVsZW1lbnQgZXJyb3JcclxuXHQgKiBAcGFyYW0gbmF0aXZlRWxlbWVudCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZ2V0RWxlbWVudEVycm9yKG5hdGl2ZUVsZW1lbnQ6IGFueSk6IHN0cmluZyB7XHJcblx0XHQvKiBHZXQgcGFyYW5ldCBlbGVtZW50ICdtYXQtZm9ybS1maWVsZCcgKi9cclxuXHRcdHZhciBtYXRGb3JtRmllbGQgPSBuYXRpdmVFbGVtZW50Py5jbG9zZXN0KCcubWF0LWZvcm0tZmllbGQnKTtcclxuXHRcdGlmICghbWF0Rm9ybUZpZWxkKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCBjaGlsZCBlbGVtZW50ICdtYXQtZXJyb3InICovXHJcblx0XHR2YXIgbWF0RXJyb3JzID0gbWF0Rm9ybUZpZWxkLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtZXJyb3InKTtcclxuXHRcdGlmICghbWF0RXJyb3JzKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCBjaGlsZCBlbGVtZW50ICdtYXQtbGFiZWwnICovXHJcblx0XHR2YXIgbWF0TGFiZWwgPSBtYXRGb3JtRmllbGQucXVlcnlTZWxlY3RvcignbWF0LWxhYmVsJyk7XHJcblx0XHRpZiAoIW1hdExhYmVsKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCBlcnJvciB0ZXh0cyAqL1xyXG5cdFx0dmFyIGVycm9yc0FycmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWF0RXJyb3JzKVxyXG5cdFx0XHQ/LmZpbHRlcigoeDogYW55KSA9PiB4LnRleHRDb250ZW50KVxyXG5cdFx0XHQ/Lm1hcCgoeDogYW55KSA9PiB4LnRleHRDb250ZW50KTtcclxuXHJcblx0XHRyZXR1cm4gYCcke21hdExhYmVsLnRleHRDb250ZW50fSc6ICR7ZXJyb3JzQXJyYXk/LmpvaW4oJywgJyl9YDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlc3BvbmRzIHRvIHVzZXItaW5pdGlhdGVkIGV2ZW50c1xyXG5cdCAqIEBwYXJhbSBldmVudCBcclxuXHQgKi9cclxuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuXHRoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcblx0XHRpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XHJcblx0XHRcdHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcblx0XHRcdFx0Y2FzZSAncyc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlICdkJzpcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHR0aGlzLnNhdmUoU2F2ZUFjdGlvbi5TYXZlQW5kTmV3KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlICdlJzpcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHR0aGlzLnNhdmUoU2F2ZUFjdGlvbi5TYXZlQW5kRWRpdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENhbmNlbCB0aGUgZm9ybSwgaWYgdGhlIHVzZXIgcHJlc3MgdGhlIEVTQyBrZXkgKi9cclxuXHRcdGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7XHJcblx0XHRcdHRoaXMuYmFjaygpO1xyXG5cdFx0fVxyXG5cdH1cclxufSJdfQ==
@@ -6734,7 +6734,7 @@ class GenericFormBaseComponent extends BaseComponent {
6734
6734
  */
6735
6735
  save(action = SaveAction.SaveAndClose, form = null) {
6736
6736
  /* Validate the form */
6737
- this.validateForm();
6737
+ this.validateForm(form);
6738
6738
  /* Check if the form is valid */
6739
6739
  form = this.form || form;
6740
6740
  if (form && !this.isFormValid(form)) {