@esfaenza/core 15.2.252 → 15.2.254

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/domain/tokens.d.ts +2 -0
  2. package/esm2020/components/es-image-cropper/es-image-cropper.component.mjs +1 -1
  3. package/esm2020/components/user_infos/user_infos.component.mjs +6 -4
  4. package/esm2020/domain/tokens.mjs +3 -1
  5. package/esm2020/lib/app.component.mjs +12 -8
  6. package/esm2020/lib/core.module.mjs +6 -4
  7. package/esm2020/services/classes/app.routeguard.mjs +4 -3
  8. package/esm2020/services/classes/app.session.mjs +13 -5
  9. package/esm2020/services/classes/app.state.mjs +17 -7
  10. package/esm2020/services/classes/preferences/user/app.userpreferences.base.mjs +6 -3
  11. package/fesm2015/esfaenza-core-components.mjs +6 -4
  12. package/fesm2015/esfaenza-core-components.mjs.map +1 -1
  13. package/fesm2015/esfaenza-core-domain.mjs +3 -1
  14. package/fesm2015/esfaenza-core-domain.mjs.map +1 -1
  15. package/fesm2015/esfaenza-core-services.mjs +35 -13
  16. package/fesm2015/esfaenza-core-services.mjs.map +1 -1
  17. package/fesm2015/esfaenza-core.mjs +17 -10
  18. package/fesm2015/esfaenza-core.mjs.map +1 -1
  19. package/fesm2020/esfaenza-core-components.mjs +6 -4
  20. package/fesm2020/esfaenza-core-components.mjs.map +1 -1
  21. package/fesm2020/esfaenza-core-domain.mjs +3 -1
  22. package/fesm2020/esfaenza-core-domain.mjs.map +1 -1
  23. package/fesm2020/esfaenza-core-services.mjs +31 -13
  24. package/fesm2020/esfaenza-core-services.mjs.map +1 -1
  25. package/fesm2020/esfaenza-core.mjs +15 -10
  26. package/fesm2020/esfaenza-core.mjs.map +1 -1
  27. package/lib/app.component.d.ts +1 -1
  28. package/lib/core.module.d.ts +1 -0
  29. package/package.json +12 -12
  30. package/services/classes/app.session.d.ts +2 -1
  31. package/services/classes/app.state.d.ts +2 -1
@@ -14,6 +14,8 @@ export declare const MENU_LOCALIZATION: InjectionToken<Type<LocalizationService>
14
14
  export declare const MENU: InjectionToken<ApplicationMenu[]>;
15
15
  /** Token che indica se il servizio di autenticazione deve utilizzare un token finto */
16
16
  export declare const USE_FAKE_ACCESS_TOKEN: InjectionToken<boolean>;
17
+ /** Token che indica se il servizio di autenticazione deve funzionare in anonimo lato Frontend. Dev'essere utilizzato insieme al tag "Auth" in code behind */
18
+ export declare const ALLOW_ANONYMOUS: InjectionToken<boolean>;
17
19
  /** Token che indica i componenti di estensione da aggiungere alla navbar. Verranno bootstrappati in maniera dinamica */
18
20
  export declare const NAVBAR_EXTENSIONS: InjectionToken<Type<any>[]>;
19
21
  /** Token che identifica se utilizzare la versione vecchia dell'url di auth (${myconfig.AUTH_URL}/login/form?client=${myconfig.CLIENT_NAME}) invece che la nuova (${myconfig.AUTH_URL}/login;client=${myconfig.CLIENT_NAME}) */
@@ -71,7 +71,7 @@ export class EsImageCropperComponent {
71
71
  }
72
72
  }
73
73
  EsImageCropperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EsImageCropperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
74
- EsImageCropperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EsImageCropperComponent, isStandalone: true, selector: "es-image-cropper", inputs: { Height: "Height", Width: "Width" }, ngImport: i0, template: "<div *ngIf=\"ProfileImage?.nativefiles?.length > 0\" [style.width.px]=\"Width\">\r\n <div class=\"d-flex\">\r\n <button (click)=\"onRotateLeft()\" class=\"btn btn-primary\"><i class=\"fa fa-undo\"></i></button>\r\n <button (click)=\"onRotateRight()\" class=\"btn btn-primary\"><i class=\"fa fa-repeat\"></i></button>\r\n <button (click)=\"onFlipHorizontal()\" class=\"btn btn-primary\"><i class=\"fa fa-arrows-h\"></i></button>\r\n <button (click)=\"onFlipVertical()\" class=\"btn btn-primary\"><i class=\"fa fa-arrows-v\"></i></button>\r\n <button (click)=\"onZoomIn()\" class=\"btn btn-primary\"><i class=\"fa fa-search-plus\"></i></button>\r\n <button (click)=\"onZoomOut()\" class=\"btn btn-primary\"><i class=\"fa fa-search-minus\"></i></button>\r\n <button (click)=\"onResetImage()\" class=\"btn btn-danger\" style=\"margin-left: auto; margin-right: 0px;\"><i class=\"fa fa-times\"></i></button>\r\n </div>\r\n</div>\r\n<div class=\"app-margin-top-10\" [style.max-height.px]=\"Height\" [style.width.px]=\"Width\">\r\n <form-file *ngIf=\"!(ProfileImage?.nativefiles?.length > 0)\" [LabelInputRatio]=\"'0 12'\" [FancyMode]=\"true\" [(ngModel)]=\"ProfileImage\" name=\"imageToCrop\"></form-file>\r\n <ng-container *ngIf=\"ProfileImage?.nativefiles?.length > 0\">\r\n <image-cropper style=\"--cropper-outline-color: rgba(0,0,0)\"\r\n [backgroundColor]=\"'#91a3b0'\"\r\n [imageFile]=\"ProfileImage.nativefiles[0]\"\r\n [aspectRatio]=\"4 / 3\"\r\n [maintainAspectRatio]=\"true\"\r\n [containWithinAspectRatio]=\"true\"\r\n [cropperStaticWidth]=\"320\"\r\n [cropperStaticHeight]=\"320\"\r\n [onlyScaleDown]=\"true\"\r\n [roundCropper]=\"true\"\r\n [canvasRotation]=\"canvasRotation\"\r\n [allowMoveImage]=\"true\"\r\n [(transform)]=\"transform\"\r\n (imageCropped)=\"onImageCropped($event)\">\r\n </image-cropper>\r\n </ng-container>\r\n</div>", styles: [".btn{width:40px;margin-right:10px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ImageCropperModule }, { kind: "component", type: i1.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "cropperFrameAriaLabel", "output", "format", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "cropper", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormsAndValidationsModule }, { kind: "component", type: i3.FormFileComponent, selector: "form-file", inputs: ["Multiple", "AllowDownload", "MaxSize", "FancyMode"] }] });
74
+ EsImageCropperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EsImageCropperComponent, isStandalone: true, selector: "es-image-cropper", inputs: { Height: "Height", Width: "Width" }, ngImport: i0, template: "<div *ngIf=\"ProfileImage?.nativefiles?.length > 0\" [style.width.px]=\"Width\">\r\n <div class=\"d-flex\">\r\n <button (click)=\"onRotateLeft()\" class=\"btn btn-primary\"><i class=\"fa fa-undo\"></i></button>\r\n <button (click)=\"onRotateRight()\" class=\"btn btn-primary\"><i class=\"fa fa-repeat\"></i></button>\r\n <button (click)=\"onFlipHorizontal()\" class=\"btn btn-primary\"><i class=\"fa fa-arrows-h\"></i></button>\r\n <button (click)=\"onFlipVertical()\" class=\"btn btn-primary\"><i class=\"fa fa-arrows-v\"></i></button>\r\n <button (click)=\"onZoomIn()\" class=\"btn btn-primary\"><i class=\"fa fa-search-plus\"></i></button>\r\n <button (click)=\"onZoomOut()\" class=\"btn btn-primary\"><i class=\"fa fa-search-minus\"></i></button>\r\n <button (click)=\"onResetImage()\" class=\"btn btn-danger\" style=\"margin-left: auto; margin-right: 0px;\"><i class=\"fa fa-times\"></i></button>\r\n </div>\r\n</div>\r\n<div class=\"app-margin-top-10\" [style.max-height.px]=\"Height\" [style.width.px]=\"Width\">\r\n <form-file *ngIf=\"!(ProfileImage?.nativefiles?.length > 0)\" [LabelInputRatio]=\"'0 12'\" [FancyMode]=\"true\" [(ngModel)]=\"ProfileImage\" name=\"imageToCrop\"></form-file>\r\n <ng-container *ngIf=\"ProfileImage?.nativefiles?.length > 0\">\r\n <image-cropper style=\"--cropper-outline-color: rgba(0,0,0)\"\r\n [backgroundColor]=\"'#91a3b0'\"\r\n [imageFile]=\"ProfileImage.nativefiles[0]\"\r\n [aspectRatio]=\"4 / 3\"\r\n [maintainAspectRatio]=\"true\"\r\n [containWithinAspectRatio]=\"true\"\r\n [cropperStaticWidth]=\"320\"\r\n [cropperStaticHeight]=\"320\"\r\n [onlyScaleDown]=\"true\"\r\n [roundCropper]=\"true\"\r\n [canvasRotation]=\"canvasRotation\"\r\n [allowMoveImage]=\"true\"\r\n [(transform)]=\"transform\"\r\n (imageCropped)=\"onImageCropped($event)\">\r\n </image-cropper>\r\n </ng-container>\r\n</div>", styles: [".btn{width:40px;margin-right:10px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ImageCropperModule }, { kind: "component", type: i1.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "cropperFrameAriaLabel", "output", "format", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "cropper", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormsAndValidationsModule }, { kind: "component", type: i3.FormFileComponent, selector: "form-file", inputs: ["Multiple", "AllowDownload", "MaxSize", "FancyMode", "ReadFile"] }] });
75
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EsImageCropperComponent, decorators: [{
76
76
  type: Component,
77
77
  args: [{ selector: "es-image-cropper", standalone: true, imports: [NgIf, ImageCropperModule, FormsModule, FormsAndValidationsModule], template: "<div *ngIf=\"ProfileImage?.nativefiles?.length > 0\" [style.width.px]=\"Width\">\r\n <div class=\"d-flex\">\r\n <button (click)=\"onRotateLeft()\" class=\"btn btn-primary\"><i class=\"fa fa-undo\"></i></button>\r\n <button (click)=\"onRotateRight()\" class=\"btn btn-primary\"><i class=\"fa fa-repeat\"></i></button>\r\n <button (click)=\"onFlipHorizontal()\" class=\"btn btn-primary\"><i class=\"fa fa-arrows-h\"></i></button>\r\n <button (click)=\"onFlipVertical()\" class=\"btn btn-primary\"><i class=\"fa fa-arrows-v\"></i></button>\r\n <button (click)=\"onZoomIn()\" class=\"btn btn-primary\"><i class=\"fa fa-search-plus\"></i></button>\r\n <button (click)=\"onZoomOut()\" class=\"btn btn-primary\"><i class=\"fa fa-search-minus\"></i></button>\r\n <button (click)=\"onResetImage()\" class=\"btn btn-danger\" style=\"margin-left: auto; margin-right: 0px;\"><i class=\"fa fa-times\"></i></button>\r\n </div>\r\n</div>\r\n<div class=\"app-margin-top-10\" [style.max-height.px]=\"Height\" [style.width.px]=\"Width\">\r\n <form-file *ngIf=\"!(ProfileImage?.nativefiles?.length > 0)\" [LabelInputRatio]=\"'0 12'\" [FancyMode]=\"true\" [(ngModel)]=\"ProfileImage\" name=\"imageToCrop\"></form-file>\r\n <ng-container *ngIf=\"ProfileImage?.nativefiles?.length > 0\">\r\n <image-cropper style=\"--cropper-outline-color: rgba(0,0,0)\"\r\n [backgroundColor]=\"'#91a3b0'\"\r\n [imageFile]=\"ProfileImage.nativefiles[0]\"\r\n [aspectRatio]=\"4 / 3\"\r\n [maintainAspectRatio]=\"true\"\r\n [containWithinAspectRatio]=\"true\"\r\n [cropperStaticWidth]=\"320\"\r\n [cropperStaticHeight]=\"320\"\r\n [onlyScaleDown]=\"true\"\r\n [roundCropper]=\"true\"\r\n [canvasRotation]=\"canvasRotation\"\r\n [allowMoveImage]=\"true\"\r\n [(transform)]=\"transform\"\r\n (imageCropped)=\"onImageCropped($event)\">\r\n </image-cropper>\r\n </ng-container>\r\n</div>", styles: [".btn{width:40px;margin-right:10px}\n"] }]
@@ -45,9 +45,11 @@ export class UserInfosComponent extends BaseComponent {
45
45
  async getAccountDetails() {
46
46
  // Recupero le informazioni Account partendo dalla identity
47
47
  let identity = this.tks.getJaceIdentity();
48
- this.AccountRoles = identity.Roles;
49
- this.AccountPermissions = identity.Permissions;
50
- this.AccountDetails = await this.profile.getAccountProfile();
48
+ if (identity) {
49
+ this.AccountRoles = identity.Roles;
50
+ this.AccountPermissions = identity.Permissions;
51
+ this.AccountDetails = await this.profile.getAccountProfile();
52
+ }
51
53
  }
52
54
  onShowAccountRoles() {
53
55
  this.dlgShowAccountRoles.show();
@@ -143,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
143
145
  type: ViewChild,
144
146
  args: ["dlgUpdatePassword"]
145
147
  }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcl9pbmZvcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3VzZXJfaW5mb3MvdXNlcl9pbmZvcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3VzZXJfaW5mb3MvdXNlcl9pbmZvcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFNBQVMsRUFBWSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQWtDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEYsU0FBUztBQUNULE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBVyx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUl0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FB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QUF1Qjt3QkFDdkIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3FCQUNuQjs4U0EwQmlDLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBUU0sdUJBQXVCO3NCQUE1RCxTQUFTO3VCQUFDLHlCQUF5QjtnQkFDVCxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBbUNlLHlCQUF5QjtzQkFBaEUsU0FBUzt1QkFBQywyQkFBMkI7Z0JBcUJOLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSwgRXh0ZW5zaW9uc01vZHVsZSwgTWVzc2FnZVNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbk1vZHVsZSwgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gQ2xhc3NpXHJcbmltcG9ydCB7IFVwZGF0ZVBhc3N3b3JkRHRvLCBVc2VyQWNjb3VudCB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIjtcclxuaW1wb3J0IHsgQXBwRmlsZSwgRm9ybXNBbmRWYWxpZGF0aW9uc01vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvZm9ybXMtYW5kLXZhbGlkYXRpb25zXCI7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tIFwiLi4vYmFzZS9iYXNlLmNvbXBvbmVudFwiXHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQXBwU3RhdGUsIFRva2VuU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBVc2VySW5mb0NvbXBvbmVudExvYyB9IGZyb20gXCIuL3VzZXJfaW5mb3MuY29tcG9uZW50LmxvY1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sTW9kdWxlIH0gZnJvbSBcIkBlc2ZhZW56YS9hY2Nlc3MtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcclxuaW1wb3J0IHsgRXNNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuLi9lcy1tb2RhbC9lcy1tb2RhbC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRXNNb2RhbEhlYWRDb21wb25lbnQgfSBmcm9tIFwiLi4vZXMtbW9kYWwvZXMtbW9kYWwtaGVhZC9lcy1tb2RhbC1oZWFkLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBMYWJlbGVkU3BhbkNvbXBvbmVudCB9IGZyb20gXCIuLi9sYWJlbGVkLXNwYW4vbGFiZWxlZC1zcGFuLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBFc0ltYWdlQ3JvcHBlckNvbXBvbmVudCB9IGZyb20gXCIuLi9wdWJsaWMtYXBpXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInVzZXItaW5mb3NcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInVzZXJfaW5mb3MuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi91c2VyX2luZm9zLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IFVzZXJJbmZvQ29tcG9uZW50TG9jIH1dLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBGb3Jtc01vZHVsZSwgXHJcbiAgICAgICAgRm9ybXNBbmRWYWxpZGF0aW9uc01vZHVsZSwgXHJcbiAgICAgICAgTmdJZixcclxuICAgICAgICBOZ0ZvcixcclxuICAgICAgICBMb2NhbGl6YXRpb25Nb2R1bGUsIFxyXG4gICAgICAgIEVzTW9kYWxDb21wb25lbnQsIFxyXG4gICAgICAgIEVzTW9kYWxIZWFkQ29tcG9uZW50LFxyXG4gICAgICAgIEVzSW1hZ2VDcm9wcGVyQ29tcG9uZW50LCBcclxuICAgICAgICBMYWJlbGVkU3BhbkNvbXBvbmVudCxcclxuICAgICAgICBFeHRlbnNpb25zTW9kdWxlLFxyXG4gICAgICAgIEFjY2Vzc0NvbnRyb2xNb2R1bGUsXHJcbiAgICAgICAgTWF0VG9vbHRpcE1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlckluZm9zQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgQWNjb3VudERldGFpbHM6IFVzZXJBY2NvdW50O1xyXG4gICAgcHVibGljIEFjY291bnRSb2xlczogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgQWNjb3VudFBlcm1pc3Npb25zOiBzdHJpbmdbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluajogSW5qZWN0b3IsIHByaXZhdGUgdGtzOiBUb2tlblNlcnZpY2UsIHB1YmxpYyBtc2dFeHRzOiBNZXNzYWdlU2VydmljZSwgcHVibGljIGV4cEV4dHM6IEV4cG9ydFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHB1YmxpYyBsYzogTG9jYWxpemF0aW9uU2VydmljZSwgcHVibGljIF9zdGF0ZTogQXBwU3RhdGUsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgcHJvZmlsZTogVXNlclByZWZlcmVuY2VzU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKGluaik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBY2NvdW50RGV0YWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRBY2NvdW50RGV0YWlscygpIHtcclxuICAgICAgICAvLyBSZWN1cGVybyBsZSBpbmZvcm1hemlvbmkgQWNjb3VudCBwYXJ0ZW5kbyBkYWxsYSBpZGVudGl0eVxyXG4gICAgICAgIGxldCBpZGVudGl0eSA9IHRoaXMudGtzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgIHRoaXMuQWNjb3VudFJvbGVzID0gaWRlbnRpdHkuUm9sZXM7XHJcbiAgICAgICAgdGhpcy5BY2NvdW50UGVybWlzc2lvbnMgPSBpZGVudGl0eS5QZXJtaXNzaW9ucztcclxuICAgICAgICB0aGlzLkFjY291bnREZXRhaWxzID0gYXdhaXQgdGhpcy5wcm9maWxlLmdldEFjY291bnRQcm9maWxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8jcmVnaW9uIFNob3cgUm9sZXMgYW5kIFBlcm1pc3Npb25zXHJcbiAgICBAVmlld0NoaWxkKFwiZGxnU2hvd0FjY291bnRSb2xlc1wiKSBkbGdTaG93QWNjb3VudFJvbGVzOiBFc01vZGFsQ29tcG9uZW50O1xyXG5cclxuICAgIG9uU2hvd0FjY291bnRSb2xlcygpIHtcclxuICAgICAgICB0aGlzLmRsZ1Nob3dBY2NvdW50Um9sZXMuc2hvdygpO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIFVwZGF0ZSBQcm9maWxlIFBpY3R1cmVcclxuICAgIEBWaWV3Q2hpbGQoXCJkbGdVcGRhdGVQcm9maWxlUGljdHVyZVwiKSBkbGdVcGRhdGVQcm9maWxlUGljdHVyZTogRXNNb2RhbENvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2ltYWdlQ3JvcHBlcicpIGltYWdlQ3JvcHBlcjogRXNJbWFnZUNyb3BwZXJDb21wb25lbnQ7XHJcbiAgICBwdWJsaWMgVXBkYXRlUHJvZmlsZVBpY3R1cmVEVE86IHsgaW1hZ2U6IEFwcEZpbGUgfSA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIG9uVXBkYXRlUHJvZmlsZVBpY3R1cmUoKSB7XHJcbiAgICAgICAgdGhpcy5VcGRhdGVQcm9maWxlUGljdHVyZURUTyA9IG51bGw7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5VcGRhdGVQcm9maWxlUGljdHVyZURUTyA9IHsgaW1hZ2U6IG51bGwgfTtcclxuICAgICAgICAgICAgdGhpcy5kbGdVcGRhdGVQcm9maWxlUGljdHVyZS5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGRvVXBkYXRlUHJvZmlsZVBpY3R1cmUoKSB7XHJcbiAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMucHJvZmlsZS5kb1VwZGF0ZVByb2ZpbGVQaWN0dXJlKG5ldyBGaWxlKFt0aGlzLmltYWdlQ3JvcHBlci5PdXRwdXRJbWFnZV0sIFwicHJvZmlsZS5wbmdcIikpO1xyXG4gICAgICAgIHRoaXMubXNnRXh0cy5tYW5hZ2VDYWxsUmVzdWx0UmVzcG9uc2UocmVzLCBcIk1vZGlmaWNhIGVzZWd1aXRhIGNvbiBTdWNjZXNzb1wiLCBcIkVycm9yaSBuZWxsYSBtb2RpZmljYVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGxnVXBkYXRlUHJvZmlsZVBpY3R1cmUuaGlkZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIERlbGV0ZSBQcm9maWxlIFBpY3R1cmVcclxuICAgIHB1YmxpYyBvbkRlbGV0ZVByb2ZpbGVQaWN0dXJlKCkge1xyXG4gICAgICAgIHRoaXMubXNnRXh0cy5zaW1wbGVXYXJuaW5nV2l0aENob2ljZShcIkNvbmZlcm1hIGVsaW1pbmF6aW9uZVwiLCBcIlNpIGUnIGNlcnRpIGRpIHZvbGVyIHJpbXVvdmVyZSBsJ2ltbWFnaW5lIHByb2ZpbG8/XCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb0RlbGV0ZVByb2ZpbGVQaWN0dXJlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGRvRGVsZXRlUHJvZmlsZVBpY3R1cmUoKSB7XHJcbiAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMucHJvZmlsZS5kb0RlbGV0ZVByb2ZpbGVQaWN0dXJlKCk7XHJcbiAgICAgICAgdGhpcy5tc2dFeHRzLm1hbmFnZUNhbGxSZXN1bHRSZXNwb25zZShyZXMsIFwiSW1tYWdpbmUgcHJvZmlsbyByaW1vc3NhIGNvbiBzdWNjZXNzb1wiLCBcIkVycm9yaSBuZWxsYSByaW1vemlvbmUgZGVsbGEgaW1tYWdpbmUgcHJvZmlsb1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGxnVXBkYXRlUHJvZmlsZVBpY3R1cmUuaGlkZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIFVwZGF0ZSBSZWNvdmVyeSBJbmZvXHJcbiAgICBAVmlld0NoaWxkKFwiZGxnVXBkYXRlUmVjb3ZlcnlTZXR0aW5nc1wiKSBkbGdVcGRhdGVSZWNvdmVyeVNldHRpbmdzOiBFc01vZGFsQ29tcG9uZW50O1xyXG4gICAgcHVibGljIFVwZGF0ZVJlY292ZXJ5U2V0dGluZ3NEVE86IHsgZW1haWw6IHN0cmluZyB9ID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgb25VcGRhdGVSZWNvdmVyeVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMuVXBkYXRlUmVjb3ZlcnlTZXR0aW5nc0RUTyA9IG51bGw7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5VcGRhdGVSZWNvdmVyeVNldHRpbmdzRFRPID0geyBlbWFpbDogdGhpcy5BY2NvdW50RGV0YWlscy5yZWNvdmVyeWVtYWlsIH07XHJcbiAgICAgICAgICAgIHRoaXMuZGxnVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncy5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGRvVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncygpIHtcclxuICAgICAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5wcm9maWxlLmRvVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncyh0aGlzLlVwZGF0ZVJlY292ZXJ5U2V0dGluZ3NEVE8uZW1haWwpO1xyXG4gICAgICAgIHRoaXMubXNnRXh0cy5tYW5hZ2VDYWxsUmVzdWx0UmVzcG9uc2UocmVzLCBcIk1vZGlmaWNhIGVzZWd1aXRhIGNvbiBTdWNjZXNzb1wiLCBcIkVycm9yaSBuZWxsYSBtb2RpZmljYVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWNjb3VudERldGFpbHMoKTtcclxuICAgICAgICAgICAgdGhpcy5kbGdVcGRhdGVSZWNvdmVyeVNldHRpbmdzLmhpZGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBVcGRhdGUgUGFzc3dvcmRcclxuICAgIEBWaWV3Q2hpbGQoXCJkbGdVcGRhdGVQYXNzd29yZFwiKSBkbGdVcGRhdGVQYXNzd29yZDogRXNNb2RhbENvbXBvbmVudDtcclxuICAgIHB1YmxpYyBVcGRhdGVQYXNzd29yZERUTzogVXBkYXRlUGFzc3dvcmREdG8gPSBudWxsO1xyXG4gICAgQ3VzdG9tRXJyb3I6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgb25VcGRhdGVQYXNzd29yZCgpIHtcclxuICAgICAgICB0aGlzLlVwZGF0ZVBhc3N3b3JkRFRPID0gbnVsbDtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLkN1c3RvbUVycm9yID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5VcGRhdGVQYXNzd29yZERUTyA9IG5ldyBVcGRhdGVQYXNzd29yZER0bygpO1xyXG4gICAgICAgICAgICB0aGlzLmRsZ1VwZGF0ZVBhc3N3b3JkLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9VcGRhdGVQYXNzd29yZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5VcGRhdGVQYXNzd29yZERUTy5uZXdwd2QgIT0gdGhpcy5VcGRhdGVQYXNzd29yZERUTy5jb25maXJtcHdkKVxyXG4gICAgICAgICAgICB0aGlzLkN1c3RvbUVycm9yID0gXCJMZSBwYXNzd29yZCBpbnNlcml0ZSBub24gY29pbmNpZG9uby5cIjtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMucHJvZmlsZS5kb1VwZGF0ZVBhc3N3b3JkKHRoaXMuVXBkYXRlUGFzc3dvcmREVE8ub2xkcHdkLCB0aGlzLlVwZGF0ZVBhc3N3b3JkRFRPLm5ld3B3ZCwgdGhpcy5VcGRhdGVQYXNzd29yZERUTy5jb25maXJtcHdkKTtcclxuICAgICAgICAgICAgdGhpcy5tc2dFeHRzLm1hbmFnZUNhbGxSZXN1bHRSZXNwb25zZShyZXMsIFwiUGFzc3dvcmQgbW9kaWZpY2F0YSBjb24gU3VjY2Vzc29cIiwgXCJFcnJvcmkgbmVsbGEgbW9kaWZpY2EgZGVsbGEgUGFzc3dvcmRcIixcclxuICAgICAgICAgICAgICAgICgpID0+IHsgdGhpcy5kbGdVcGRhdGVQYXNzd29yZC5oaWRlKCk7IH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxufSIsIjxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogYXV0bztcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1pbWctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJwcm9maWxlLlByb2ZpbGVQaWN0dXJlXCIgYWx0PVwidXNlci1pbWdcIiBjbGFzcz1cInVzZXItaW1nXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1wb2ludGVyIHVzZXItaW1nLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1vcGFjaXR5IHVzZXItaW1nLWJ0bi1ib2R5XCIgKGNsaWNrKT1cIm9uVXBkYXRlUHJvZmlsZVBpY3R1cmUoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1wZW5cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1tYXJnaW4tdG9wLTE1XCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIgKm5nSWY9XCJBY2NvdW50RGV0YWlsc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHkgYXBwLW5vLW1hcmdpbiBhcHAtcGFkZGluZy0xNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKmFjPVwiJ1I6SmFjZSBBZG1pbidcIiBjbGFzcz1cInVzZXItcm9sZXMtYnRuXCIgW21hdFRvb2x0aXBdPVwiJ1Zpc3VhbGl6emEgUnVvbGkgZSBQZXJtZXNzaSdcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJvblNob3dBY2NvdW50Um9sZXMoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtYm9vay11c2VyXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPjxsYWJlbGVkLXNwYW4gW0xhYmVsXT1cIidVdGVudGUnIHwgbG9jYWxpemUgOiBsY1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPnt7QWNjb3VudERldGFpbHMudXNlcm5hbWV9fTwvbGFiZWxlZC1zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPjxsYWJlbGVkLXNwYW4gW0xhYmVsXT1cIidUZW5hbnQnIHwgbG9jYWxpemUgOiBsY1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPnt7QWNjb3VudERldGFpbHMudGVuYW50aWR9fTwvbGFiZWxlZC1zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBhcHAtbWFyZ2luLXRvcC0xMFwiPjxsYWJlbGVkLXNwYW4gW0xhYmVsXT1cIidOb21lJyB8IGxvY2FsaXplIDogbGNcIiBEaXNwbGF5PVwiVmVydGljYWxcIj57e0FjY291bnREZXRhaWxzLmZpcnN0bmFtZX19PC9sYWJlbGVkLXNwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGFwcC1tYXJnaW4tdG9wLTEwXCI+PGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ0NvZ25vbWUnIHwgbG9jYWxpemUgOiBsY1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPnt7QWNjb3VudERldGFpbHMubGFzdG5hbWV9fTwvbGFiZWxlZC1zcGFuPiA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGFwcC1tYXJnaW4tdG9wLTEwXCI+PGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ0VtYWlsJyB8IGxvY2FsaXplIDogbGNcIiBEaXNwbGF5PVwiVmVydGljYWxcIj57e0FjY291bnREZXRhaWxzLnJlY292ZXJ5ZW1haWwgfHwgJ05vbiBkaXNwb25pYmlsZSd9fTwvbGFiZWxlZC1zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtbWFyZ2luLXRvcC0xMCByb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uVXBkYXRlUGFzc3dvcmQoKVwiPk1vZGlmaWNhIFBhc3N3b3JkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJvblVwZGF0ZVJlY292ZXJ5U2V0dGluZ3MoKVwiPk1vZGlmaWNhIEVtYWlsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLVVwZGF0ZSBQYXNzd29yZC0tPlxyXG48ZXMtbW9kYWwgI2RsZ1VwZGF0ZVBhc3N3b3JkIFtTaXplXT1cIidMJ1wiPlxyXG4gICAgPGVzLW1vZGFsLWhlYWQgKENsb3NlKT1cImRsZ1VwZGF0ZVBhc3N3b3JkLmhpZGUoKTtcIj5cclxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZSBwdWxsLWxlZnRcIj5Nb2RpZmljYSBQYXNzd29yZDwvaDU+XHJcbiAgICA8L2VzLW1vZGFsLWhlYWQ+XHJcbiAgICA8Zm9ybSAqbmdJZj1cIlVwZGF0ZVBhc3N3b3JkRFRPXCIgI2Zvcm1VcGRhdGVQYXNzd29yZD1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJmb3JtVXBkYXRlUGFzc3dvcmQudmFsaWQgJiYgZG9VcGRhdGVQYXNzd29yZCgpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbGFzdGZpeFwiPlxyXG4gICAgICAgICAgICA8Zm9ybS1pbnB1dCBbUGFzc3dvcmRdPVwidHJ1ZVwiIFtMYWJlbF09XCInUGFzc3dvcmQnIHwgbG9jYWxpemU6IGxjXCIgWyhuZ01vZGVsKV09XCJVcGRhdGVQYXNzd29yZERUTy5vbGRwd2RcIiBuYW1lPVwib2xkcHdcIiByZXF1aXJlZD48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgICAgIDxmb3JtLWlucHV0IFtQYXNzd29yZF09XCJ0cnVlXCIgW0xhYmVsXT1cIidOdW92YSBQYXNzd29yZCcgfCBsb2NhbGl6ZTogbGNcIiBbKG5nTW9kZWwpXT1cIlVwZGF0ZVBhc3N3b3JkRFRPLm5ld3B3ZFwiIG5hbWU9XCJuZXdwd1wiIHJlcXVpcmVkPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICAgICAgPGZvcm0taW5wdXQgW1Bhc3N3b3JkXT1cInRydWVcIiBbTGFiZWxdPVwiJ0NvbmZlcm1hIFBhc3N3b3JkJyB8IGxvY2FsaXplOiBsY1wiIFsobmdNb2RlbCldPVwiVXBkYXRlUGFzc3dvcmREVE8uY29uZmlybXB3ZFwiIG5hbWU9XCJjb25mcHdcIiByZXF1aXJlZD48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgICAgIDwhLS1WYWxpZGF6aW9uZSBDdXN0b20tLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIkN1c3RvbUVycm9yXCIgY2xhc3M9XCJhcHAtd2hpdGUtdGV4dCBhcHAtbWFyZ2luLXRvcC0xNSBhcHAtbWFyZ2luLWJvdHRvbS0wIGNhcmQgYXBwLXBhZGRpbmctMTAgY2FyZC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3snRXJyb3InIHwgbG9jYWxpemUgOiBsY319OiZuYnNwOzwvc3Ryb25nPnt7Q3VzdG9tRXJyb3J9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYXBwLW1hcmdpbi1yaWdodC0xMFwiIChjbGljayk9XCJkbGdVcGRhdGVQYXNzd29yZC5oaWRlKCk7XCI+e3snQ2FuY2VsJyB8IGxvY2FsaXplIDogbGN9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPkNvbmZlcm1hPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbjwvZXMtbW9kYWw+XHJcblxyXG48IS0tVXBkYXRlIEV4dHJhIEluZm8tLT5cclxuPGVzLW1vZGFsICNkbGdVcGRhdGVSZWNvdmVyeVNldHRpbmdzIFtTaXplXT1cIidMJ1wiPlxyXG4gICAgPGVzLW1vZGFsLWhlYWQgKENsb3NlKT1cImRsZ1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MuaGlkZSgpO1wiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiPnt7J01vZGlmaWNhIEVtYWlsJyB8IGxvY2FsaXplIDogbGN9fTwvaDU+XHJcbiAgICA8L2VzLW1vZGFsLWhlYWQ+XHJcbiAgICA8Zm9ybSAqbmdJZj1cIlVwZGF0ZVJlY292ZXJ5U2V0dGluZ3NEVE9cIiAjZm9ybVVwZGF0ZUluZm9zPVwibmdGb3JtXCIgKG5nU3VibWl0KT1cImZvcm1VcGRhdGVJbmZvcy52YWxpZCAmJiBkb1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IGxhc3RmaXhcIj5cclxuICAgICAgICAgICAgPGZvcm0taW5wdXQgW0xhYmVsSW5wdXRSYXRpb109XCInMyA5J1wiIFtMYWJlbF09XCInRW1haWwnIHwgbG9jYWxpemU6IGxjXCIgWyhuZ01vZGVsKV09XCJVcGRhdGVSZWNvdmVyeVNldHRpbmdzRFRPLmVtYWlsXCIgbmFtZT1cImVtYWlsXCI+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBhcHAtbWFyZ2luLXJpZ2h0LTEwXCIgKGNsaWNrKT1cImRsZ1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MuaGlkZSgpO1wiPnt7J0NhbmNlbCcgfCBsb2NhbGl6ZSA6IGxjfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5Db25mZXJtYTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG48L2VzLW1vZGFsPlxyXG5cclxuPCEtLVVwbG9hZCBQaWN0dXJlLS0+XHJcbjxlcy1tb2RhbCAjZGxnVXBkYXRlUHJvZmlsZVBpY3R1cmUgW1NpemVdPVwiJ1hMJ1wiPlxyXG4gICAgPGVzLW1vZGFsLWhlYWQgKENsb3NlKT1cImRsZ1VwZGF0ZVByb2ZpbGVQaWN0dXJlLmhpZGUoKTtcIj5cclxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZSBwdWxsLWxlZnRcIj5DYXJpY2EgaW1tYWdpbmU8L2g1PlxyXG4gICAgPC9lcy1tb2RhbC1oZWFkPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgZC1mbGV4XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogYXV0bztcIj5cclxuICAgICAgICAgICAgPGVzLWltYWdlLWNyb3BwZXIgI2ltYWdlQ3JvcHBlciBbSGVpZ2h0XT1cIjYwMFwiIFtXaWR0aF09XCI4MDBcIj48L2VzLWltYWdlLWNyb3BwZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImRsZ1VwZGF0ZVByb2ZpbGVQaWN0dXJlLmhpZGUoKVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJkb1VwZGF0ZVByb2ZpbGVQaWN0dXJlKClcIj5Db25mZXJtYTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZXMtbW9kYWw+XHJcblxyXG48IS0tUnVvbGkgZSBQZXJtZXNzaS0tPlxyXG48ZXMtbW9kYWwgI2RsZ1Nob3dBY2NvdW50Um9sZXMgW1NpemVdPVwiJ0wnXCI+XHJcbiAgICA8ZXMtbW9kYWwtaGVhZCAoQ2xvc2UpPVwiZGxnU2hvd0FjY291bnRSb2xlcy5oaWRlKCk7XCI+XHJcbiAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+e3snUnVvbGkgZSBQZXJtZXNzaScgfCBsb2NhbGl6ZSA6IGxjfX08L2g1PlxyXG4gICAgPC9lcy1tb2RhbC1oZWFkPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDYwMHB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJBY2NvdW50Um9sZXNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbGVkLXNwYW4gW0xhYmVsXT1cIidSdW9saSdcIiBEaXNwbGF5PVwiVmVydGljYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByIG9mIEFjY291bnRSb2xlcztcIj57e3J9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbGVkLXNwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIkFjY291bnRQZXJtaXNzaW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ1Blcm1lc3NpJ1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHAgb2YgQWNjb3VudFBlcm1pc3Npb25zO1wiPnt7cH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsZWQtc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImRsZ1Nob3dBY2NvdW50Um9sZXMuaGlkZSgpO1wiPnt7J0NoaXVkaScgfCBsb2NhbGl6ZSA6IGxjfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2VzLW1vZGFsPiJdfQ==
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcl9pbmZvcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3VzZXJfaW5mb3MvdXNlcl9pbmZvcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3VzZXJfaW5mb3MvdXNlcl9pbmZvcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFNBQVMsRUFBWSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQWtDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEYsU0FBUztBQUNULE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBVyx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUl0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FB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Qjt3QkFDaEIsb0JBQW9CO3dCQUNwQix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLGdCQUFnQjtxQkFDbkI7OFNBNEJpQyxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCO2dCQVFNLHVCQUF1QjtzQkFBNUQsU0FBUzt1QkFBQyx5QkFBeUI7Z0JBQ1QsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQW1DZSx5QkFBeUI7c0JBQWhFLFNBQVM7dUJBQUMsMkJBQTJCO2dCQXFCTixpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UsIEV4dGVuc2lvbnNNb2R1bGUsIE1lc3NhZ2VTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Nb2R1bGUsIExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbi8vIENsYXNzaVxyXG5pbXBvcnQgeyBVcGRhdGVQYXNzd29yZER0bywgVXNlckFjY291bnQgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCI7XHJcbmltcG9ydCB7IEFwcEZpbGUsIEZvcm1zQW5kVmFsaWRhdGlvbnNNb2R1bGUgfSBmcm9tIFwiQGVzZmFlbnphL2Zvcm1zLWFuZC12YWxpZGF0aW9uc1wiO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2Jhc2UvYmFzZS5jb21wb25lbnRcIlxyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IEFwcFN0YXRlLCBUb2tlblNlcnZpY2UsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvc2VydmljZXNcIjtcclxuaW1wb3J0IHsgVXNlckluZm9Db21wb25lbnRMb2MgfSBmcm9tIFwiLi91c2VyX2luZm9zLmNvbXBvbmVudC5sb2NcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbE1vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XHJcbmltcG9ydCB7IEVzTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi4vZXMtbW9kYWwvZXMtbW9kYWwuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEVzTW9kYWxIZWFkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2VzLW1vZGFsL2VzLW1vZGFsLWhlYWQvZXMtbW9kYWwtaGVhZC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTGFiZWxlZFNwYW5Db21wb25lbnQgfSBmcm9tIFwiLi4vbGFiZWxlZC1zcGFuL2xhYmVsZWQtc3Bhbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRXNJbWFnZUNyb3BwZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vcHVibGljLWFwaVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJ1c2VyLWluZm9zXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ1c2VyX2luZm9zLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vdXNlcl9pbmZvcy5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBVc2VySW5mb0NvbXBvbmVudExvYyB9XSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsIFxyXG4gICAgICAgIEZvcm1zQW5kVmFsaWRhdGlvbnNNb2R1bGUsIFxyXG4gICAgICAgIE5nSWYsXHJcbiAgICAgICAgTmdGb3IsXHJcbiAgICAgICAgTG9jYWxpemF0aW9uTW9kdWxlLCBcclxuICAgICAgICBFc01vZGFsQ29tcG9uZW50LCBcclxuICAgICAgICBFc01vZGFsSGVhZENvbXBvbmVudCxcclxuICAgICAgICBFc0ltYWdlQ3JvcHBlckNvbXBvbmVudCwgXHJcbiAgICAgICAgTGFiZWxlZFNwYW5Db21wb25lbnQsXHJcbiAgICAgICAgRXh0ZW5zaW9uc01vZHVsZSxcclxuICAgICAgICBBY2Nlc3NDb250cm9sTW9kdWxlLFxyXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGVcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJJbmZvc0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgcHVibGljIEFjY291bnREZXRhaWxzOiBVc2VyQWNjb3VudDtcclxuICAgIHB1YmxpYyBBY2NvdW50Um9sZXM6IHN0cmluZ1tdO1xyXG4gICAgcHVibGljIEFjY291bnRQZXJtaXNzaW9uczogc3RyaW5nW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmo6IEluamVjdG9yLCBwcml2YXRlIHRrczogVG9rZW5TZXJ2aWNlLCBwdWJsaWMgbXNnRXh0czogTWVzc2FnZVNlcnZpY2UsIHB1YmxpYyBleHBFeHRzOiBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHV0aUV4dHM6IFV0aWxpdHlTZXJ2aWNlLCBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIHB1YmxpYyBfc3RhdGU6IEFwcFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIHByb2ZpbGU6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcihpbmopO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuZ2V0QWNjb3VudERldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWNjb3VudERldGFpbHMoKSB7XHJcbiAgICAgICAgLy8gUmVjdXBlcm8gbGUgaW5mb3JtYXppb25pIEFjY291bnQgcGFydGVuZG8gZGFsbGEgaWRlbnRpdHlcclxuICAgICAgICBsZXQgaWRlbnRpdHkgPSB0aGlzLnRrcy5nZXRKYWNlSWRlbnRpdHkoKTtcclxuICAgICAgICBpZiAoaWRlbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5BY2NvdW50Um9sZXMgPSBpZGVudGl0eS5Sb2xlcztcclxuICAgICAgICAgICAgdGhpcy5BY2NvdW50UGVybWlzc2lvbnMgPSBpZGVudGl0eS5QZXJtaXNzaW9ucztcclxuICAgICAgICAgICAgdGhpcy5BY2NvdW50RGV0YWlscyA9IGF3YWl0IHRoaXMucHJvZmlsZS5nZXRBY2NvdW50UHJvZmlsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyNyZWdpb24gU2hvdyBSb2xlcyBhbmQgUGVybWlzc2lvbnNcclxuICAgIEBWaWV3Q2hpbGQoXCJkbGdTaG93QWNjb3VudFJvbGVzXCIpIGRsZ1Nob3dBY2NvdW50Um9sZXM6IEVzTW9kYWxDb21wb25lbnQ7XHJcblxyXG4gICAgb25TaG93QWNjb3VudFJvbGVzKCkge1xyXG4gICAgICAgIHRoaXMuZGxnU2hvd0FjY291bnRSb2xlcy5zaG93KCk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gVXBkYXRlIFByb2ZpbGUgUGljdHVyZVxyXG4gICAgQFZpZXdDaGlsZChcImRsZ1VwZGF0ZVByb2ZpbGVQaWN0dXJlXCIpIGRsZ1VwZGF0ZVByb2ZpbGVQaWN0dXJlOiBFc01vZGFsQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnaW1hZ2VDcm9wcGVyJykgaW1hZ2VDcm9wcGVyOiBFc0ltYWdlQ3JvcHBlckNvbXBvbmVudDtcclxuICAgIHB1YmxpYyBVcGRhdGVQcm9maWxlUGljdHVyZURUTzogeyBpbWFnZTogQXBwRmlsZSB9ID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgb25VcGRhdGVQcm9maWxlUGljdHVyZSgpIHtcclxuICAgICAgICB0aGlzLlVwZGF0ZVByb2ZpbGVQaWN0dXJlRFRPID0gbnVsbDtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLlVwZGF0ZVByb2ZpbGVQaWN0dXJlRFRPID0geyBpbWFnZTogbnVsbCB9O1xyXG4gICAgICAgICAgICB0aGlzLmRsZ1VwZGF0ZVByb2ZpbGVQaWN0dXJlLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9VcGRhdGVQcm9maWxlUGljdHVyZSgpIHtcclxuICAgICAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5wcm9maWxlLmRvVXBkYXRlUHJvZmlsZVBpY3R1cmUobmV3IEZpbGUoW3RoaXMuaW1hZ2VDcm9wcGVyLk91dHB1dEltYWdlXSwgXCJwcm9maWxlLnBuZ1wiKSk7XHJcbiAgICAgICAgdGhpcy5tc2dFeHRzLm1hbmFnZUNhbGxSZXN1bHRSZXNwb25zZShyZXMsIFwiTW9kaWZpY2EgZXNlZ3VpdGEgY29uIFN1Y2Nlc3NvXCIsIFwiRXJyb3JpIG5lbGxhIG1vZGlmaWNhXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kbGdVcGRhdGVQcm9maWxlUGljdHVyZS5oaWRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gRGVsZXRlIFByb2ZpbGUgUGljdHVyZVxyXG4gICAgcHVibGljIG9uRGVsZXRlUHJvZmlsZVBpY3R1cmUoKSB7XHJcbiAgICAgICAgdGhpcy5tc2dFeHRzLnNpbXBsZVdhcm5pbmdXaXRoQ2hvaWNlKFwiQ29uZmVybWEgZWxpbWluYXppb25lXCIsIFwiU2kgZScgY2VydGkgZGkgdm9sZXIgcmltdW92ZXJlIGwnaW1tYWdpbmUgcHJvZmlsbz9cIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRvRGVsZXRlUHJvZmlsZVBpY3R1cmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9EZWxldGVQcm9maWxlUGljdHVyZSgpIHtcclxuICAgICAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5wcm9maWxlLmRvRGVsZXRlUHJvZmlsZVBpY3R1cmUoKTtcclxuICAgICAgICB0aGlzLm1zZ0V4dHMubWFuYWdlQ2FsbFJlc3VsdFJlc3BvbnNlKHJlcywgXCJJbW1hZ2luZSBwcm9maWxvIHJpbW9zc2EgY29uIHN1Y2Nlc3NvXCIsIFwiRXJyb3JpIG5lbGxhIHJpbW96aW9uZSBkZWxsYSBpbW1hZ2luZSBwcm9maWxvXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kbGdVcGRhdGVQcm9maWxlUGljdHVyZS5oaWRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gVXBkYXRlIFJlY292ZXJ5IEluZm9cclxuICAgIEBWaWV3Q2hpbGQoXCJkbGdVcGRhdGVSZWNvdmVyeVNldHRpbmdzXCIpIGRsZ1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3M6IEVzTW9kYWxDb21wb25lbnQ7XHJcbiAgICBwdWJsaWMgVXBkYXRlUmVjb3ZlcnlTZXR0aW5nc0RUTzogeyBlbWFpbDogc3RyaW5nIH0gPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBvblVwZGF0ZVJlY292ZXJ5U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5VcGRhdGVSZWNvdmVyeVNldHRpbmdzRFRPID0gbnVsbDtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLlVwZGF0ZVJlY292ZXJ5U2V0dGluZ3NEVE8gPSB7IGVtYWlsOiB0aGlzLkFjY291bnREZXRhaWxzLnJlY292ZXJ5ZW1haWwgfTtcclxuICAgICAgICAgICAgdGhpcy5kbGdVcGRhdGVSZWNvdmVyeVNldHRpbmdzLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9VcGRhdGVSZWNvdmVyeVNldHRpbmdzKCkge1xyXG4gICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnByb2ZpbGUuZG9VcGRhdGVSZWNvdmVyeVNldHRpbmdzKHRoaXMuVXBkYXRlUmVjb3ZlcnlTZXR0aW5nc0RUTy5lbWFpbCk7XHJcbiAgICAgICAgdGhpcy5tc2dFeHRzLm1hbmFnZUNhbGxSZXN1bHRSZXNwb25zZShyZXMsIFwiTW9kaWZpY2EgZXNlZ3VpdGEgY29uIFN1Y2Nlc3NvXCIsIFwiRXJyb3JpIG5lbGxhIG1vZGlmaWNhXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXRBY2NvdW50RGV0YWlscygpO1xyXG4gICAgICAgICAgICB0aGlzLmRsZ1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MuaGlkZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIFVwZGF0ZSBQYXNzd29yZFxyXG4gICAgQFZpZXdDaGlsZChcImRsZ1VwZGF0ZVBhc3N3b3JkXCIpIGRsZ1VwZGF0ZVBhc3N3b3JkOiBFc01vZGFsQ29tcG9uZW50O1xyXG4gICAgcHVibGljIFVwZGF0ZVBhc3N3b3JkRFRPOiBVcGRhdGVQYXNzd29yZER0byA9IG51bGw7XHJcbiAgICBDdXN0b21FcnJvcjogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBvblVwZGF0ZVBhc3N3b3JkKCkge1xyXG4gICAgICAgIHRoaXMuVXBkYXRlUGFzc3dvcmREVE8gPSBudWxsO1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuQ3VzdG9tRXJyb3IgPSBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLlVwZGF0ZVBhc3N3b3JkRFRPID0gbmV3IFVwZGF0ZVBhc3N3b3JkRHRvKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGxnVXBkYXRlUGFzc3dvcmQuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBkb1VwZGF0ZVBhc3N3b3JkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlVwZGF0ZVBhc3N3b3JkRFRPLm5ld3B3ZCAhPSB0aGlzLlVwZGF0ZVBhc3N3b3JkRFRPLmNvbmZpcm1wd2QpXHJcbiAgICAgICAgICAgIHRoaXMuQ3VzdG9tRXJyb3IgPSBcIkxlIHBhc3N3b3JkIGluc2VyaXRlIG5vbiBjb2luY2lkb25vLlwiO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5wcm9maWxlLmRvVXBkYXRlUGFzc3dvcmQodGhpcy5VcGRhdGVQYXNzd29yZERUTy5vbGRwd2QsIHRoaXMuVXBkYXRlUGFzc3dvcmREVE8ubmV3cHdkLCB0aGlzLlVwZGF0ZVBhc3N3b3JkRFRPLmNvbmZpcm1wd2QpO1xyXG4gICAgICAgICAgICB0aGlzLm1zZ0V4dHMubWFuYWdlQ2FsbFJlc3VsdFJlc3BvbnNlKHJlcywgXCJQYXNzd29yZCBtb2RpZmljYXRhIGNvbiBTdWNjZXNzb1wiLCBcIkVycm9yaSBuZWxsYSBtb2RpZmljYSBkZWxsYSBQYXNzd29yZFwiLFxyXG4gICAgICAgICAgICAgICAgKCkgPT4geyB0aGlzLmRsZ1VwZGF0ZVBhc3N3b3JkLmhpZGUoKTsgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG59IiwiPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGRpc3BsYXk6IGZsZXg7XCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiBhdXRvO1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWltZy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cInByb2ZpbGUuUHJvZmlsZVBpY3R1cmVcIiBhbHQ9XCJ1c2VyLWltZ1wiIGNsYXNzPVwidXNlci1pbWdcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXBvaW50ZXIgdXNlci1pbWctYnRuXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLW9wYWNpdHkgdXNlci1pbWctYnRuLWJvZHlcIiAoY2xpY2spPVwib25VcGRhdGVQcm9maWxlUGljdHVyZSgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLXBlblwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLW1hcmdpbi10b3AtMTVcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIiAqbmdJZj1cIkFjY291bnREZXRhaWxzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keSBhcHAtbm8tbWFyZ2luIGFwcC1wYWRkaW5nLTE1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqYWM9XCInUjpKYWNlIEFkbWluJ1wiIGNsYXNzPVwidXNlci1yb2xlcy1idG5cIiBbbWF0VG9vbHRpcF09XCInVmlzdWFsaXp6YSBSdW9saSBlIFBlcm1lc3NpJ1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cIm9uU2hvd0FjY291bnRSb2xlcygpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1ib29rLXVzZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+PGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ1V0ZW50ZScgfCBsb2NhbGl6ZSA6IGxjXCIgRGlzcGxheT1cIlZlcnRpY2FsXCI+e3tBY2NvdW50RGV0YWlscy51c2VybmFtZX19PC9sYWJlbGVkLXNwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+PGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ1RlbmFudCcgfCBsb2NhbGl6ZSA6IGxjXCIgRGlzcGxheT1cIlZlcnRpY2FsXCI+e3tBY2NvdW50RGV0YWlscy50ZW5hbnRpZH19PC9sYWJlbGVkLXNwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGFwcC1tYXJnaW4tdG9wLTEwXCI+PGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ05vbWUnIHwgbG9jYWxpemUgOiBsY1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPnt7QWNjb3VudERldGFpbHMuZmlyc3RuYW1lfX08L2xhYmVsZWQtc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgYXBwLW1hcmdpbi10b3AtMTBcIj48bGFiZWxlZC1zcGFuIFtMYWJlbF09XCInQ29nbm9tZScgfCBsb2NhbGl6ZSA6IGxjXCIgRGlzcGxheT1cIlZlcnRpY2FsXCI+e3tBY2NvdW50RGV0YWlscy5sYXN0bmFtZX19PC9sYWJlbGVkLXNwYW4+IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgYXBwLW1hcmdpbi10b3AtMTBcIj48bGFiZWxlZC1zcGFuIFtMYWJlbF09XCInRW1haWwnIHwgbG9jYWxpemUgOiBsY1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPnt7QWNjb3VudERldGFpbHMucmVjb3ZlcnllbWFpbCB8fCAnTm9uIGRpc3BvbmliaWxlJ319PC9sYWJlbGVkLXNwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1tYXJnaW4tdG9wLTEwIHJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib25VcGRhdGVQYXNzd29yZCgpXCI+TW9kaWZpY2EgUGFzc3dvcmQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncygpXCI+TW9kaWZpY2EgRW1haWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tVXBkYXRlIFBhc3N3b3JkLS0+XHJcbjxlcy1tb2RhbCAjZGxnVXBkYXRlUGFzc3dvcmQgW1NpemVdPVwiJ0wnXCI+XHJcbiAgICA8ZXMtbW9kYWwtaGVhZCAoQ2xvc2UpPVwiZGxnVXBkYXRlUGFzc3dvcmQuaGlkZSgpO1wiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiPk1vZGlmaWNhIFBhc3N3b3JkPC9oNT5cclxuICAgIDwvZXMtbW9kYWwtaGVhZD5cclxuICAgIDxmb3JtICpuZ0lmPVwiVXBkYXRlUGFzc3dvcmREVE9cIiAjZm9ybVVwZGF0ZVBhc3N3b3JkPVwibmdGb3JtXCIgKG5nU3VibWl0KT1cImZvcm1VcGRhdGVQYXNzd29yZC52YWxpZCAmJiBkb1VwZGF0ZVBhc3N3b3JkKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBsYXN0Zml4XCI+XHJcbiAgICAgICAgICAgIDxmb3JtLWlucHV0IFtQYXNzd29yZF09XCJ0cnVlXCIgW0xhYmVsXT1cIidQYXNzd29yZCcgfCBsb2NhbGl6ZTogbGNcIiBbKG5nTW9kZWwpXT1cIlVwZGF0ZVBhc3N3b3JkRFRPLm9sZHB3ZFwiIG5hbWU9XCJvbGRwd1wiIHJlcXVpcmVkPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICAgICAgPGZvcm0taW5wdXQgW1Bhc3N3b3JkXT1cInRydWVcIiBbTGFiZWxdPVwiJ051b3ZhIFBhc3N3b3JkJyB8IGxvY2FsaXplOiBsY1wiIFsobmdNb2RlbCldPVwiVXBkYXRlUGFzc3dvcmREVE8ubmV3cHdkXCIgbmFtZT1cIm5ld3B3XCIgcmVxdWlyZWQ+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgICAgICA8Zm9ybS1pbnB1dCBbUGFzc3dvcmRdPVwidHJ1ZVwiIFtMYWJlbF09XCInQ29uZmVybWEgUGFzc3dvcmQnIHwgbG9jYWxpemU6IGxjXCIgWyhuZ01vZGVsKV09XCJVcGRhdGVQYXNzd29yZERUTy5jb25maXJtcHdkXCIgbmFtZT1cImNvbmZwd1wiIHJlcXVpcmVkPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICAgICAgPCEtLVZhbGlkYXppb25lIEN1c3RvbS0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiQ3VzdG9tRXJyb3JcIiBjbGFzcz1cImFwcC13aGl0ZS10ZXh0IGFwcC1tYXJnaW4tdG9wLTE1IGFwcC1tYXJnaW4tYm90dG9tLTAgY2FyZCBhcHAtcGFkZGluZy0xMCBjYXJkLWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eydFcnJvcicgfCBsb2NhbGl6ZSA6IGxjfX06Jm5ic3A7PC9zdHJvbmc+e3tDdXN0b21FcnJvcn19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBhcHAtbWFyZ2luLXJpZ2h0LTEwXCIgKGNsaWNrKT1cImRsZ1VwZGF0ZVBhc3N3b3JkLmhpZGUoKTtcIj57eydDYW5jZWwnIHwgbG9jYWxpemUgOiBsY319PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+Q29uZmVybWE8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuPC9lcy1tb2RhbD5cclxuXHJcbjwhLS1VcGRhdGUgRXh0cmEgSW5mby0tPlxyXG48ZXMtbW9kYWwgI2RsZ1VwZGF0ZVJlY292ZXJ5U2V0dGluZ3MgW1NpemVdPVwiJ0wnXCI+XHJcbiAgICA8ZXMtbW9kYWwtaGVhZCAoQ2xvc2UpPVwiZGxnVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncy5oaWRlKCk7XCI+XHJcbiAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+e3snTW9kaWZpY2EgRW1haWwnIHwgbG9jYWxpemUgOiBsY319PC9oNT5cclxuICAgIDwvZXMtbW9kYWwtaGVhZD5cclxuICAgIDxmb3JtICpuZ0lmPVwiVXBkYXRlUmVjb3ZlcnlTZXR0aW5nc0RUT1wiICNmb3JtVXBkYXRlSW5mb3M9XCJuZ0Zvcm1cIiAobmdTdWJtaXQpPVwiZm9ybVVwZGF0ZUluZm9zLnZhbGlkICYmIGRvVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncygpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbGFzdGZpeFwiPlxyXG4gICAgICAgICAgICA8Zm9ybS1pbnB1dCBbTGFiZWxJbnB1dFJhdGlvXT1cIiczIDknXCIgW0xhYmVsXT1cIidFbWFpbCcgfCBsb2NhbGl6ZTogbGNcIiBbKG5nTW9kZWwpXT1cIlVwZGF0ZVJlY292ZXJ5U2V0dGluZ3NEVE8uZW1haWxcIiBuYW1lPVwiZW1haWxcIj48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGFwcC1tYXJnaW4tcmlnaHQtMTBcIiAoY2xpY2spPVwiZGxnVXBkYXRlUmVjb3ZlcnlTZXR0aW5ncy5oaWRlKCk7XCI+e3snQ2FuY2VsJyB8IGxvY2FsaXplIDogbGN9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPkNvbmZlcm1hPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbjwvZXMtbW9kYWw+XHJcblxyXG48IS0tVXBsb2FkIFBpY3R1cmUtLT5cclxuPGVzLW1vZGFsICNkbGdVcGRhdGVQcm9maWxlUGljdHVyZSBbU2l6ZV09XCInWEwnXCI+XHJcbiAgICA8ZXMtbW9kYWwtaGVhZCAoQ2xvc2UpPVwiZGxnVXBkYXRlUHJvZmlsZVBpY3R1cmUuaGlkZSgpO1wiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiPkNhcmljYSBpbW1hZ2luZTwvaDU+XHJcbiAgICA8L2VzLW1vZGFsLWhlYWQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBkLWZsZXhcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiBhdXRvO1wiPlxyXG4gICAgICAgICAgICA8ZXMtaW1hZ2UtY3JvcHBlciAjaW1hZ2VDcm9wcGVyIFtIZWlnaHRdPVwiNjAwXCIgW1dpZHRoXT1cIjgwMFwiPjwvZXMtaW1hZ2UtY3JvcHBlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZGxnVXBkYXRlUHJvZmlsZVBpY3R1cmUuaGlkZSgpXCI+QW5udWxsYTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImRvVXBkYXRlUHJvZmlsZVBpY3R1cmUoKVwiPkNvbmZlcm1hPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9lcy1tb2RhbD5cclxuXHJcbjwhLS1SdW9saSBlIFBlcm1lc3NpLS0+XHJcbjxlcy1tb2RhbCAjZGxnU2hvd0FjY291bnRSb2xlcyBbU2l6ZV09XCInTCdcIj5cclxuICAgIDxlcy1tb2RhbC1oZWFkIChDbG9zZSk9XCJkbGdTaG93QWNjb3VudFJvbGVzLmhpZGUoKTtcIj5cclxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZSBwdWxsLWxlZnRcIj57eydSdW9saSBlIFBlcm1lc3NpJyB8IGxvY2FsaXplIDogbGN9fTwvaDU+XHJcbiAgICA8L2VzLW1vZGFsLWhlYWQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwibWF4LWhlaWdodDogNjAwcHg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIkFjY291bnRSb2xlc1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsZWQtc3BhbiBbTGFiZWxdPVwiJ1J1b2xpJ1wiIERpc3BsYXk9XCJWZXJ0aWNhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHIgb2YgQWNjb3VudFJvbGVzO1wiPnt7cn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsZWQtc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiQWNjb3VudFBlcm1pc3Npb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWxlZC1zcGFuIFtMYWJlbF09XCInUGVybWVzc2knXCIgRGlzcGxheT1cIlZlcnRpY2FsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcCBvZiBBY2NvdW50UGVybWlzc2lvbnM7XCI+e3twfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWxlZC1zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZGxnU2hvd0FjY291bnRSb2xlcy5oaWRlKCk7XCI+e3snQ2hpdWRpJyB8IGxvY2FsaXplIDogbGN9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZXMtbW9kYWw+Il19
@@ -8,8 +8,10 @@ export const MENU_LOCALIZATION = new InjectionToken('MENU_LOCALIZATION');
8
8
  export const MENU = new InjectionToken('MENU');
9
9
  /** Token che indica se il servizio di autenticazione deve utilizzare un token finto */
10
10
  export const USE_FAKE_ACCESS_TOKEN = new InjectionToken('USE_FAKE_ACCESS_TOKEN');
11
+ /** Token che indica se il servizio di autenticazione deve funzionare in anonimo lato Frontend. Dev'essere utilizzato insieme al tag "Auth" in code behind */
12
+ export const ALLOW_ANONYMOUS = new InjectionToken('USE_FAKE_ACCESS_TOKEN');
11
13
  /** Token che indica i componenti di estensione da aggiungere alla navbar. Verranno bootstrappati in maniera dinamica */
12
14
  export const NAVBAR_EXTENSIONS = new InjectionToken('NAVBAR_EXTENSIONS');
13
15
  /** Token che identifica se utilizzare la versione vecchia dell'url di auth (${myconfig.AUTH_URL}/login/form?client=${myconfig.CLIENT_NAME}) invece che la nuova (${myconfig.AUTH_URL}/login;client=${myconfig.CLIENT_NAME}) */
14
16
  export const LOGIN_URL_LEGACY = new InjectionToken('LOGIN_URL_LEGACY');
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9kb21haW4vc3JjL3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQVFyRCx5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEyRSxJQUFJLGNBQWMsQ0FBeUQsY0FBYyxDQUFDLENBQUM7QUFFL0wsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUE4QyxJQUFJLGNBQWMsQ0FBNEIsbUJBQW1CLENBQUMsQ0FBQztBQUUvSSx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFzQyxJQUFJLGNBQWMsQ0FBb0IsTUFBTSxDQUFDLENBQUM7QUFFckcsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUE0QixJQUFJLGNBQWMsQ0FBVSx1QkFBdUIsQ0FBQyxDQUFDO0FBRW5ILHdIQUF3SDtBQUN4SCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBZ0MsSUFBSSxjQUFjLENBQWMsbUJBQW1CLENBQUMsQ0FBQztBQUVuSCwrTkFBK047QUFDL04sTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTRCLElBQUksY0FBYyxDQUFVLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbk1lbnUgfSBmcm9tIFwiLi9tb2RlbHMvY29yZS9BcHBsaWNhdGlvbk1lbnVcIjtcclxuXHJcbi8qKiBUb2tlbiBjaGUgaW5kaWNhIGkgZGVmYXVsdCBkYSBhc3NlZ25hcmUgYWdsaSBJbnB1dCAqL1xyXG5leHBvcnQgY29uc3QgUkVESVJFQ1RfTUFQOiBJbmplY3Rpb25Ub2tlbjx7IFtpbmRleDogc3RyaW5nXTogeyB1cmw6IHN0cmluZywgcGFyYW1zOiBzdHJpbmdbXSB9IH0+ID0gbmV3IEluamVjdGlvblRva2VuPHsgW2luZGV4OiBzdHJpbmddOiB7IHVybDogc3RyaW5nLCBwYXJhbXM6IHN0cmluZ1tdIH0gfT4oJ1JFRElSRUNUX01BUCcpO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpbmRpY2EgaWwgc2Vydml6aW8gZGkgbG9jYWxpenphemlvbmUgdXRpbGl6emF0byBwZXIgaSBtZW7DuSAqL1xyXG5leHBvcnQgY29uc3QgTUVOVV9MT0NBTElaQVRJT046IEluamVjdGlvblRva2VuPFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT4+ID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT4+KCdNRU5VX0xPQ0FMSVpBVElPTicpO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpbmRpY2EgaSBtZW7DuSBkZWxsJ2FwcGxpY2F6aW9uZSwgZGEgcXVlbGxvIHZlZ2FubyBmaW5vIGEgcXVlbGxvIGNlbGlhY28gKi9cclxuZXhwb3J0IGNvbnN0IE1FTlU6IEluamVjdGlvblRva2VuPEFwcGxpY2F0aW9uTWVudVtdPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcHBsaWNhdGlvbk1lbnVbXT4oJ01FTlUnKTtcclxuXHJcbi8qKiBUb2tlbiBjaGUgaW5kaWNhIHNlIGlsIHNlcnZpemlvIGRpIGF1dGVudGljYXppb25lIGRldmUgdXRpbGl6emFyZSB1biB0b2tlbiBmaW50byAqL1xyXG5leHBvcnQgY29uc3QgVVNFX0ZBS0VfQUNDRVNTX1RPS0VOOiBJbmplY3Rpb25Ub2tlbjxib29sZWFuPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignVVNFX0ZBS0VfQUNDRVNTX1RPS0VOJyk7XHJcblxyXG4vKiogVG9rZW4gY2hlIGluZGljYSBpIGNvbXBvbmVudGkgZGkgZXN0ZW5zaW9uZSBkYSBhZ2dpdW5nZXJlIGFsbGEgbmF2YmFyLiBWZXJyYW5ubyBib290c3RyYXBwYXRpIGluIG1hbmllcmEgZGluYW1pY2EgKi9cclxuZXhwb3J0IGNvbnN0IE5BVkJBUl9FWFRFTlNJT05TOiBJbmplY3Rpb25Ub2tlbjxUeXBlPGFueT5bXT4gPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTxhbnk+W10+KCdOQVZCQVJfRVhURU5TSU9OUycpO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpZGVudGlmaWNhIHNlIHV0aWxpenphcmUgbGEgdmVyc2lvbmUgdmVjY2hpYSBkZWxsJ3VybCBkaSBhdXRoICgke215Y29uZmlnLkFVVEhfVVJMfS9sb2dpbi9mb3JtP2NsaWVudD0ke215Y29uZmlnLkNMSUVOVF9OQU1FfSkgaW52ZWNlIGNoZSBsYSBudW92YSAoJHtteWNvbmZpZy5BVVRIX1VSTH0vbG9naW47Y2xpZW50PSR7bXljb25maWcuQ0xJRU5UX05BTUV9KSAqL1xyXG5leHBvcnQgY29uc3QgTE9HSU5fVVJMX0xFR0FDWTogSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ0xPR0lOX1VSTF9MRUdBQ1knKTsiXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9kb21haW4vc3JjL3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQVFyRCx5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEyRSxJQUFJLGNBQWMsQ0FBeUQsY0FBYyxDQUFDLENBQUM7QUFFL0wsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUE4QyxJQUFJLGNBQWMsQ0FBNEIsbUJBQW1CLENBQUMsQ0FBQztBQUUvSSx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFzQyxJQUFJLGNBQWMsQ0FBb0IsTUFBTSxDQUFDLENBQUM7QUFFckcsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUE0QixJQUFJLGNBQWMsQ0FBVSx1QkFBdUIsQ0FBQyxDQUFDO0FBRW5ILDZKQUE2SjtBQUM3SixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTRCLElBQUksY0FBYyxDQUFVLHVCQUF1QixDQUFDLENBQUM7QUFFN0csd0hBQXdIO0FBQ3hILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFnQyxJQUFJLGNBQWMsQ0FBYyxtQkFBbUIsQ0FBQyxDQUFDO0FBRW5ILCtOQUErTjtBQUMvTixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBNEIsSUFBSSxjQUFjLENBQVUsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uTWVudSB9IGZyb20gXCIuL21vZGVscy9jb3JlL0FwcGxpY2F0aW9uTWVudVwiO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpbmRpY2EgaSBkZWZhdWx0IGRhIGFzc2VnbmFyZSBhZ2xpIElucHV0ICovXHJcbmV4cG9ydCBjb25zdCBSRURJUkVDVF9NQVA6IEluamVjdGlvblRva2VuPHsgW2luZGV4OiBzdHJpbmddOiB7IHVybDogc3RyaW5nLCBwYXJhbXM6IHN0cmluZ1tdIH0gfT4gPSBuZXcgSW5qZWN0aW9uVG9rZW48eyBbaW5kZXg6IHN0cmluZ106IHsgdXJsOiBzdHJpbmcsIHBhcmFtczogc3RyaW5nW10gfSB9PignUkVESVJFQ1RfTUFQJyk7XHJcblxyXG4vKiogVG9rZW4gY2hlIGluZGljYSBpbCBzZXJ2aXppbyBkaSBsb2NhbGl6emF6aW9uZSB1dGlsaXp6YXRvIHBlciBpIG1lbsO5ICovXHJcbmV4cG9ydCBjb25zdCBNRU5VX0xPQ0FMSVpBVElPTjogSW5qZWN0aW9uVG9rZW48VHlwZTxMb2NhbGl6YXRpb25TZXJ2aWNlPj4gPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTxMb2NhbGl6YXRpb25TZXJ2aWNlPj4oJ01FTlVfTE9DQUxJWkFUSU9OJyk7XHJcblxyXG4vKiogVG9rZW4gY2hlIGluZGljYSBpIG1lbsO5IGRlbGwnYXBwbGljYXppb25lLCBkYSBxdWVsbG8gdmVnYW5vIGZpbm8gYSBxdWVsbG8gY2VsaWFjbyAqL1xyXG5leHBvcnQgY29uc3QgTUVOVTogSW5qZWN0aW9uVG9rZW48QXBwbGljYXRpb25NZW51W10+ID0gbmV3IEluamVjdGlvblRva2VuPEFwcGxpY2F0aW9uTWVudVtdPignTUVOVScpO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpbmRpY2Egc2UgaWwgc2Vydml6aW8gZGkgYXV0ZW50aWNhemlvbmUgZGV2ZSB1dGlsaXp6YXJlIHVuIHRva2VuIGZpbnRvICovXHJcbmV4cG9ydCBjb25zdCBVU0VfRkFLRV9BQ0NFU1NfVE9LRU46IEluamVjdGlvblRva2VuPGJvb2xlYW4+ID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdVU0VfRkFLRV9BQ0NFU1NfVE9LRU4nKTtcclxuXHJcbi8qKiBUb2tlbiBjaGUgaW5kaWNhIHNlIGlsIHNlcnZpemlvIGRpIGF1dGVudGljYXppb25lIGRldmUgZnVuemlvbmFyZSBpbiBhbm9uaW1vIGxhdG8gRnJvbnRlbmQuIERldidlc3NlcmUgdXRpbGl6emF0byBpbnNpZW1lIGFsIHRhZyBcIkF1dGhcIiBpbiBjb2RlIGJlaGluZCAqL1xyXG5leHBvcnQgY29uc3QgQUxMT1dfQU5PTllNT1VTOiBJbmplY3Rpb25Ub2tlbjxib29sZWFuPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignVVNFX0ZBS0VfQUNDRVNTX1RPS0VOJyk7XHJcblxyXG4vKiogVG9rZW4gY2hlIGluZGljYSBpIGNvbXBvbmVudGkgZGkgZXN0ZW5zaW9uZSBkYSBhZ2dpdW5nZXJlIGFsbGEgbmF2YmFyLiBWZXJyYW5ubyBib290c3RyYXBwYXRpIGluIG1hbmllcmEgZGluYW1pY2EgKi9cclxuZXhwb3J0IGNvbnN0IE5BVkJBUl9FWFRFTlNJT05TOiBJbmplY3Rpb25Ub2tlbjxUeXBlPGFueT5bXT4gPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTxhbnk+W10+KCdOQVZCQVJfRVhURU5TSU9OUycpO1xyXG5cclxuLyoqIFRva2VuIGNoZSBpZGVudGlmaWNhIHNlIHV0aWxpenphcmUgbGEgdmVyc2lvbmUgdmVjY2hpYSBkZWxsJ3VybCBkaSBhdXRoICgke215Y29uZmlnLkFVVEhfVVJMfS9sb2dpbi9mb3JtP2NsaWVudD0ke215Y29uZmlnLkNMSUVOVF9OQU1FfSkgaW52ZWNlIGNoZSBsYSBudW92YSAoJHtteWNvbmZpZy5BVVRIX1VSTH0vbG9naW47Y2xpZW50PSR7bXljb25maWcuQ0xJRU5UX05BTUV9KSAqL1xyXG5leHBvcnQgY29uc3QgTE9HSU5fVVJMX0xFR0FDWTogSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ0xPR0lOX1VSTF9MRUdBQ1knKTsiXX0=