UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

90 lines (88 loc) 15.1 kB
/* MIT License Copyright (c) 2018 Temainfo Software Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { Component, ContentChildren, EventEmitter, Input, Output } from '@angular/core'; import { StepService } from './services/step.service'; import { TlStepForm } from './parts/step-form/step-form'; import { Subscription } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "./services/step.service"; import * as i2 from "@angular/common"; export class TlStep { set initialStep(value) { if (value) { this.stepService.setCurrentStep(value); } } get stepsArray() { return this.steps.toArray(); } constructor(stepService) { this.stepService = stepService; this.finish = new EventEmitter(); this.changeStep = new EventEmitter(); this.selected = 0; this.subscription = new Subscription(); } ngOnInit() { this.onChange(); this.onFinish(); } ngAfterContentInit() { this.stepService.setSteps(this.steps.toArray()); this.steps.first.selected = true; this.selected = this.steps.toArray().findIndex((item) => item.selected); } onChange() { this.subscription.add(this.stepService.onChange.subscribe((step) => { this.selected = step; this.closeAll(); this.steps.toArray()[step].selected = true; this.changeStep.emit(step); })); } onFinish() { this.subscription.add(this.stepService.onFinish.subscribe((steps) => { this.finish.emit(steps); })); } closeAll() { this.steps.forEach((item) => item.selected = false); } ngOnDestroy() { this.subscription.unsubscribe(); } } /** @nocollapse */ TlStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlStep, deps: [{ token: i1.StepService }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TlStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlStep, selector: "tl-step", inputs: { initialStep: "initialStep" }, outputs: { finish: "finish", changeStep: "changeStep" }, providers: [StepService], queries: [{ propertyName: "steps", predicate: TlStepForm }], ngImport: i0, template: "<div class=\"step-wrapper\">\n <div class=\"step-item\" *ngFor=\"let item of stepsArray; let i = index; let last = last\">\n <ng-container *ngIf=\"!item.templateIcon\">\n <div class=\"circle\" [class.selected]=\"selected === i\">{{ i + 1 }}</div>\n </ng-container>\n <div class=\"step-icon\">\n <ng-container *ngTemplateOutlet=\"item?.templateIcon\"></ng-container>\n </div>\n <span class=\"label\" [class.selected]=\"selected === i\">{{ item?.label }}</span>\n <div class=\"separator\" *ngIf=\"!last\"><div class=\"line\"></div></div>\n </div>\n</div>\n<div class=\"step-content\">\n <ng-content></ng-content>\n</div>\n", styles: [".step-wrapper{display:flex;align-items:center}.step-wrapper>.step-item{display:flex;align-items:center;justify-content:flex-start;flex:1;padding:0 10px;box-sizing:border-box}.step-wrapper>.step-item>.circle{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .3s ease-in-out}.step-wrapper>.step-item>.circle.selected{border:0}.step-wrapper>.step-item>.label{padding:0 10px;white-space:nowrap}.step-wrapper>.step-item>.label.selected{font-weight:600}.step-wrapper>.step-item>.step-icon{font-size:32px}.step-wrapper>.step-item>.separator{height:40px;width:100%;display:flex;align-items:center;justify-content:center}.step-wrapper>.step-item>.separator .line{height:1px;width:100%}.step-wrapper>.step-item:last-child{flex:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlStep, decorators: [{ type: Component, args: [{ selector: 'tl-step', providers: [StepService], template: "<div class=\"step-wrapper\">\n <div class=\"step-item\" *ngFor=\"let item of stepsArray; let i = index; let last = last\">\n <ng-container *ngIf=\"!item.templateIcon\">\n <div class=\"circle\" [class.selected]=\"selected === i\">{{ i + 1 }}</div>\n </ng-container>\n <div class=\"step-icon\">\n <ng-container *ngTemplateOutlet=\"item?.templateIcon\"></ng-container>\n </div>\n <span class=\"label\" [class.selected]=\"selected === i\">{{ item?.label }}</span>\n <div class=\"separator\" *ngIf=\"!last\"><div class=\"line\"></div></div>\n </div>\n</div>\n<div class=\"step-content\">\n <ng-content></ng-content>\n</div>\n", styles: [".step-wrapper{display:flex;align-items:center}.step-wrapper>.step-item{display:flex;align-items:center;justify-content:flex-start;flex:1;padding:0 10px;box-sizing:border-box}.step-wrapper>.step-item>.circle{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .3s ease-in-out}.step-wrapper>.step-item>.circle.selected{border:0}.step-wrapper>.step-item>.label{padding:0 10px;white-space:nowrap}.step-wrapper>.step-item>.label.selected{font-weight:600}.step-wrapper>.step-item>.step-icon{font-size:32px}.step-wrapper>.step-item>.separator{height:40px;width:100%;display:flex;align-items:center;justify-content:center}.step-wrapper>.step-item>.separator .line{height:1px;width:100%}.step-wrapper>.step-item:last-child{flex:0}\n"] }] }], ctorParameters: function () { return [{ type: i1.StepService }]; }, propDecorators: { initialStep: [{ type: Input, args: ['initialStep'] }], steps: [{ type: ContentChildren, args: [TlStepForm] }], finish: [{ type: Output }], changeStep: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL3N0ZXAvc3RlcC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL3N0ZXAvc3RlcC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CRTtBQUVGLE9BQU8sRUFBbUIsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDdEksT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7O0FBUWxDLE1BQU0sT0FBTyxNQUFNO0lBRWpCLElBQ0ksV0FBVyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7SUFZRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBWmxDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTVCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5DLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFFWixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFPMUMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDekUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQzs7dUhBMURVLE1BQU07MkdBQU4sTUFBTSxtSUFGTixDQUFDLFdBQVcsQ0FBQyxnREFXUCxVQUFVLDZCQzFDN0IsNm9CQWVBOzRGRGtCYSxNQUFNO2tCQU5sQixTQUFTOytCQUNFLFNBQVMsYUFHUixDQUFDLFdBQVcsQ0FBQztrR0FLcEIsV0FBVztzQkFEZCxLQUFLO3VCQUFDLGFBQWE7Z0JBT1MsS0FBSztzQkFBakMsZUFBZTt1QkFBQyxVQUFVO2dCQUVqQixNQUFNO3NCQUFmLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgTUlUIExpY2Vuc2VcblxuICAgIENvcHlyaWdodCAoYykgMjAxOCBUZW1haW5mbyBTb2Z0d2FyZVxuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICAgIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAgICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gICAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICAgIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICAgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gICAgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gICAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gICAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgICBTT0ZUV0FSRS5cbiovXG5cbmltcG9ydCB7QWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N0ZXBTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL3N0ZXAuc2VydmljZSc7XG5pbXBvcnQge1RsU3RlcEZvcm19IGZyb20gJy4vcGFydHMvc3RlcC1mb3JtL3N0ZXAtZm9ybSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RsLXN0ZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RlcC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1N0ZXBTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBUbFN0ZXAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCdpbml0aWFsU3RlcCcpXG4gIHNldCBpbml0aWFsU3RlcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnN0ZXBTZXJ2aWNlLnNldEN1cnJlbnRTdGVwKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFRsU3RlcEZvcm0pIHN0ZXBzOiBRdWVyeUxpc3Q8VGxTdGVwRm9ybT47XG5cbiAgQE91dHB1dCgpIGZpbmlzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgY2hhbmdlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgc2VsZWN0ZWQgPSAwO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGdldCBzdGVwc0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLnRvQXJyYXkoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RlcFNlcnZpY2U6IFN0ZXBTZXJ2aWNlKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgdGhpcy5vbkZpbmlzaCgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuc3RlcFNlcnZpY2Uuc2V0U3RlcHModGhpcy5zdGVwcy50b0FycmF5KCkpO1xuICAgIHRoaXMuc3RlcHMuZmlyc3Quc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnN0ZXBzLnRvQXJyYXkoKS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQpO1xuICB9XG5cbiAgb25DaGFuZ2UoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuc3RlcFNlcnZpY2Uub25DaGFuZ2Uuc3Vic2NyaWJlKChzdGVwOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBzdGVwO1xuICAgICAgdGhpcy5jbG9zZUFsbCgpO1xuICAgICAgdGhpcy5zdGVwcy50b0FycmF5KClbc3RlcF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VTdGVwLmVtaXQoIHN0ZXAgKTtcbiAgICB9KSk7XG4gIH1cblxuICBvbkZpbmlzaCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5zdGVwU2VydmljZS5vbkZpbmlzaC5zdWJzY3JpYmUoKHN0ZXBzKSA9PiB7XG4gICAgICB0aGlzLmZpbmlzaC5lbWl0KHN0ZXBzKTtcbiAgICB9KSk7XG4gIH1cblxuICBjbG9zZUFsbCgpIHtcbiAgICB0aGlzLnN0ZXBzLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdGVwLXdyYXBwZXJcIj5cbiAgPGRpdiBjbGFzcz1cInN0ZXAtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN0ZXBzQXJyYXk7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS50ZW1wbGF0ZUljb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjaXJjbGVcIiBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWQgPT09IGlcIj57eyBpICsgMSB9fTwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJzdGVwLWljb25cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtPy50ZW1wbGF0ZUljb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkID09PSBpXCI+e3sgaXRlbT8ubGFiZWwgfX08L3NwYW4+XG4gICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiICpuZ0lmPVwiIWxhc3RcIj48ZGl2IGNsYXNzPVwibGluZVwiPjwvZGl2PjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInN0ZXAtY29udGVudFwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==