tango-app-ui-analyse-zone 3.3.1-beta.2 → 3.3.1-beta.20

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 (35) hide show
  1. package/esm2022/lib/components/overallcards/overallcards.component.mjs +4 -4
  2. package/esm2022/lib/components/segmentation/segmentation.component.mjs +68 -0
  3. package/esm2022/lib/components/services/zone.service.mjs +7 -1
  4. package/esm2022/lib/components/services/zonev2.service.mjs +28 -11
  5. package/esm2022/lib/components/tango-analyse-zone/tango-analyse-zone.component.mjs +5 -4
  6. package/esm2022/lib/components/top-performing-zones/top-performing-zones.component.mjs +7 -6
  7. package/esm2022/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.mjs +32 -3
  8. package/esm2022/lib/components/zone-concentration/zone-concentration.component.mjs +89 -30
  9. package/esm2022/lib/components/zone-summary-table/zone-summary-table.component.mjs +10 -8
  10. package/esm2022/lib/components/zone-v2/customer-journey/customer-journey.component.mjs +313 -55
  11. package/esm2022/lib/components/zone-v2/store-heatmap/store-heatmap.component.mjs +284 -281
  12. package/esm2022/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.mjs +38 -5
  13. package/esm2022/lib/components/zone-v2/summary-table/summary-table.component.mjs +43 -13
  14. package/esm2022/lib/components/zone-v2/top-performing/top-performing.component.mjs +58 -24
  15. package/esm2022/lib/components/zone-v2/zone-v2.component.mjs +1 -2
  16. package/esm2022/lib/components/zone-v2/zones-cards/zones-cards.component.mjs +17 -10
  17. package/esm2022/lib/tango-analyse-zone.module.mjs +6 -3
  18. package/fesm2022/tango-app-ui-analyse-zone.mjs +994 -461
  19. package/fesm2022/tango-app-ui-analyse-zone.mjs.map +1 -1
  20. package/lib/components/segmentation/segmentation.component.d.ts +20 -0
  21. package/lib/components/services/zone.service.d.ts +2 -0
  22. package/lib/components/services/zonev2.service.d.ts +7 -0
  23. package/lib/components/tango-analyse-zone/tango-analyse-zone.component.d.ts +1 -0
  24. package/lib/components/top-performing-zones/top-performing-zones.component.d.ts +3 -3
  25. package/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.d.ts +5 -0
  26. package/lib/components/zone-concentration/zone-concentration.component.d.ts +7 -2
  27. package/lib/components/zone-summary-table/zone-summary-table.component.d.ts +1 -1
  28. package/lib/components/zone-v2/customer-journey/customer-journey.component.d.ts +49 -4
  29. package/lib/components/zone-v2/store-heatmap/store-heatmap.component.d.ts +21 -2
  30. package/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.d.ts +8 -1
  31. package/lib/components/zone-v2/summary-table/summary-table.component.d.ts +5 -3
  32. package/lib/components/zone-v2/top-performing/top-performing.component.d.ts +9 -0
  33. package/lib/components/zone-v2/zones-cards/zones-cards.component.d.ts +5 -1
  34. package/lib/tango-analyse-zone.module.d.ts +7 -6
  35. package/package.json +1 -1
@@ -4,6 +4,8 @@ import * as i1 from "@angular/common";
4
4
  import * as i2 from "@ng-bootstrap/ng-bootstrap";
5
5
  export class ConcentrationheatmapComponent {
6
6
  imageURLV1;
7
+ currentSlideIndex = 0;
8
+ currentSlide = 0;
7
9
  overallStoreData = { ImageURLs: [] };
8
10
  constructor() { }
9
11
  ngOnInit() {
@@ -11,13 +13,40 @@ export class ConcentrationheatmapComponent {
11
13
  this.overallStoreData.ImageURLs = this.imageURLV1;
12
14
  }
13
15
  }
16
+ ngAfterViewInit() {
17
+ let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');
18
+ prevElement?.setAttribute('style', "display:none");
19
+ }
20
+ onSlideChange(slideEvent) {
21
+ const slideIndex = +slideEvent.current.
22
+ replace('ngb-slide-', '');
23
+ this.currentSlide = slideIndex;
24
+ let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');
25
+ let nextElement = document.querySelector('.modal-dialog .carousel-control-next');
26
+ if (this.currentSlide == 0) {
27
+ nextElement?.removeAttribute('style');
28
+ if (prevElement) {
29
+ prevElement.setAttribute('style', "display:none");
30
+ }
31
+ }
32
+ if (this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {
33
+ prevElement?.removeAttribute('style');
34
+ if (nextElement) {
35
+ nextElement.setAttribute('style', "display:none");
36
+ }
37
+ }
38
+ else {
39
+ prevElement?.removeAttribute('style');
40
+ nextElement?.removeAttribute('style');
41
+ }
42
+ }
14
43
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ConcentrationheatmapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: ConcentrationheatmapComponent, selector: "lib-concentrationheatmap", inputs: { imageURLV1: "imageURLV1" }, ngImport: i0, template: "<div class=\"modal-body\">\r\n<ngb-carousel *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs\">\r\n <ng-template ngbSlide>\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ", styles: [".modal-body{text-align:center}.img-fluid{max-width:100%;height:auto}.cardimg{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NgbCarousel, selector: "ngb-carousel", inputs: ["animation", "activeId", "interval", "wrap", "keyboard", "pauseOnHover", "pauseOnFocus", "showNavigationArrows", "showNavigationIndicators"], outputs: ["slide", "slid"], exportAs: ["ngbCarousel"] }, { kind: "directive", type: i2.NgbSlide, selector: "ng-template[ngbSlide]", inputs: ["id"], outputs: ["slid"] }] });
44
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: ConcentrationheatmapComponent, selector: "lib-concentrationheatmap", inputs: { imageURLV1: "imageURLV1" }, ngImport: i0, template: "<div class=\"modal-body\">\r\n<ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs; let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ", styles: [".modal-body{text-align:center}.img-fluid{max-width:100%;height:auto}.cardimg{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NgbCarousel, selector: "ngb-carousel", inputs: ["animation", "activeId", "interval", "wrap", "keyboard", "pauseOnHover", "pauseOnFocus", "showNavigationArrows", "showNavigationIndicators"], outputs: ["slide", "slid"], exportAs: ["ngbCarousel"] }, { kind: "directive", type: i2.NgbSlide, selector: "ng-template[ngbSlide]", inputs: ["id"], outputs: ["slid"] }] });
16
45
  }
17
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ConcentrationheatmapComponent, decorators: [{
18
47
  type: Component,
19
- args: [{ selector: 'lib-concentrationheatmap', template: "<div class=\"modal-body\">\r\n<ngb-carousel *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs\">\r\n <ng-template ngbSlide>\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ", styles: [".modal-body{text-align:center}.img-fluid{max-width:100%;height:auto}.cardimg{width:100%}\n"] }]
48
+ args: [{ selector: 'lib-concentrationheatmap', template: "<div class=\"modal-body\">\r\n<ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs; let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ", styles: [".modal-body{text-align:center}.img-fluid{max-width:100%;height:auto}.cardimg{width:100%}\n"] }]
20
49
  }], ctorParameters: () => [], propDecorators: { imageURLV1: [{
21
50
  type: Input
22
51
  }] } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS16b25lL3NyYy9saWIvY29tcG9uZW50cy96b25lLWNvbmNlbnRyYXRpb24vY29uY2VudHJhdGlvbmhlYXRtYXAvY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS16b25lL3NyYy9saWIvY29tcG9uZW50cy96b25lLWNvbmNlbnRyYXRpb24vY29uY2VudHJhdGlvbmhlYXRtYXAvY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPakQsTUFBTSxPQUFPLDZCQUE2QjtJQUMvQixVQUFVLENBQUs7SUFDeEIsZ0JBQWdCLEdBQThELEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBRWhHLGdCQUFlLENBQUM7SUFFaEIsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDbkQ7SUFFTCxDQUFDO3VHQVhZLDZCQUE2QjsyRkFBN0IsNkJBQTZCLHNHQ1AxQyxvYkFXRTs7MkZESlcsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLDBCQUEwQjt3REFLM0IsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNvbmNlbnRyYXRpb25oZWF0bWFwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jb25jZW50cmF0aW9uaGVhdG1hcC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmNlbnRyYXRpb25oZWF0bWFwQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBpbWFnZVVSTFYxOiBbXTtcclxuICBvdmVyYWxsU3RvcmVEYXRhOiB7IEltYWdlVVJMczogQXJyYXk8eyBVUkw6IHN0cmluZywgc3RyZWFtTmFtZTogc3RyaW5nIH0+IH0gPSB7IEltYWdlVVJMczogW10gfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmltYWdlVVJMVjEpIHtcclxuICAgICAgdGhpcy5vdmVyYWxsU3RvcmVEYXRhLkltYWdlVVJMcyA9IHRoaXMuaW1hZ2VVUkxWMTsgXHJcbiAgICB9XHJcblxyXG59fVxyXG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG48bmdiLWNhcm91c2VsICpuZ0lmPVwib3ZlcmFsbFN0b3JlRGF0YT8uSW1hZ2VVUkxzPy5sZW5ndGhcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIG92ZXJhbGxTdG9yZURhdGEuSW1hZ2VVUkxzXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JTbGlkZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2UuVVJMXCIgW2FsdF09XCJpbWFnZS5zdHJlYW1OYW1lXCIgY2xhc3M9XCJjYXJkaW1nXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmdiLWNhcm91c2VsPlxyXG4gIDwvZGl2PlxyXG4gICJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS16b25lL3NyYy9saWIvY29tcG9uZW50cy96b25lLWNvbmNlbnRyYXRpb24vY29uY2VudHJhdGlvbmhlYXRtYXAvY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS16b25lL3NyYy9saWIvY29tcG9uZW50cy96b25lLWNvbmNlbnRyYXRpb24vY29uY2VudHJhdGlvbmhlYXRtYXAvY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRakQsTUFBTSxPQUFPLDZCQUE2QjtJQUMvQixVQUFVLENBQUs7SUFDeEIsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsZ0JBQWdCLEdBQThELEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBRWhHLGdCQUFlLENBQUM7SUFFaEIsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDbkQ7SUFJTCxDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUM3RSxXQUFXLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBQyxjQUFjLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsYUFBYSxDQUNaLFVBQXlCO1FBRTFCLE1BQ0UsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDOUIsT0FBTyxDQUVMLFlBQVksRUFFWixFQUFFLENBQ0gsQ0FBQztRQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO1FBQ2xDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUNqRixJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDakYsSUFBRyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRTtZQUN6QixXQUFXLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLElBQUcsV0FBVyxFQUFFO2dCQUNkLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFDLGNBQWMsQ0FBQyxDQUFBO2FBQ2pEO1NBQ0Y7UUFDRCxJQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25FLFdBQVcsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsSUFBRyxXQUFXLEVBQUU7Z0JBQ2QsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUMsY0FBYyxDQUFDLENBQUE7YUFDakQ7U0FFRjthQUNHO1lBQ0YsV0FBVyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QyxXQUFXLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQzt1R0FuRFksNkJBQTZCOzJGQUE3Qiw2QkFBNkIsc0dDUjFDLGtrQkFXRTs7MkZESFcsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLDBCQUEwQjt3REFLM0IsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiU2xpZGVFdmVudCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNvbmNlbnRyYXRpb25oZWF0bWFwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29uY2VudHJhdGlvbmhlYXRtYXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jb25jZW50cmF0aW9uaGVhdG1hcC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmNlbnRyYXRpb25oZWF0bWFwQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBpbWFnZVVSTFYxOiBbXTtcclxuICBjdXJyZW50U2xpZGVJbmRleCA9IDA7XHJcbiAgY3VycmVudFNsaWRlID0gMDtcclxuICBvdmVyYWxsU3RvcmVEYXRhOiB7IEltYWdlVVJMczogQXJyYXk8eyBVUkw6IHN0cmluZywgc3RyZWFtTmFtZTogc3RyaW5nIH0+IH0gPSB7IEltYWdlVVJMczogW10gfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmltYWdlVVJMVjEpIHtcclxuICAgICAgdGhpcy5vdmVyYWxsU3RvcmVEYXRhLkltYWdlVVJMcyA9IHRoaXMuaW1hZ2VVUkxWMTsgXHJcbiAgICB9XHJcblxyXG4gIFxyXG5cclxufVxyXG5uZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgbGV0IHByZXZFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1vZGFsLWRpYWxvZyAuY2Fyb3VzZWwtY29udHJvbC1wcmV2Jyk7XHJcbiAgICAgIHByZXZFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3N0eWxlJyxcImRpc3BsYXk6bm9uZVwiKVxyXG59XHJcblxyXG5vblNsaWRlQ2hhbmdlXHJcbihzbGlkZUV2ZW50OiBOZ2JTbGlkZUV2ZW50KSB7XHJcbiAgXHJcbmNvbnN0XHJcbiAgc2xpZGVJbmRleCA9ICtzbGlkZUV2ZW50LmN1cnJlbnQuXHJcbiAgICByZXBsYWNlXHJcbiAgICAoXHJcbiAgICAgICduZ2Itc2xpZGUtJ1xyXG4gICAgICAsXHJcbiAgICAgICcnXHJcbiAgICApOyB0aGlzLmN1cnJlbnRTbGlkZSA9IHNsaWRlSW5kZXg7IFxyXG4gICAgbGV0IHByZXZFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1vZGFsLWRpYWxvZyAuY2Fyb3VzZWwtY29udHJvbC1wcmV2Jyk7XHJcbiAgICBsZXQgbmV4dEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubW9kYWwtZGlhbG9nIC5jYXJvdXNlbC1jb250cm9sLW5leHQnKTtcclxuICAgIGlmKHRoaXMuY3VycmVudFNsaWRlID09IDApIHtcclxuICAgICAgbmV4dEVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgaWYocHJldkVsZW1lbnQpIHtcclxuICAgICAgICBwcmV2RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJyxcImRpc3BsYXk6bm9uZVwiKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmN1cnJlbnRTbGlkZSA9PT0gdGhpcy5vdmVyYWxsU3RvcmVEYXRhLkltYWdlVVJMcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHByZXZFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgIGlmKG5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgbmV4dEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsXCJkaXNwbGF5Om5vbmVcIilcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHByZXZFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgIG5leHRFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICB9XHJcbn1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG48bmdiLWNhcm91c2VsICNjYXJvdXNlbDE9XCJuZ2JDYXJvdXNlbFwiIFtpbnRlcnZhbF09XCIwXCIgKHNsaWRlKT1cIm9uU2xpZGVDaGFuZ2UoJGV2ZW50KVwiIFtwYXVzZU9uSG92ZXJdPVwidHJ1ZVwiICpuZ0lmPVwib3ZlcmFsbFN0b3JlRGF0YT8uSW1hZ2VVUkxzPy5sZW5ndGhcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIG92ZXJhbGxTdG9yZURhdGEuSW1hZ2VVUkxzOyBsZXQgaT0gaW5kZXg7XCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JTbGlkZSBbaWRdPVwiJ25nYi1zbGlkZS0nKyBpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlLlVSTFwiIFthbHRdPVwiaW1hZ2Uuc3RyZWFtTmFtZVwiIGNsYXNzPVwiY2FyZGltZ1wiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nYi1jYXJvdXNlbD5cclxuICA8L2Rpdj5cclxuICAiXX0=