truly-ui
Version:
Web Components for Desktop Applications.
145 lines (143 loc) • 22.2 kB
JavaScript
/*
MIT License
Copyright (c) 2019 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, EventEmitter, Input, Output } from '@angular/core';
import { Md5 } from 'ts-md5/dist/md5';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../icons/icons";
import * as i3 from "./parts/image/image.component";
export class TlAvatar {
constructor() {
this.shape = 'square';
this.size = '100px';
this.gender = 'male';
this.color = 'basic';
this.selected = new EventEmitter();
this.type = 'gender';
}
ngOnInit() {
this.defineType();
}
defineType() {
if (this.isSrc()) {
this.setSrc();
return;
}
if (this.isGravatar()) {
this.setGravatar();
return;
}
if (this.isIcon()) {
this.setIcon();
return;
}
if (this.isText()) {
this.setText();
return;
}
if (this.isChar()) {
this.setChar();
return;
}
}
isSrc() {
return this.src && this.src !== '';
}
isGravatar() {
return this.gravatar && this.gravatar !== '';
}
isIcon() {
return this.icon && this.icon !== '';
}
isText() {
return this.text && this.text !== '';
}
isChar() {
return this.char && this.char !== '';
}
setSrc() {
this.type = 'src';
}
setGravatar() {
const sizeGravatar = (this.isPercentage()) ? '200px' : this.size;
this.gravatarImg = `http://www.gravatar.com/avatar/${Md5.hashStr(this.gravatar)}?s=${sizeGravatar}&d=mm`;
this.type = 'gravatar';
}
setIcon() {
this.multiplierIcon = (this.isPercentage()) ? 25 : 0.7;
this.type = 'icon';
}
setText() {
this.multiplierText = (this.isPercentage()) ? 8 : 0.2;
this.fontSize = (this.isOneCharacter()) ? '2em' : '1em';
this.type = 'text';
}
setChar() {
this.multiplierText = (this.isPercentage()) ? 8 : 0.2;
this.fontSize = '2em';
this.type = 'char';
this.char = this.char.substr(0, 1).toUpperCase();
}
isPercentage() {
return this.size.substr(this.size.length - 1) === '%';
}
isOneCharacter() {
return this.text && this.text.length === 1;
}
selectedAvatar($event) {
this.selected.emit($event);
}
ngOnChanges(changes) {
if (changes['gravatar']) {
this.defineType();
}
}
}
/** @nocollapse */ TlAvatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TlAvatar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlAvatar, selector: "tl-avatar", inputs: { shape: "shape", size: "size", src: "src", gravatar: "gravatar", icon: "icon", text: "text", char: "char", fontColor: "fontColor", bgColor: "bgColor", gender: "gender", color: "color" }, outputs: { selected: "selected" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"type === 'src'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [ngStyle]=\"{'background-image' : 'url(' + src + ')',\n 'background-repeat' : 'no-repeat',\n 'background-size' : 'cover',\n 'background-position': 'center'}\">\n</div>\n<div *ngIf=\"type === 'gravatar'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"!isPercentage() ? size : null\">\n <img [src]=\"gravatarImg\" [style.width]=\"size\" [class]=\"shape\">\n</div>\n<div *ngIf=\"type === 'icon'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <tl-icon [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierIcon + ')'}\" [style.color]=\"fontColor\">{{ icon }}</tl-icon>\n</div>\n<div *ngIf=\"type === 'text'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <div [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierText + ')'}\">\n <span [ngStyle]=\"{'font-size': fontSize}\" [style.color]=\"fontColor\">{{ text }}</span>\n </div>\n</div>\n<div *ngIf=\"type === 'char'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <div [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierText + ')'}\">\n <span [ngStyle]=\"{'font-size': fontSize}\" [style.color]=\"fontColor\">{{ char }}</span>\n </div>\n</div>\n<div *ngIf=\"type === 'gender'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\">\n <tl-image [size]=\"size\" [gender]=\"gender\" [shape]=\"shape\"></tl-image>\n</div>\n", styles: [".tl-avatar{display:inline-block;position:relative}.tl-avatar tl-icon,span{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.square{border-radius:3px}.circle{border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.TlIcons, selector: "tl-icon", inputs: ["icon", "lib", "style", "size", "animation", "color", "align"] }, { kind: "component", type: i3.ImageComponent, selector: "tl-image", inputs: ["size", "gender", "shape"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlAvatar, decorators: [{
type: Component,
args: [{ selector: 'tl-avatar', template: "<div *ngIf=\"type === 'src'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [ngStyle]=\"{'background-image' : 'url(' + src + ')',\n 'background-repeat' : 'no-repeat',\n 'background-size' : 'cover',\n 'background-position': 'center'}\">\n</div>\n<div *ngIf=\"type === 'gravatar'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"!isPercentage() ? size : null\">\n <img [src]=\"gravatarImg\" [style.width]=\"size\" [class]=\"shape\">\n</div>\n<div *ngIf=\"type === 'icon'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <tl-icon [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierIcon + ')'}\" [style.color]=\"fontColor\">{{ icon }}</tl-icon>\n</div>\n<div *ngIf=\"type === 'text'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <div [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierText + ')'}\">\n <span [ngStyle]=\"{'font-size': fontSize}\" [style.color]=\"fontColor\">{{ text }}</span>\n </div>\n</div>\n<div *ngIf=\"type === 'char'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <div [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierText + ')'}\">\n <span [ngStyle]=\"{'font-size': fontSize}\" [style.color]=\"fontColor\">{{ char }}</span>\n </div>\n</div>\n<div *ngIf=\"type === 'gender'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\">\n <tl-image [size]=\"size\" [gender]=\"gender\" [shape]=\"shape\"></tl-image>\n</div>\n", styles: [".tl-avatar{display:inline-block;position:relative}.tl-avatar tl-icon,span{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.square{border-radius:3px}.circle{border-radius:50%}\n"] }]
}], ctorParameters: function () { return []; }, propDecorators: { shape: [{
type: Input
}], size: [{
type: Input
}], src: [{
type: Input
}], gravatar: [{
type: Input
}], icon: [{
type: Input
}], text: [{
type: Input
}], char: [{
type: Input
}], fontColor: [{
type: Input
}], bgColor: [{
type: Input
}], gender: [{
type: Input
}], color: [{
type: Input
}], selected: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQkU7QUFFRixPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFPdEMsTUFBTSxPQUFPLFFBQVE7SUFvQ25CO1FBbENTLFVBQUssR0FBRyxRQUFRLENBQUM7UUFFakIsU0FBSSxHQUFHLE9BQU8sQ0FBQztRQWdCZixXQUFNLEdBQXNCLE1BQU0sQ0FBQztRQUVuQyxVQUFLLEdBQUcsT0FBTyxDQUFDO1FBRWYsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpELFNBQUksR0FBRyxRQUFRLENBQUM7SUFVUCxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRztZQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxPQUFPO1NBQ1I7UUFDRCxJQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRztZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO1FBQ0QsSUFBSyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUc7WUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSyxJQUFJLENBQUMsTUFBTSxFQUFF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SUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBRSxPQUFPO1FBQ2xCLElBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFHO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7O3lIQWpJVSxRQUFROzZHQUFSLFFBQVEsNlNDckNyQiwyM0RBNkNBOzRGRFJhLFFBQVE7a0JBTHBCLFNBQVM7K0JBQ0UsV0FBVzswRUFNWixLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgTUlUIExpY2Vuc2VcblxuICAgIENvcHlyaWdodCAoYykgMjAxOSBUZW1haW5mbyBTb2Z0d2FyZVxuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICAgIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAgICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gICAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICAgIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICAgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gICAgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gICAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gICAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgICBTT0ZUV0FSRS5cbiovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1kNSB9IGZyb20gJ3RzLW1kNS9kaXN0L21kNSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RsLWF2YXRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdmF0YXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F2YXRhci5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRsQXZhdGFyIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIHNoYXBlID0gJ3NxdWFyZSc7XG5cbiAgQElucHV0KCkgc2l6ZSA9ICcxMDBweCc7XG5cbiAgQElucHV0KCkgc3JjOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZ3JhdmF0YXI6IHN0cmluZztcblxuICBASW5wdXQoKSBpY29uOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgdGV4dDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGNoYXI6IHN0cmluZztcblxuICBASW5wdXQoKSBmb250Q29sb3I6IHN0cmluZztcblxuICBASW5wdXQoKSBiZ0NvbG9yOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZ2VuZGVyOiAnZmVtYWxlJyB8ICdtYWxlJyA9ICdtYWxlJztcblxuICBASW5wdXQoKSBjb2xvciA9ICdiYXNpYyc7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHB1YmxpYyB0eXBlID0gJ2dlbmRlcic7XG5cbiAgcHVibGljIG11bHRpcGxpZXJJY29uO1xuXG4gIHB1YmxpYyBtdWx0aXBsaWVyVGV4dDtcblxuICBwdWJsaWMgZm9udFNpemU7XG5cbiAgcHVibGljIGdyYXZhdGFySW1nO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZWZpbmVUeXBlKCk7XG4gIH1cblxuICBkZWZpbmVUeXBlKCkge1xuICAgIGlmICggdGhpcy5pc1NyYygpICkge1xuICAgICAgdGhpcy5zZXRTcmMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCB0aGlzLmlzR3JhdmF0YXIoKSApIHtcbiAgICAgIHRoaXMuc2V0R3JhdmF0YXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCB0aGlzLmlzSWNvbigpICkge1xuICAgICAgdGhpcy5zZXRJY29uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICggdGhpcy5pc1RleHQoKSApIHtcbiAgICAgIHRoaXMuc2V0VGV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIHRoaXMuaXNDaGFyKCkgKSB7XG4gICAgICB0aGlzLnNldENoYXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU3JjKCkge1xuICAgIHJldHVybiB0aGlzLnNyYyAmJiB0aGlzLnNyYyAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzR3JhdmF0YXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhdmF0YXIgJiYgdGhpcy5ncmF2YXRhciAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzSWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pY29uICYmIHRoaXMuaWNvbiAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzQ2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFyICYmIHRoaXMuY2hhciAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldFNyYygpIHtcbiAgICB0aGlzLnR5cGUgPSAnc3JjJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0R3JhdmF0YXIoKSB7XG4gICAgY29uc3Qgc2l6ZUdyYXZhdGFyID0gKCB0aGlzLmlzUGVyY2VudGFnZSgpICkgPyAnMjAwcHgnIDogdGhpcy5zaXplO1xuICAgIHRoaXMuZ3JhdmF0YXJJbWcgPSBgaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLyR7TWQ1Lmhhc2hTdHIodGhpcy5ncmF2YXRhcil9P3M9JHtzaXplR3JhdmF0YXJ9JmQ9bW1gO1xuICAgIHRoaXMudHlwZSA9ICdncmF2YXRhcic7XG4gIH1cblxuICBwcml2YXRlIHNldEljb24oKSB7XG4gICAgdGhpcy5tdWx0aXBsaWVySWNvbiA9ICggdGhpcy5pc1BlcmNlbnRhZ2UoKSApID8gMjUgOiAwLjc7XG4gICAgdGhpcy50eXBlID0gJ2ljb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUZXh0KCkge1xuICAgIHRoaXMubXVsdGlwbGllclRleHQgPSAoIHRoaXMuaXNQZXJjZW50YWdlKCkgKSA/IDggOiAwLjI7XG4gICAgdGhpcy5mb250U2l6ZSA9ICggdGhpcy5pc09uZUNoYXJhY3RlcigpICkgPyAnMmVtJyA6ICcxZW0nO1xuICAgIHRoaXMudHlwZSA9ICd0ZXh0JztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcigpIHtcbiAgICB0aGlzLm11bHRpcGxpZXJUZXh0ID0gKCB0aGlzLmlzUGVyY2VudGFnZSgpICkgPyA4IDogMC4yO1xuICAgIHRoaXMuZm9udFNpemUgPSAnMmVtJztcbiAgICB0aGlzLnR5cGUgPSAnY2hhcic7XG4gICAgdGhpcy5jaGFyID0gdGhpcy5jaGFyLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgcHVibGljIGlzUGVyY2VudGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplLnN1YnN0cih0aGlzLnNpemUubGVuZ3RoIC0gMSkgPT09ICclJztcbiAgfVxuXG4gIHByaXZhdGUgaXNPbmVDaGFyYWN0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCAmJiB0aGlzLnRleHQubGVuZ3RoID09PSAxO1xuICB9XG5cbiAgc2VsZWN0ZWRBdmF0YXIoJGV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RlZC5lbWl0KCRldmVudCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyggY2hhbmdlcyApIHtcbiAgICBpZiAoIGNoYW5nZXNbJ2dyYXZhdGFyJ10gKSB7XG4gICAgICB0aGlzLmRlZmluZVR5cGUoKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiAqbmdJZj1cInR5cGUgPT09ICdzcmMnXCJcbiAgICAgW2NsYXNzXT1cIid0bC1hdmF0YXIgJyArIGNvbG9yICsgJyAnICsgc2hhcGVcIlxuICAgICBbc3R5bGUud2lkdGhdPVwic2l6ZVwiXG4gICAgIFtzdHlsZS5oZWlnaHRdPVwic2l6ZVwiXG4gICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1pbWFnZScgICA6ICd1cmwoJyArIHNyYyArICcpJyxcbiAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtcmVwZWF0JyAgOiAnbm8tcmVwZWF0JyxcbiAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZScgICAgOiAnY292ZXInLFxuICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbic6ICdjZW50ZXInfVwiPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2dyYXZhdGFyJ1wiXG4gICAgIFtjbGFzc109XCIndGwtYXZhdGFyICcgKyBjb2xvciArICcgJyArIHNoYXBlXCJcbiAgICAgW3N0eWxlLndpZHRoXT1cInNpemVcIlxuICAgICBbc3R5bGUuaGVpZ2h0XT1cIiFpc1BlcmNlbnRhZ2UoKSA/IHNpemUgOiBudWxsXCI+XG4gIDxpbWcgW3NyY109XCJncmF2YXRhckltZ1wiIFtzdHlsZS53aWR0aF09XCJzaXplXCIgW2NsYXNzXT1cInNoYXBlXCI+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJ0eXBlID09PSAnaWNvbidcIlxuICAgICBbY2xhc3NdPVwiJ3RsLWF2YXRhciAnICsgY29sb3IgKyAnICcgKyBzaGFwZVwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJzaXplXCJcbiAgICAgW3N0eWxlLmhlaWdodF09XCJzaXplXCJcbiAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiYmdDb2xvclwiPlxuICA8dGwtaWNvbiBbbmdTdHlsZV09XCJ7J2ZvbnQtc2l6ZSc6ICdjYWxjKCcgKyBzaXplICsgJyAqICcgKyBtdWx0aXBsaWVySWNvbiArICcpJ31cIiBbc3R5bGUuY29sb3JdPVwiZm9udENvbG9yXCI+e3sgaWNvbiB9fTwvdGwtaWNvbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cInR5cGUgPT09ICd0ZXh0J1wiXG4gICAgIFtjbGFzc109XCIndGwtYXZhdGFyICcgKyBjb2xvciArICcgJyArIHNoYXBlXCJcbiAgICAgW3N0eWxlLndpZHRoXT1cInNpemVcIlxuICAgICBbc3R5bGUuaGVpZ2h0XT1cInNpemVcIlxuICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJiZ0NvbG9yXCI+XG4gIDxkaXYgW25nU3R5bGVdPVwieydmb250LXNpemUnOiAnY2FsYygnICsgc2l6ZSArICcgKiAnICsgbXVsdGlwbGllclRleHQgKyAnKSd9XCI+XG4gICAgPHNwYW4gW25nU3R5bGVdPVwieydmb250LXNpemUnOiBmb250U2l6ZX1cIiBbc3R5bGUuY29sb3JdPVwiZm9udENvbG9yXCI+e3sgdGV4dCB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJ0eXBlID09PSAnY2hhcidcIlxuICAgICBbY2xhc3NdPVwiJ3RsLWF2YXRhciAnICsgY29sb3IgKyAnICcgKyBzaGFwZVwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJzaXplXCJcbiAgICAgW3N0eWxlLmhlaWdodF09XCJzaXplXCJcbiAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiYmdDb2xvclwiPlxuICA8ZGl2IFtuZ1N0eWxlXT1cInsnZm9udC1zaXplJzogJ2NhbGMoJyArIHNpemUgKyAnICogJyArIG11bHRpcGxpZXJUZXh0ICsgJyknfVwiPlxuICAgIDxzcGFuIFtuZ1N0eWxlXT1cInsnZm9udC1zaXplJzogZm9udFNpemV9XCIgW3N0eWxlLmNvbG9yXT1cImZvbnRDb2xvclwiPnt7IGNoYXIgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2dlbmRlcidcIlxuICAgICBbY2xhc3NdPVwiJ3RsLWF2YXRhciAnICsgY29sb3IgKyAnICcgKyBzaGFwZVwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJzaXplXCI+XG4gIDx0bC1pbWFnZSBbc2l6ZV09XCJzaXplXCIgW2dlbmRlcl09XCJnZW5kZXJcIiBbc2hhcGVdPVwic2hhcGVcIj48L3RsLWltYWdlPlxuPC9kaXY+XG4iXX0=