ctt-babylon 0.1.188 → 0.1.190
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.
- package/esm2022/lib/components/core/babylon-color-picker/babylon-color-picker.component.mjs +23 -20
- package/esm2022/lib/components/core/babylon-contact-form/babylon-contact-form.component.mjs +3 -3
- package/esm2022/lib/components/core/babylon-engine/babylon-engine.component.mjs +7 -6
- package/esm2022/lib/components/core/babylon-engine-modal/babylon-engine-modal.component.mjs +6 -5
- package/esm2022/lib/components/core/babylon-modal-menu/babylon-modal-menu.component.mjs +3 -3
- package/esm2022/lib/components/core/babylon-room-details/babylon-room-details.component.mjs +3 -19
- package/esm2022/lib/directives/babylon-sliders/babylon-sliders.directive.mjs +8 -23
- package/esm2022/lib/services/mapper/mapper.service.mjs +4 -4
- package/fesm2022/ctt-babylon.mjs +46 -73
- package/fesm2022/ctt-babylon.mjs.map +1 -1
- package/lib/components/core/babylon-color-picker/babylon-color-picker.component.d.ts +4 -3
- package/lib/components/core/babylon-room-details/babylon-room-details.component.d.ts +1 -6
- package/lib/directives/babylon-sliders/babylon-sliders.directive.d.ts +0 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
2
|
-
import { Component, Inject,
|
|
2
|
+
import { Component, Inject, PLATFORM_ID, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
3
3
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../../../services/color-panel.service";
|
|
@@ -11,8 +11,8 @@ export class BabylonColorPickerComponent {
|
|
|
11
11
|
this.renderer = renderer;
|
|
12
12
|
this.platformId = platformId;
|
|
13
13
|
this.fb = fb;
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
14
|
+
this.userPanelInternal = '';
|
|
15
|
+
this.passPanelInternal = '';
|
|
16
16
|
this.googleFontsApiKey = 'AIzaSyAVbzzOmAJfsAsi951e636ym-ABWy2BOMA';
|
|
17
17
|
this.mostrarPanel = false;
|
|
18
18
|
this.loginHecho = false;
|
|
@@ -37,22 +37,13 @@ export class BabylonColorPickerComponent {
|
|
|
37
37
|
this.mostrarPanel = params.has('activar_panel');
|
|
38
38
|
const storedTab = this.colorService.getStoredTab(this.tabs);
|
|
39
39
|
this.activeTab = storedTab;
|
|
40
|
-
const storedSession = sessionStorage.getItem('panel-login-ok');
|
|
41
|
-
if (storedSession === 'true') {
|
|
42
|
-
this.loginHecho = true;
|
|
43
|
-
const variables = this.colorService.getAllCSSVariables();
|
|
44
|
-
this.groupedVariables =
|
|
45
|
-
this.colorService.groupByCategory(variables);
|
|
46
|
-
this.colorService.fetchGoogleFonts(this.googleFontsApiKey);
|
|
47
|
-
this.setInitialFontValues();
|
|
48
|
-
}
|
|
49
40
|
this.renderer.listen('window', 'mousemove', (e) => this.onDragMove(e));
|
|
50
41
|
this.renderer.listen('window', 'mouseup', () => this.onDragEnd());
|
|
51
42
|
}
|
|
52
43
|
}
|
|
53
44
|
async login() {
|
|
54
45
|
const { email, password } = this.loginForm.value;
|
|
55
|
-
if (email === this.
|
|
46
|
+
if (email === this.userPanelInternal && password === this.passPanelInternal) {
|
|
56
47
|
this.loginHecho = true;
|
|
57
48
|
sessionStorage.setItem('panel-login-ok', 'true');
|
|
58
49
|
const variables = this.colorService.getAllCSSVariables();
|
|
@@ -219,8 +210,24 @@ export class BabylonColorPickerComponent {
|
|
|
219
210
|
parseInt(g).toString(16).padStart(2, '0') +
|
|
220
211
|
parseInt(b).toString(16).padStart(2, '0'));
|
|
221
212
|
}
|
|
213
|
+
setCredentials(user, pass) {
|
|
214
|
+
this.userPanelInternal = user;
|
|
215
|
+
this.passPanelInternal = pass;
|
|
216
|
+
const params = new URLSearchParams(window.location.search);
|
|
217
|
+
this.mostrarPanel = params.has('activar_panel');
|
|
218
|
+
if (this.mostrarPanel) {
|
|
219
|
+
const storedSession = sessionStorage.getItem('panel-login-ok');
|
|
220
|
+
if (storedSession === 'true') {
|
|
221
|
+
this.loginHecho = true;
|
|
222
|
+
const variables = this.colorService.getAllCSSVariables();
|
|
223
|
+
this.groupedVariables = this.colorService.groupByCategory(variables);
|
|
224
|
+
this.colorService.fetchGoogleFonts(this.googleFontsApiKey);
|
|
225
|
+
this.setInitialFontValues();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
222
229
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonColorPickerComponent, deps: [{ token: i1.ColorPickerService }, { token: i0.Renderer2 }, { token: PLATFORM_ID }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
223
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BabylonColorPickerComponent, isStandalone: true, selector: "lib-babylon-color-picker", inputs: { userPanel: "userPanel", passPanel: "passPanel" }, viewQueries: [{ propertyName: "panelRef", first: true, predicate: ["panel"], descendants: true }], ngImport: i0, template: "<!-- Mostrar TODO solo si mostrarPanel es true -->\n@if (mostrarPanel) {\n\n <!-- LOGIN PANEL -->\n @if (!loginHecho) {\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"login()\">\n <div class=\"login-panel\">\n <h2>Panel de estilos</h2>\n <input\n type=\"text\"\n placeholder=\"Usuario\"\n formControlName=\"email\"\n (keydown.enter)=\"login()\"\n />\n <input\n type=\"password\"\n placeholder=\"Contrase\u00F1a\"\n formControlName=\"password\"\n (keydown.enter)=\"login()\"\n />\n <button type=\"submit\">Entrar</button>\n </div>\n </form>\n } @else {\n <!-- ESTILO PANEL -->\n <div\n #panel\n class=\"color-picker-panel\"\n [class.minimizado]=\"minimizado\"\n (mousedown)=\"onDragStart($event)\"\n >\n <div class=\"drag-header\">\n <h1>Panel de estilos</h1>\n <button\n class=\"minimize-btn\"\n (click)=\"toggleMinimizado()\"\n title=\"Minimizar/Restaurar panel\"\n >\n {{ minimizado ? '\uFF0B' : '\uFF0D' }}\n </button>\n </div>\n\n @if (!minimizado) {\n <div class=\"tabs\">\n @for (tab of tabs; track tab) {\n <button\n [class.active]=\"activeTab === tab\"\n (click)=\"setActiveTab(tab)\"\n >\n {{ tab }}\n </button>\n }\n </div>\n\n <div class=\"reset-export-container\">\n <button class=\"reset-button\" (click)=\"resetColors()\">Resetear estilos</button>\n <button class=\"export-button\" (click)=\"exportCSS()\">Exportar CSS</button>\n </div>\n\n <div class=\"groups-wrapper\">\n @for (group of groupedVariables | keyvalue; track group.key) {\n @if (getTabForGroup(group.key) === activeTab) {\n <div class=\"group-box\">\n <div class=\"group-header\" (click)=\"toggleGroup(group.key)\">\n <h2>{{ group.key }}</h2>\n <span class=\"arrow\" [class.expanded]=\"isGroupExpanded(group.key)\">\u2335</span>\n </div>\n\n @if (isGroupExpanded(group.key)) {\n <div class=\"group-content\">\n @for (variable of group.value; track variable.name) {\n <div class=\"color-picker-item\">\n <label>{{ variable.name.replace('--', '') }}</label>\n\n @if (isColor(variable.value)) {\n <input\n type=\"color\"\n [value]=\"getHexForColorInput(variable.name)\"\n (input)=\"changeColor($event, variable.name)\"\n />\n } @else {\n @if (['T\u00EDtulos', 'Pret\u00EDtulos', 'Subt\u00EDtulos', 'Textos', 'Fuentes', 'Tipograf\u00EDas'].includes(group.key)) {\n <select\n [value]=\"fontValues[variable.name]\"\n (change)=\"updateFontVariable($event, variable.name)\"\n >\n <optgroup label=\"Fuentes del proyecto\">\n @for (font of colorService.projectFonts; track font) {\n @if (!['font-title', 'font-pretitle', 'font-text', 'font-claim'].includes(font)) {\n <option [value]=\"font\">{{ font }}</option>\n }\n }\n </optgroup>\n\n <optgroup label=\"Google Fonts\">\n @for (font of colorService.googleFonts; track font) {\n <option [value]=\"font\">{{ font }}</option>\n }\n </optgroup>\n </select>\n } @else {\n <input\n type=\"text\"\n [value]=\"variable.value\"\n (input)=\"changeColor($event, variable.name)\"\n />\n }\n }\n\n <div class=\"tooltip-container\">\n <button class=\"copy-btn\" (click)=\"copyToClipboard(variable.value, variable.name)\">\n \uD83D\uDCCB\n </button>\n <span class=\"tooltip-text\">Copiar</span>\n </div>\n\n @if (wasCopied(variable.name)) {\n <span class=\"copied-msg\">Copiado \u2714\uFE0F</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n}\n", styles: [".login-panel{all:initial;position:fixed;top:50px;left:50px;width:350px;background:#333;box-shadow:0 8px 20px #0000001a;padding:1rem;z-index:100000;display:flex;flex-direction:column;gap:.5rem;font-family:var(--font-text)}.login-panel *{all:revert;font-family:var(--font-text)}.login-panel h2{margin-top:0;font-size:1.2rem;text-align:center;color:#fff;margin-bottom:.2rem}.login-panel input{padding:.5rem;font-size:1rem;border:1px solid #ccc;border-radius:0;font-size:12px;outline-color:#aa8453}.login-panel button{background-color:#aa8453;color:#fff;border:none;border-radius:0;padding:.6rem;cursor:pointer;font-weight:700}.login-panel button:hover{background-color:#6d5639}.color-picker-panel{all:initial;position:fixed;top:50px;left:50px;width:450px;height:400px;max-width:95%;max-height:80vh;overflow-y:auto;overflow-x:hidden;background:#333;border-radius:0;box-shadow:0 8px 20px #0000001a;z-index:100000;-webkit-user-select:none;user-select:none;cursor:grab;scrollbar-gutter:stable;font-family:sans-serif;padding-bottom:20px;color:#fff;font-weight:100;font-family:var(--font-text)}.color-picker-panel *{all:revert;font-family:var(--font-text);font-weight:100}.color-picker-panel:active{cursor:grabbing}.color-picker-panel.minimizado{height:auto;width:450px;overflow:hidden;padding-bottom:.5rem}.drag-header{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10;background:#333;padding:.5rem;border-bottom:0;border-radius:0}.drag-header h1{font-size:1.2rem;margin:0;-webkit-user-select:none;user-select:none;text-align:center;flex-grow:1}.drag-header .minimize-btn{background:none;background-color:#ffffff40;color:#fff;border:none;font-size:1.2rem;cursor:pointer;padding:.2rem .5rem;-webkit-user-select:none;user-select:none}.drag-header .minimize-btn:hover{transform:scale(1.1)}.tabs{display:flex;border-bottom:1px solid #aa8453}.tabs button{flex:1;padding:.5rem;background:#aa9a85;border:none;cursor:pointer;color:#e4d9cb;font-weight:100;font-size:.8rem}.tabs button.active{background:#aa8453;border-bottom:2px solid #6d5639}.tabs button:hover{background:#6d5639}.reset-export-container{display:flex;flex-direction:row;gap:.5rem;padding:.5rem}.reset-button{width:100%;background-color:#aa8453;color:#fff;padding:.5rem;border:none;border-radius:0;cursor:pointer;margin:.5rem 0;font-size:.95rem;transition:all .5s ease}.reset-button:hover{background-color:#6d5639}.export-button{width:100%;background-color:#fff;color:#aa8453;padding:.5rem;border:none;border-radius:0;cursor:pointer;margin:.5rem 0;font-size:.95rem;transition:all .5s ease}.export-button:hover{background-color:#6d5639;color:#fff}.groups-wrapper{display:flex;flex-direction:column;gap:.5rem;padding:0 .5rem}.group-box{background:#4e4c4cf0;border-radius:0;padding:.2rem .5rem}.group-header{display:flex;justify-content:space-between;align-items:center;cursor:pointer}.group-header h2{font-size:14px;margin:0;font-weight:100}.group-header .arrow{font-size:1.2rem;transition:transform .3s ease}.group-header .arrow.expanded{transform:rotate(180deg)}.group-content{margin-top:.5rem}.color-picker-item{display:flex;align-items:center;gap:.5rem;margin-bottom:5px}.color-picker-item label{flex:1;font-size:.75rem;color:#fff;white-space:nowrap}.color-picker-item input[type=color]{width:45px;height:28px;padding:0;border:1px solid #ccc;border-radius:4px;flex-shrink:0}.color-picker-item input[type=text],.color-picker-item select{width:140px;height:28px;padding:0 .4rem;font-size:.85rem;border:1px solid #ccc;border-radius:4px}.color-picker-item .tooltip-container{position:relative;display:inline-block}.color-picker-item .tooltip-container .copy-btn{flex-shrink:0;font-size:1rem;background:none;border:none;cursor:pointer;padding:.3rem}.color-picker-item .tooltip-container .copy-btn:hover{transform:scale(1.1)}.color-picker-item .tooltip-container .copy-btn:hover+.tooltip-text{opacity:1;visibility:visible}.color-picker-item .tooltip-container .tooltip-text{position:absolute;bottom:120%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:.3rem .5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .2s ease;z-index:1000}.color-picker-item .copied-msg{font-size:.75rem;color:green;margin-left:auto;animation:fadeOut 1s ease forwards}@keyframes fadeOut{0%{opacity:1}80%{opacity:1}to{opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
|
|
230
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BabylonColorPickerComponent, isStandalone: true, selector: "lib-babylon-color-picker", viewQueries: [{ propertyName: "panelRef", first: true, predicate: ["panel"], descendants: true }], ngImport: i0, template: "<!-- Mostrar TODO solo si mostrarPanel es true -->\n@if (mostrarPanel) {\n\n <!-- LOGIN PANEL -->\n @if (!loginHecho) {\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"login()\">\n <div class=\"login-panel\">\n <h2>Panel de estilos</h2>\n <input\n type=\"text\"\n placeholder=\"Usuario\"\n formControlName=\"email\"\n (keydown.enter)=\"login()\"\n />\n <input\n type=\"password\"\n placeholder=\"Contrase\u00F1a\"\n formControlName=\"password\"\n (keydown.enter)=\"login()\"\n />\n <button type=\"submit\">Entrar</button>\n </div>\n </form>\n } @else {\n <!-- ESTILO PANEL -->\n <div\n #panel\n class=\"color-picker-panel\"\n [class.minimizado]=\"minimizado\"\n (mousedown)=\"onDragStart($event)\"\n >\n <div class=\"drag-header\">\n <h1>Panel de estilos</h1>\n <button\n class=\"minimize-btn\"\n (click)=\"toggleMinimizado()\"\n title=\"Minimizar/Restaurar panel\"\n >\n {{ minimizado ? '\uFF0B' : '\uFF0D' }}\n </button>\n </div>\n\n @if (!minimizado) {\n <div class=\"tabs\">\n @for (tab of tabs; track tab) {\n <button\n [class.active]=\"activeTab === tab\"\n (click)=\"setActiveTab(tab)\"\n >\n {{ tab }}\n </button>\n }\n </div>\n\n <div class=\"reset-export-container\">\n <button class=\"reset-button\" (click)=\"resetColors()\">Resetear estilos</button>\n <button class=\"export-button\" (click)=\"exportCSS()\">Exportar CSS</button>\n </div>\n\n <div class=\"groups-wrapper\">\n @for (group of groupedVariables | keyvalue; track group.key) {\n @if (getTabForGroup(group.key) === activeTab) {\n <div class=\"group-box\">\n <div class=\"group-header\" (click)=\"toggleGroup(group.key)\">\n <h2>{{ group.key }}</h2>\n <span class=\"arrow\" [class.expanded]=\"isGroupExpanded(group.key)\">\u2335</span>\n </div>\n\n @if (isGroupExpanded(group.key)) {\n <div class=\"group-content\">\n @for (variable of group.value; track variable.name) {\n <div class=\"color-picker-item\">\n <label>{{ variable.name.replace('--', '') }}</label>\n\n @if (isColor(variable.value)) {\n <input\n type=\"color\"\n [value]=\"getHexForColorInput(variable.name)\"\n (input)=\"changeColor($event, variable.name)\"\n />\n } @else {\n @if (['T\u00EDtulos', 'Pret\u00EDtulos', 'Subt\u00EDtulos', 'Textos', 'Fuentes', 'Tipograf\u00EDas'].includes(group.key)) {\n <select\n [value]=\"fontValues[variable.name]\"\n (change)=\"updateFontVariable($event, variable.name)\"\n >\n <optgroup label=\"Fuentes del proyecto\">\n @for (font of colorService.projectFonts; track font) {\n @if (!['font-title', 'font-pretitle', 'font-text', 'font-claim'].includes(font)) {\n <option [value]=\"font\">{{ font }}</option>\n }\n }\n </optgroup>\n\n <optgroup label=\"Google Fonts\">\n @for (font of colorService.googleFonts; track font) {\n <option [value]=\"font\">{{ font }}</option>\n }\n </optgroup>\n </select>\n } @else {\n <input\n type=\"text\"\n [value]=\"variable.value\"\n (input)=\"changeColor($event, variable.name)\"\n />\n }\n }\n\n <div class=\"tooltip-container\">\n <button class=\"copy-btn\" (click)=\"copyToClipboard(variable.value, variable.name)\">\n \uD83D\uDCCB\n </button>\n <span class=\"tooltip-text\">Copiar</span>\n </div>\n\n @if (wasCopied(variable.name)) {\n <span class=\"copied-msg\">Copiado \u2714\uFE0F</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n}\n", styles: [".login-panel{all:initial;position:fixed;top:50px;left:50px;width:350px;background:#333;box-shadow:0 8px 20px #0000001a;padding:1rem;z-index:100000;display:flex;flex-direction:column;gap:.5rem;font-family:var(--font-text)}.login-panel *{all:revert;font-family:var(--font-text)}.login-panel h2{margin-top:0;font-size:1.2rem;text-align:center;color:#fff;margin-bottom:.2rem}.login-panel input{padding:.5rem;font-size:1rem;border:1px solid #ccc;border-radius:0;font-size:12px;outline-color:#aa8453}.login-panel button{background-color:#aa8453;color:#fff;border:none;border-radius:0;padding:.6rem;cursor:pointer;font-weight:700}.login-panel button:hover{background-color:#6d5639}.color-picker-panel{all:initial;position:fixed;top:50px;left:50px;width:450px;height:400px;max-width:95%;max-height:80vh;overflow-y:auto;overflow-x:hidden;background:#333;border-radius:0;box-shadow:0 8px 20px #0000001a;z-index:100000;-webkit-user-select:none;user-select:none;cursor:grab;scrollbar-gutter:stable;font-family:sans-serif;padding-bottom:20px;color:#fff;font-weight:100;font-family:var(--font-text)}.color-picker-panel *{all:revert;font-family:var(--font-text);font-weight:100}.color-picker-panel:active{cursor:grabbing}.color-picker-panel.minimizado{height:auto;width:450px;overflow:hidden;padding-bottom:.5rem}.drag-header{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10;background:#333;padding:.5rem;border-bottom:0;border-radius:0}.drag-header h1{font-size:1.2rem;margin:0;-webkit-user-select:none;user-select:none;text-align:center;flex-grow:1}.drag-header .minimize-btn{background:none;background-color:#ffffff40;color:#fff;border:none;font-size:1.2rem;cursor:pointer;padding:.2rem .5rem;-webkit-user-select:none;user-select:none}.drag-header .minimize-btn:hover{transform:scale(1.1)}.tabs{display:flex;border-bottom:1px solid #aa8453}.tabs button{flex:1;padding:.5rem;background:#aa9a85;border:none;cursor:pointer;color:#e4d9cb;font-weight:100;font-size:.8rem}.tabs button.active{background:#aa8453;border-bottom:2px solid #6d5639}.tabs button:hover{background:#6d5639}.reset-export-container{display:flex;flex-direction:row;gap:.5rem;padding:.5rem}.reset-button{width:100%;background-color:#aa8453;color:#fff;padding:.5rem;border:none;border-radius:0;cursor:pointer;margin:.5rem 0;font-size:.95rem;transition:all .5s ease}.reset-button:hover{background-color:#6d5639}.export-button{width:100%;background-color:#fff;color:#aa8453;padding:.5rem;border:none;border-radius:0;cursor:pointer;margin:.5rem 0;font-size:.95rem;transition:all .5s ease}.export-button:hover{background-color:#6d5639;color:#fff}.groups-wrapper{display:flex;flex-direction:column;gap:.5rem;padding:0 .5rem}.group-box{background:#4e4c4cf0;border-radius:0;padding:.2rem .5rem}.group-header{display:flex;justify-content:space-between;align-items:center;cursor:pointer}.group-header h2{font-size:14px;margin:0;font-weight:100}.group-header .arrow{font-size:1.2rem;transition:transform .3s ease}.group-header .arrow.expanded{transform:rotate(180deg)}.group-content{margin-top:.5rem}.color-picker-item{display:flex;align-items:center;gap:.5rem;margin-bottom:5px}.color-picker-item label{flex:1;font-size:.75rem;color:#fff;white-space:nowrap}.color-picker-item input[type=color]{width:45px;height:28px;padding:0;border:1px solid #ccc;border-radius:4px;flex-shrink:0}.color-picker-item input[type=text],.color-picker-item select{width:140px;height:28px;padding:0 .4rem;font-size:.85rem;border:1px solid #ccc;border-radius:4px}.color-picker-item .tooltip-container{position:relative;display:inline-block}.color-picker-item .tooltip-container .copy-btn{flex-shrink:0;font-size:1rem;background:none;border:none;cursor:pointer;padding:.3rem}.color-picker-item .tooltip-container .copy-btn:hover{transform:scale(1.1)}.color-picker-item .tooltip-container .copy-btn:hover+.tooltip-text{opacity:1;visibility:visible}.color-picker-item .tooltip-container .tooltip-text{position:absolute;bottom:120%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:.3rem .5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .2s ease;z-index:1000}.color-picker-item .copied-msg{font-size:.75rem;color:green;margin-left:auto;animation:fadeOut 1s ease forwards}@keyframes fadeOut{0%{opacity:1}80%{opacity:1}to{opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
|
|
224
231
|
}
|
|
225
232
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonColorPickerComponent, decorators: [{
|
|
226
233
|
type: Component,
|
|
@@ -228,12 +235,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
228
235
|
}], ctorParameters: () => [{ type: i1.ColorPickerService }, { type: i0.Renderer2 }, { type: Object, decorators: [{
|
|
229
236
|
type: Inject,
|
|
230
237
|
args: [PLATFORM_ID]
|
|
231
|
-
}] }, { type: i2.FormBuilder }], propDecorators: {
|
|
232
|
-
type: Input
|
|
233
|
-
}], passPanel: [{
|
|
234
|
-
type: Input
|
|
235
|
-
}], panelRef: [{
|
|
238
|
+
}] }, { type: i2.FormBuilder }], propDecorators: { panelRef: [{
|
|
236
239
|
type: ViewChild,
|
|
237
240
|
args: ['panel', { static: false }]
|
|
238
241
|
}] } });
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWNvbG9yLXBpY2tlci9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tY29sb3ItcGlja2VyL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBRUwsV0FBVyxFQUVYLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFXMUYsTUFBTSxPQUFPLDJCQUEyQjtJQXdCcEMsWUFDVyxZQUFnQyxFQUMvQixRQUFtQixFQUNXLFVBQWtCLEVBQ2hELEVBQWU7UUFIaEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDVyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2hELE9BQUUsR0FBRixFQUFFLENBQWE7UUEzQmxCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBR3hCLHNCQUFpQixHQUFHLHlDQUF5QyxDQUFDO1FBQzlELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUluQixTQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUQsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUV0QixxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBNkMsQ0FBQztRQUN4RSxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBQzFDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNuQyxlQUFVLEdBQThCLEVBQUUsQ0FBQztRQUUzQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBUVgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUMzQixLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDWCxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDakIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFFM0IsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQy9ELElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGdCQUFnQjtvQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQy9CO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUNqRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLGNBQWMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUMvQjthQUFNO1lBQ0gsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE1BQU0sWUFBWSxHQUFHLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVqRyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3RELElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDaEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUU7b0JBQ2hDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7eUJBQzVELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7eUJBQy9CLElBQUksRUFBRSxDQUFDO29CQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztpQkFDM0M7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQjtRQUN6QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxNQUFNLGFBQWEsR0FBRztZQUNsQixPQUFPO1lBQ1AsUUFBUTtZQUNSLE9BQU87WUFDUCxNQUFNO1lBQ04sUUFBUTtTQUNYLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUU1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVTtZQUNYLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDeEUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUI7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFL0MsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUUxQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQzVCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDckIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDekIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWE7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVksRUFBRSxZQUFvQjtRQUMxQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBOEMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUVuQixNQUFNLGNBQWMsR0FDaEIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDbEMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTFDLElBQUksY0FBYyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSywwQkFBMEIsQ0FBQztZQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FDekIsWUFBWSxFQUNaLFlBQVksRUFDWixJQUFJLENBQUMsZ0JBQWdCLENBQ3hCLENBQUM7U0FDTDthQUFNO1lBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQ3pCLFlBQVksRUFDWixLQUFLLEVBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUN4QixDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYSxFQUFFLElBQVk7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFNBQVMsQ0FBQyxZQUFvQjtRQUMxQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztJQUN4RCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDckIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdkMsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBaUI7UUFDN0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQVksRUFBRSxZQUFvQjtRQUN6RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBa0MsQ0FBQztRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUV0QixNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsMEJBQTBCLENBQUM7UUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUV6QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLENBQUMscUNBQXFDO1FBRWhFLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sRUFBRSxHQUFHLFFBQVEsYUFBYSxFQUFFLENBQUM7UUFDbkMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFFeEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsNENBQTRDLGFBQWEsZUFBZSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUNqQyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2FBQ2pELGdCQUFnQixDQUFDLFlBQVksQ0FBQzthQUM5QixJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXZDLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25DLE9BQU8sQ0FDSCxHQUFHO2dCQUNILEtBQUs7cUJBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDUixLQUFLLENBQUMsRUFBRSxDQUFDO3FCQUNULEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNoQixDQUFDO1NBQ0w7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsWUFBb0I7UUFDcEMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQzthQUNuRCxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7YUFDOUIsSUFBSSxFQUFFLENBQUM7UUFFWixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN2QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDNUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFOUIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRWpELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN4QixPQUFPLENBQ0gsR0FBRztZQUNILFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQzVDLENBQUM7SUFDTixDQUFDOytHQTFRUSwyQkFBMkIsNkVBMkJ4QixXQUFXO21HQTNCZCwyQkFBMkIsbVBDdkJ4Qyx5Z0tBbUlBLG8xSURqSGMsWUFBWSx5RkFBRSxXQUFXLHcyQkFBRSxtQkFBbUI7OzRGQUsvQywyQkFBMkI7a0JBUnZDLFNBQVM7K0JBQ0ksMEJBQTBCLGNBQ3hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsaUJBRzFDLGlCQUFpQixDQUFDLFNBQVM7OzBCQTZCckMsTUFBTTsyQkFBQyxXQUFXO21FQTFCZCxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ2lDLFFBQVE7c0JBQTlDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2xvclBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb2xvci1wYW5lbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItYmFieWxvbi1jb2xvci1waWNrZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXG59KVxuZXhwb3J0IGNsYXNzIEJhYnlsb25Db2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgdXNlclBhbmVsID0gJyc7XG4gICAgQElucHV0KCkgcGFzc1BhbmVsID0gJyc7XG4gICAgQFZpZXdDaGlsZCgncGFuZWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFuZWxSZWYhOiBFbGVtZW50UmVmO1xuXG4gICAgZ29vZ2xlRm9udHNBcGlLZXkgPSAnQUl6YVN5QVZienpPbUFKZnNBc2k5NTFlNjM2eW0tQUJXeTJCT01BJztcbiAgICBtb3N0cmFyUGFuZWwgPSBmYWxzZTtcbiAgICBsb2dpbkhlY2hvID0gZmFsc2U7XG4gICAgbWluaW1pemFkbyA9IGZhbHNlO1xuXG4gICAgbG9naW5Gb3JtOiBGb3JtR3JvdXA7XG5cbiAgICB0YWJzID0gWydDb2xvcmVzJywgJ1RleHRvcycsICdCb3RvbmVzJywgJ0NvbXVuZXMnLCAnT3Ryb3MnXTtcbiAgICBhY3RpdmVUYWIgPSAnQ29sb3Jlcyc7XG5cbiAgICBncm91cGVkVmFyaWFibGVzID0gbmV3IE1hcDxzdHJpbmcsIHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXT4oKTtcbiAgICBjb3BpZWRTdGF0dXMgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICBleHBhbmRlZEdyb3VwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvbnRWYWx1ZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBkcmFnU3RhcnRYID0gMDtcbiAgICBkcmFnU3RhcnRZID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29sb3JTZXJ2aWNlOiBDb2xvclBpY2tlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMubG9naW5Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBlbWFpbDogWycnXSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBbJyddXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgICAgIHRoaXMubW9zdHJhclBhbmVsID0gcGFyYW1zLmhhcygnYWN0aXZhcl9wYW5lbCcpO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRUYWIgPSB0aGlzLmNvbG9yU2VydmljZS5nZXRTdG9yZWRUYWIodGhpcy50YWJzKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gc3RvcmVkVGFiO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRTZXNzaW9uID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncGFuZWwtbG9naW4tb2snKTtcbiAgICAgICAgICAgIGlmIChzdG9yZWRTZXNzaW9uID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2luSGVjaG8gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29sb3JTZXJ2aWNlLmdldEFsbENTU1ZhcmlhYmxlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmdyb3VwQnlDYXRlZ29yeSh2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmZldGNoR29vZ2xlRm9udHModGhpcy5nb29nbGVGb250c0FwaUtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsRm9udFZhbHVlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ21vdXNlbW92ZScsIChlKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMub25EcmFnTW92ZShlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2V1cCcsICgpID0+IHRoaXMub25EcmFnRW5kKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgbG9naW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgZW1haWwsIHBhc3N3b3JkIH0gPSB0aGlzLmxvZ2luRm9ybS52YWx1ZTtcbiAgICAgICAgaWYgKGVtYWlsID09PSB0aGlzLnVzZXJQYW5lbCAmJiBwYXNzd29yZCA9PT0gdGhpcy5wYXNzUGFuZWwpIHtcbiAgICAgICAgICAgIHRoaXMubG9naW5IZWNobyA9IHRydWU7XG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdwYW5lbC1sb2dpbi1vaycsICd0cnVlJyk7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbG9yU2VydmljZS5nZXRBbGxDU1NWYXJpYWJsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyA9XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuZ3JvdXBCeUNhdGVnb3J5KHZhcmlhYmxlcyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbG9yU2VydmljZS5mZXRjaEdvb2dsZUZvbnRzKHRoaXMuZ29vZ2xlRm9udHNBcGlLZXkpO1xuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsRm9udFZhbHVlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWxlcnQoJ1VzdWFyaW8gbyBjb250cmFzZcOxYSBpbmNvcnJlY3RvcycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbEZvbnRWYWx1ZXMoKTogdm9pZCB7XG4gICAgICBjb25zdCBncnVwb3NGdWVudGUgPSBbJ1TDrXR1bG9zJywgJ1ByZXTDrXR1bG9zJywgJ1N1YnTDrXR1bG9zJywgJ1RleHRvcycsICdGdWVudGVzJywgJ1RpcG9ncmFmw61hcyddO1xuXG4gICAgICBmb3IgKGNvbnN0IFtncm91cCwgdmFyaWFibGVzXSBvZiB0aGlzLmdyb3VwZWRWYXJpYWJsZXMpIHtcbiAgICAgICAgaWYgKGdydXBvc0Z1ZW50ZS5pbmNsdWRlcyhncm91cCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKHZhcmlhYmxlLm5hbWUpXG4gICAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgICAgICBjb25zdCBmb250TmFtZSA9IHRoaXMuZ2V0Rm9udE5hbWVPbmx5KGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvbnRWYWx1ZXNbdmFyaWFibGUubmFtZV0gPSBmb250TmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzSW50ZXJhY3RpdmUgPSBbXG4gICAgICAgICAgICAnSU5QVVQnLFxuICAgICAgICAgICAgJ0JVVFRPTicsXG4gICAgICAgICAgICAnTEFCRUwnLFxuICAgICAgICAgICAgJ1NQQU4nLFxuICAgICAgICAgICAgJ1NFTEVDVCcsXG4gICAgICAgIF0uaW5jbHVkZXModGFyZ2V0LnRhZ05hbWUpO1xuICAgICAgICBpZiAoaXNJbnRlcmFjdGl2ZSB8fCAhdGhpcy5wYW5lbFJlZikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9XG4gICAgICAgICAgICBldmVudC5jbGllbnRYIC0gdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRHJhZ01vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgfHwgIXRoaXMucGFuZWxSZWYpIHJldHVybjtcblxuICAgICAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZHJhZ1N0YXJ0WDtcbiAgICAgICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLmRyYWdTdGFydFk7XG5cbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gYCR7eX1weGA7XG4gICAgfVxuXG4gICAgb25EcmFnRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0b2dnbGVHcm91cChncm91cDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkR3JvdXBzLmhhcyhncm91cCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRHcm91cHMuZGVsZXRlKGdyb3VwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRHcm91cHMuYWRkKGdyb3VwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzR3JvdXBFeHBhbmRlZChncm91cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkR3JvdXBzLmhhcyhncm91cCk7XG4gICAgfVxuXG4gICAgaXNDb2xvcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yU2VydmljZS5pc0NvbG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDb2xvcihldmVudDogRXZlbnQsIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dD8udmFsdWU7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBpc0ZvbnRWYXJpYWJsZSA9XG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUuc3RhcnRzV2l0aCgnLS1mb250LScpICYmXG4gICAgICAgICAgICAhdmFyaWFibGVOYW1lLmluY2x1ZGVzKCctLWZvbnQtc2l6ZScpO1xuXG4gICAgICAgIGlmIChpc0ZvbnRWYXJpYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5mb250VmFsdWVzW3ZhcmlhYmxlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0ZvbnRWYWx1ZSA9IGAnJHt2YWx1ZX0nLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgO1xuICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY2hhbmdlQ29sb3IoXG4gICAgICAgICAgICAgICAgdmFyaWFibGVOYW1lLFxuICAgICAgICAgICAgICAgIG5ld0ZvbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRWYXJpYWJsZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jaGFuZ2VDb2xvcihcbiAgICAgICAgICAgICAgICB2YXJpYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDb2xvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLnJlc2V0Q29sb3JzKHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgY29weVRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jb3B5VG9DbGlwYm9hcmQodmFsdWUsIG5hbWUsIHRoaXMuY29waWVkU3RhdHVzKTtcbiAgICB9XG5cbiAgICB3YXNDb3BpZWQodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29waWVkU3RhdHVzLmdldCh2YXJpYWJsZU5hbWUpID09PSB0cnVlO1xuICAgIH1cblxuICAgIGdldFRhYkZvckdyb3VwKGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclNlcnZpY2UuZ2V0VGFiRm9yR3JvdXAoZ3JvdXApO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZVRhYih0YWI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BhbmVsLWVzdGlsb3MtdGFiJywgdGFiKTtcbiAgICB9XG5cbiAgICB0b2dnbGVNaW5pbWl6YWRvKCkge1xuICAgICAgICB0aGlzLm1pbmltaXphZG8gPSAhdGhpcy5taW5pbWl6YWRvO1xuICAgIH1cblxuICAgIGV4cG9ydENTUygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuZXhwb3J0Q3VzdG9tVmFyaWFibGVzKHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgZ2V0Rm9udE5hbWVPbmx5KGZ1bGxWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBmdWxsVmFsdWUubWF0Y2goL15bJ1wiXT8oW14nXCIsXSspWydcIl0/Lyk7XG4gICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogZnVsbFZhbHVlO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZUZvbnRWYXJpYWJsZShldmVudDogRXZlbnQsIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuICAgICAgY29uc3QgZm9udE5hbWUgPSB0YXJnZXQ/LnZhbHVlO1xuICAgICAgaWYgKCFmb250TmFtZSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IGAnJHtmb250TmFtZX0nLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgO1xuICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY2hhbmdlQ29sb3IodmFyaWFibGVOYW1lLCB2YWx1ZSwgdGhpcy5ncm91cGVkVmFyaWFibGVzKTtcbiAgICAgIHRoaXMuZm9udFZhbHVlc1t2YXJpYWJsZU5hbWVdID0gZm9udE5hbWU7XG5cbiAgICAgIGNvbnN0IGlzR29vZ2xlRm9udCA9IHRoaXMuY29sb3JTZXJ2aWNlLmdvb2dsZUZvbnRzLmluY2x1ZGVzKGZvbnROYW1lKTtcbiAgICAgIGlmICghaXNHb29nbGVGb250KSByZXR1cm47IC8vIOKblCBObyBpbnNlcnRhciBzaSBubyBlcyBHb29nbGUgRm9udFxuXG4gICAgICBjb25zdCBmb3JtYXR0ZWRGb250ID0gZm9udE5hbWUucmVwbGFjZSgvIC9nLCAnKycpO1xuICAgICAgY29uc3QgaWQgPSBgZm9udC0ke2Zvcm1hdHRlZEZvbnR9YDtcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpIHJldHVybjtcblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIGxpbmsuaWQgPSBpZDtcbiAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgbGluay5ocmVmID0gYGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9JHtmb3JtYXR0ZWRGb250fSZkaXNwbGF5PXN3YXBgO1xuICAgICAgbGluay5vbmVycm9yID0gKCkgPT4gbGluay5yZW1vdmUoKTtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgfVxuXG4gICAgZ2V0Q29tcHV0ZWRDb2xvcih2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUodmFyaWFibGVOYW1lKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgY29uc3QgY2xlYW4gPSByYXcucmVwbGFjZSgvW1wiJ10vZywgJycpO1xuXG4gICAgICAgIGlmICgvXiMoWzAtOWEtZkEtRl17M30pJC8udGVzdChjbGVhbikpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgICAgICBjbGVhblxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjKSA9PiBjICsgYylcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JTZXJ2aWNlLmlzQ29sb3IoY2xlYW4pID8gY2xlYW4gOiAnIzAwMDAwMCc7XG4gICAgfVxuXG4gICAgZ2V0SGV4Rm9yQ29sb3JJbnB1dCh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZU5hbWUpXG4gICAgICAgICAgICAudHJpbSgpO1xuXG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVsLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGdldENvbXB1dGVkU3R5bGUoZWwpLmNvbG9yO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsKTtcblxuICAgICAgICBjb25zdCBtYXRjaCA9IHJlc29sdmVkLm1hdGNoKC9cXGQrL2cpO1xuICAgICAgICBpZiAoIW1hdGNoIHx8IG1hdGNoLmxlbmd0aCA8IDMpIHJldHVybiAnIzAwMDAwMCc7XG5cbiAgICAgICAgY29uc3QgW3IsIGcsIGJdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnIycgK1xuICAgICAgICAgICAgcGFyc2VJbnQocikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgICAgICAgcGFyc2VJbnQoZykudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgICAgICAgcGFyc2VJbnQoYikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8IS0tIE1vc3RyYXIgVE9ETyBzb2xvIHNpIG1vc3RyYXJQYW5lbCBlcyB0cnVlIC0tPlxuQGlmIChtb3N0cmFyUGFuZWwpIHtcblxuICA8IS0tIExPR0lOIFBBTkVMIC0tPlxuICBAaWYgKCFsb2dpbkhlY2hvKSB7XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJsb2dpbkZvcm1cIiAobmdTdWJtaXQpPVwibG9naW4oKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXBhbmVsXCI+XG4gICAgICAgIDxoMj5QYW5lbCBkZSBlc3RpbG9zPC9oMj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVXN1YXJpb1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImxvZ2luKClcIlxuICAgICAgICAvPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ29udHJhc2XDsWFcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJsb2dpbigpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCI+RW50cmFyPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIH0gQGVsc2Uge1xuICAgIDwhLS0gRVNUSUxPIFBBTkVMIC0tPlxuICAgIDxkaXZcbiAgICAgICNwYW5lbFxuICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXItcGFuZWxcIlxuICAgICAgW2NsYXNzLm1pbmltaXphZG9dPVwibWluaW1pemFkb1wiXG4gICAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLWhlYWRlclwiPlxuICAgICAgICA8aDE+UGFuZWwgZGUgZXN0aWxvczwvaDE+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cIm1pbmltaXplLWJ0blwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1pbmltaXphZG8oKVwiXG4gICAgICAgICAgdGl0bGU9XCJNaW5pbWl6YXIvUmVzdGF1cmFyIHBhbmVsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG1pbmltaXphZG8gPyAn77yLJyA6ICfvvI0nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoIW1pbmltaXphZG8pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYnNcIj5cbiAgICAgICAgICBAZm9yICh0YWIgb2YgdGFiczsgdHJhY2sgdGFiKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09PSB0YWJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0QWN0aXZlVGFiKHRhYilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0YWIgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2V0LWV4cG9ydC1jb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVzZXQtYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0Q29sb3JzKClcIj5SZXNldGVhciBlc3RpbG9zPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwiZXhwb3J0Q1NTKClcIj5FeHBvcnRhciBDU1M8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwcy13cmFwcGVyXCI+XG4gICAgICAgICAgQGZvciAoZ3JvdXAgb2YgZ3JvdXBlZFZhcmlhYmxlcyB8IGtleXZhbHVlOyB0cmFjayBncm91cC5rZXkpIHtcbiAgICAgICAgICAgIEBpZiAoZ2V0VGFiRm9yR3JvdXAoZ3JvdXAua2V5KSA9PT0gYWN0aXZlVGFiKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1ib3hcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtaGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZUdyb3VwKGdyb3VwLmtleSlcIj5cbiAgICAgICAgICAgICAgICAgIDxoMj57eyBncm91cC5rZXkgfX08L2gyPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiIFtjbGFzcy5leHBhbmRlZF09XCJpc0dyb3VwRXhwYW5kZWQoZ3JvdXAua2V5KVwiPuKMtTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAoaXNHcm91cEV4cGFuZGVkKGdyb3VwLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhcmlhYmxlIG9mIGdyb3VwLnZhbHVlOyB0cmFjayB2YXJpYWJsZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlci1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgdmFyaWFibGUubmFtZS5yZXBsYWNlKCctLScsICcnKSB9fTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNDb2xvcih2YXJpYWJsZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0SGV4Rm9yQ29sb3JJbnB1dCh2YXJpYWJsZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZUNvbG9yKCRldmVudCwgdmFyaWFibGUubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoWydUw610dWxvcycsICdQcmV0w610dWxvcycsICdTdWJ0w610dWxvcycsICdUZXh0b3MnLCAnRnVlbnRlcycsICdUaXBvZ3JhZsOtYXMnXS5pbmNsdWRlcyhncm91cC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvbnRWYWx1ZXNbdmFyaWFibGUubmFtZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVGb250VmFyaWFibGUoJGV2ZW50LCB2YXJpYWJsZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIGxhYmVsPVwiRnVlbnRlcyBkZWwgcHJveWVjdG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZm9udCBvZiBjb2xvclNlcnZpY2UucHJvamVjdEZvbnRzOyB0cmFjayBmb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghWydmb250LXRpdGxlJywgJ2ZvbnQtcHJldGl0bGUnLCAnZm9udC10ZXh0JywgJ2ZvbnQtY2xhaW0nXS5pbmNsdWRlcyhmb250KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiZm9udFwiPnt7IGZvbnQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIkdvb2dsZSBGb250c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChmb250IG9mIGNvbG9yU2VydmljZS5nb29nbGVGb250czsgdHJhY2sgZm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImZvbnRcIj57eyBmb250IH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhcmlhYmxlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VDb2xvcigkZXZlbnQsIHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29weS1idG5cIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKHZhcmlhYmxlLnZhbHVlLCB2YXJpYWJsZS5uYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIPCfk4tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC10ZXh0XCI+Q29waWFyPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAod2FzQ29waWVkKHZhcmlhYmxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29waWVkLW1zZ1wiPkNvcGlhZG8g4pyU77iPPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbn1cbiJdfQ==
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWNvbG9yLXBpY2tlci9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tY29sb3ItcGlja2VyL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUVULE1BQU0sRUFHTixXQUFXLEVBRVgsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUEwQixNQUFNLGdCQUFnQixDQUFDOzs7OztBQVcxRixNQUFNLE9BQU8sMkJBQTJCO0lBd0JwQyxZQUNXLFlBQWdDLEVBQy9CLFFBQW1CLEVBQ1csVUFBa0IsRUFDaEQsRUFBZTtRQUhoQixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDL0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNXLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDaEQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTNCM0Isc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUd2QixzQkFBaUIsR0FBRyx5Q0FBeUMsQ0FBQztRQUM5RCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFJbkIsU0FB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LE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDL0QsSUFBSSxhQUFhLEtBQUssTUFBTSxFQUFFO2dCQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzdCO1NBQ0Y7SUFDSCxDQUFDOytHQW5SUSwyQkFBMkIsNkVBMkJ4QixXQUFXO21HQTNCZCwyQkFBMkIsdUxDdkJ4Qyx5Z0tBbUlBLG8xSURqSGMsWUFBWSx5RkFBRSxXQUFXLHcyQkFBRSxtQkFBbUI7OzRGQUsvQywyQkFBMkI7a0JBUnZDLFNBQVM7K0JBQ0ksMEJBQTBCLGNBQ3hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsaUJBRzFDLGlCQUFpQixDQUFDLFNBQVM7OzBCQTZCckMsTUFBTTsyQkFBQyxXQUFXO21FQXhCZ0IsUUFBUTtzQkFBOUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbG9yUGlja2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yLXBhbmVsLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1iYWJ5bG9uLWNvbG9yLXBpY2tlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkNvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICB1c2VyUGFuZWxJbnRlcm5hbCA9ICcnO1xuICAgIHBhc3NQYW5lbEludGVybmFsID0gJyc7XG4gICAgQFZpZXdDaGlsZCgncGFuZWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFuZWxSZWYhOiBFbGVtZW50UmVmO1xuXG4gICAgZ29vZ2xlRm9udHNBcGlLZXkgPSAnQUl6YVN5QVZienpPbUFKZnNBc2k5NTFlNjM2eW0tQUJXeTJCT01BJztcbiAgICBtb3N0cmFyUGFuZWwgPSBmYWxzZTtcbiAgICBsb2dpbkhlY2hvID0gZmFsc2U7XG4gICAgbWluaW1pemFkbyA9IGZhbHNlO1xuXG4gICAgbG9naW5Gb3JtOiBGb3JtR3JvdXA7XG5cbiAgICB0YWJzID0gWydDb2xvcmVzJywgJ1RleHRvcycsICdCb3RvbmVzJywgJ0NvbXVuZXMnLCAnT3Ryb3MnXTtcbiAgICBhY3RpdmVUYWIgPSAnQ29sb3Jlcyc7XG5cbiAgICBncm91cGVkVmFyaWFibGVzID0gbmV3IE1hcDxzdHJpbmcsIHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXT4oKTtcbiAgICBjb3BpZWRTdGF0dXMgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICBleHBhbmRlZEdyb3VwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvbnRWYWx1ZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBkcmFnU3RhcnRYID0gMDtcbiAgICBkcmFnU3RhcnRZID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29sb3JTZXJ2aWNlOiBDb2xvclBpY2tlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMubG9naW5Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBlbWFpbDogWycnXSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBbJyddXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgICAgIHRoaXMubW9zdHJhclBhbmVsID0gcGFyYW1zLmhhcygnYWN0aXZhcl9wYW5lbCcpO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRUYWIgPSB0aGlzLmNvbG9yU2VydmljZS5nZXRTdG9yZWRUYWIodGhpcy50YWJzKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gc3RvcmVkVGFiO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ21vdXNlbW92ZScsIChlKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMub25EcmFnTW92ZShlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2V1cCcsICgpID0+IHRoaXMub25EcmFnRW5kKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgbG9naW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgZW1haWwsIHBhc3N3b3JkIH0gPSB0aGlzLmxvZ2luRm9ybS52YWx1ZTtcbiAgICAgICAgaWYgKGVtYWlsID09PSB0aGlzLnVzZXJQYW5lbEludGVybmFsICYmIHBhc3N3b3JkID09PSB0aGlzLnBhc3NQYW5lbEludGVybmFsKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luSGVjaG8gPSB0cnVlO1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgncGFuZWwtbG9naW4tb2snLCAndHJ1ZScpO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb2xvclNlcnZpY2UuZ2V0QWxsQ1NTVmFyaWFibGVzKCk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRWYXJpYWJsZXMgPVxuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmdyb3VwQnlDYXRlZ29yeSh2YXJpYWJsZXMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb2xvclNlcnZpY2UuZmV0Y2hHb29nbGVGb250cyh0aGlzLmdvb2dsZUZvbnRzQXBpS2V5KTtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbEZvbnRWYWx1ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsZXJ0KCdVc3VhcmlvIG8gY29udHJhc2XDsWEgaW5jb3JyZWN0b3MnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEluaXRpYWxGb250VmFsdWVzKCk6IHZvaWQge1xuICAgICAgY29uc3QgZ3J1cG9zRnVlbnRlID0gWydUw610dWxvcycsICdQcmV0w610dWxvcycsICdTdWJ0w610dWxvcycsICdUZXh0b3MnLCAnRnVlbnRlcycsICdUaXBvZ3JhZsOtYXMnXTtcblxuICAgICAgZm9yIChjb25zdCBbZ3JvdXAsIHZhcmlhYmxlc10gb2YgdGhpcy5ncm91cGVkVmFyaWFibGVzKSB7XG4gICAgICAgIGlmIChncnVwb3NGdWVudGUuaW5jbHVkZXMoZ3JvdXApKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiB2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZS5uYW1lKVxuICAgICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICAgICAgY29uc3QgZm9udE5hbWUgPSB0aGlzLmdldEZvbnROYW1lT25seShjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5mb250VmFsdWVzW3ZhcmlhYmxlLm5hbWVdID0gZm9udE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBpc0ludGVyYWN0aXZlID0gW1xuICAgICAgICAgICAgJ0lOUFVUJyxcbiAgICAgICAgICAgICdCVVRUT04nLFxuICAgICAgICAgICAgJ0xBQkVMJyxcbiAgICAgICAgICAgICdTUEFOJyxcbiAgICAgICAgICAgICdTRUxFQ1QnLFxuICAgICAgICBdLmluY2x1ZGVzKHRhcmdldC50YWdOYW1lKTtcbiAgICAgICAgaWYgKGlzSW50ZXJhY3RpdmUgfHwgIXRoaXMucGFuZWxSZWYpIHJldHVybjtcblxuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRyYWdTdGFydFggPVxuICAgICAgICAgICAgZXZlbnQuY2xpZW50WCAtIHRoaXMucGFuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgICAgICB0aGlzLmRyYWdTdGFydFkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nIHx8ICF0aGlzLnBhbmVsUmVmKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLmRyYWdTdGFydFg7XG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5kcmFnU3RhcnRZO1xuXG4gICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBwYW5lbC5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XG4gICAgICAgIHBhbmVsLnN0eWxlLnRvcCA9IGAke3l9cHhgO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdG9nZ2xlR3JvdXAoZ3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRlZEdyb3Vwcy5oYXMoZ3JvdXApKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkR3JvdXBzLmRlbGV0ZShncm91cCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkR3JvdXBzLmFkZChncm91cCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0dyb3VwRXhwYW5kZWQoZ3JvdXA6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRlZEdyb3Vwcy5oYXMoZ3JvdXApO1xuICAgIH1cblxuICAgIGlzQ29sb3IodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclNlcnZpY2UuaXNDb2xvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgY2hhbmdlQ29sb3IoZXZlbnQ6IEV2ZW50LCB2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXQ/LnZhbHVlO1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaXNGb250VmFyaWFibGUgPVxuICAgICAgICAgICAgdmFyaWFibGVOYW1lLnN0YXJ0c1dpdGgoJy0tZm9udC0nKSAmJlxuICAgICAgICAgICAgIXZhcmlhYmxlTmFtZS5pbmNsdWRlcygnLS1mb250LXNpemUnKTtcblxuICAgICAgICBpZiAoaXNGb250VmFyaWFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9udFZhbHVlc1t2YXJpYWJsZU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBuZXdGb250VmFsdWUgPSBgJyR7dmFsdWV9JywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmYDtcbiAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmNoYW5nZUNvbG9yKFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICBuZXdGb250VmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY2hhbmdlQ29sb3IoXG4gICAgICAgICAgICAgICAgdmFyaWFibGVOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBlZFZhcmlhYmxlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q29sb3JzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5yZXNldENvbG9ycyh0aGlzLmdyb3VwZWRWYXJpYWJsZXMpO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCh2YWx1ZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY29weVRvQ2xpcGJvYXJkKHZhbHVlLCBuYW1lLCB0aGlzLmNvcGllZFN0YXR1cyk7XG4gICAgfVxuXG4gICAgd2FzQ29waWVkKHZhcmlhYmxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvcGllZFN0YXR1cy5nZXQodmFyaWFibGVOYW1lKSA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRUYWJGb3JHcm91cChncm91cDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JTZXJ2aWNlLmdldFRhYkZvckdyb3VwKGdyb3VwKTtcbiAgICB9XG5cbiAgICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdwYW5lbC1lc3RpbG9zLXRhYicsIHRhYik7XG4gICAgfVxuXG4gICAgdG9nZ2xlTWluaW1pemFkbygpIHtcbiAgICAgICAgdGhpcy5taW5pbWl6YWRvID0gIXRoaXMubWluaW1pemFkbztcbiAgICB9XG5cbiAgICBleHBvcnRDU1MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmV4cG9ydEN1c3RvbVZhcmlhYmxlcyh0aGlzLmdyb3VwZWRWYXJpYWJsZXMpO1xuICAgIH1cblxuICAgIGdldEZvbnROYW1lT25seShmdWxsVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZnVsbFZhbHVlLm1hdGNoKC9eWydcIl0/KFteJ1wiLF0rKVsnXCJdPy8pO1xuICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IGZ1bGxWYWx1ZTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVGb250VmFyaWFibGUoZXZlbnQ6IEV2ZW50LCB2YXJpYWJsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbDtcbiAgICAgIGNvbnN0IGZvbnROYW1lID0gdGFyZ2V0Py52YWx1ZTtcbiAgICAgIGlmICghZm9udE5hbWUpIHJldHVybjtcblxuICAgICAgY29uc3QgdmFsdWUgPSBgJyR7Zm9udE5hbWV9JywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmYDtcbiAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmNoYW5nZUNvbG9yKHZhcmlhYmxlTmFtZSwgdmFsdWUsIHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgICB0aGlzLmZvbnRWYWx1ZXNbdmFyaWFibGVOYW1lXSA9IGZvbnROYW1lO1xuXG4gICAgICBjb25zdCBpc0dvb2dsZUZvbnQgPSB0aGlzLmNvbG9yU2VydmljZS5nb29nbGVGb250cy5pbmNsdWRlcyhmb250TmFtZSk7XG4gICAgICBpZiAoIWlzR29vZ2xlRm9udCkgcmV0dXJuOyAvLyDim5QgTm8gaW5zZXJ0YXIgc2kgbm8gZXMgR29vZ2xlIEZvbnRcblxuICAgICAgY29uc3QgZm9ybWF0dGVkRm9udCA9IGZvbnROYW1lLnJlcGxhY2UoLyAvZywgJysnKTtcbiAgICAgIGNvbnN0IGlkID0gYGZvbnQtJHtmb3JtYXR0ZWRGb250fWA7XG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICBsaW5rLmlkID0gaWQ7XG4gICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgIGxpbmsuaHJlZiA9IGBodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PSR7Zm9ybWF0dGVkRm9udH0mZGlzcGxheT1zd2FwYDtcbiAgICAgIGxpbmsub25lcnJvciA9ICgpID0+IGxpbmsucmVtb3ZlKCk7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIH1cblxuICAgIGdldENvbXB1dGVkQ29sb3IodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByYXcgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKHZhcmlhYmxlTmFtZSlcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGNvbnN0IGNsZWFuID0gcmF3LnJlcGxhY2UoL1tcIiddL2csICcnKTtcblxuICAgICAgICBpZiAoL14jKFswLTlhLWZBLUZdezN9KSQvLnRlc3QoY2xlYW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICcjJyArXG4gICAgICAgICAgICAgICAgY2xlYW5cbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoYykgPT4gYyArIGMpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yU2VydmljZS5pc0NvbG9yKGNsZWFuKSA/IGNsZWFuIDogJyMwMDAwMDAnO1xuICAgIH1cblxuICAgIGdldEhleEZvckNvbG9ySW5wdXQodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjb2xvciA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUodmFyaWFibGVOYW1lKVxuICAgICAgICAgICAgLnRyaW0oKTtcblxuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbC5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBnZXRDb21wdXRlZFN0eWxlKGVsKS5jb2xvcjtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSByZXNvbHZlZC5tYXRjaCgvXFxkKy9nKTtcbiAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5sZW5ndGggPCAzKSByZXR1cm4gJyMwMDAwMDAnO1xuXG4gICAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IG1hdGNoO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgIHBhcnNlSW50KHIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgIHBhcnNlSW50KGcpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgIHBhcnNlSW50KGIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0Q3JlZGVudGlhbHModXNlcjogc3RyaW5nLCBwYXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIHRoaXMudXNlclBhbmVsSW50ZXJuYWwgPSB1c2VyO1xuICAgICAgdGhpcy5wYXNzUGFuZWxJbnRlcm5hbCA9IHBhc3M7XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICB0aGlzLm1vc3RyYXJQYW5lbCA9IHBhcmFtcy5oYXMoJ2FjdGl2YXJfcGFuZWwnKTtcblxuICAgICAgaWYgKHRoaXMubW9zdHJhclBhbmVsKSB7XG4gICAgICAgIGNvbnN0IHN0b3JlZFNlc3Npb24gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdwYW5lbC1sb2dpbi1vaycpO1xuICAgICAgICBpZiAoc3RvcmVkU2Vzc2lvbiA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgdGhpcy5sb2dpbkhlY2hvID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbG9yU2VydmljZS5nZXRBbGxDU1NWYXJpYWJsZXMoKTtcbiAgICAgICAgICB0aGlzLmdyb3VwZWRWYXJpYWJsZXMgPSB0aGlzLmNvbG9yU2VydmljZS5ncm91cEJ5Q2F0ZWdvcnkodmFyaWFibGVzKTtcbiAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5mZXRjaEdvb2dsZUZvbnRzKHRoaXMuZ29vZ2xlRm9udHNBcGlLZXkpO1xuICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbEZvbnRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbn1cbiIsIjwhLS0gTW9zdHJhciBUT0RPIHNvbG8gc2kgbW9zdHJhclBhbmVsIGVzIHRydWUgLS0+XG5AaWYgKG1vc3RyYXJQYW5lbCkge1xuXG4gIDwhLS0gTE9HSU4gUEFORUwgLS0+XG4gIEBpZiAoIWxvZ2luSGVjaG8pIHtcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImxvZ2luRm9ybVwiIChuZ1N1Ym1pdCk9XCJsb2dpbigpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9naW4tcGFuZWxcIj5cbiAgICAgICAgPGgyPlBhbmVsIGRlIGVzdGlsb3M8L2gyPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJVc3VhcmlvXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibG9naW4oKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJDb250cmFzZcOxYVwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImxvZ2luKClcIlxuICAgICAgICAvPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIj5FbnRyYXI8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgfSBAZWxzZSB7XG4gICAgPCEtLSBFU1RJTE8gUEFORUwgLS0+XG4gICAgPGRpdlxuICAgICAgI3BhbmVsXG4gICAgICBjbGFzcz1cImNvbG9yLXBpY2tlci1wYW5lbFwiXG4gICAgICBbY2xhc3MubWluaW1pemFkb109XCJtaW5pbWl6YWRvXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25EcmFnU3RhcnQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGVhZGVyXCI+XG4gICAgICAgIDxoMT5QYW5lbCBkZSBlc3RpbG9zPC9oMT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWluaW1pemUtYnRuXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWluaW1pemFkbygpXCJcbiAgICAgICAgICB0aXRsZT1cIk1pbmltaXphci9SZXN0YXVyYXIgcGFuZWxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgbWluaW1pemFkbyA/ICfvvIsnIDogJ++8jScgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmICghbWluaW1pemFkbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGFic1wiPlxuICAgICAgICAgIEBmb3IgKHRhYiBvZiB0YWJzOyB0cmFjayB0YWIpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUYWIgPT09IHRhYlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVUYWIodGFiKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHRhYiB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZXQtZXhwb3J0LWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZXNldC1idXR0b25cIiAoY2xpY2spPVwicmVzZXRDb2xvcnMoKVwiPlJlc2V0ZWFyIGVzdGlsb3M8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJleHBvcnRDU1MoKVwiPkV4cG9ydGFyIENTUzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzLXdyYXBwZXJcIj5cbiAgICAgICAgICBAZm9yIChncm91cCBvZiBncm91cGVkVmFyaWFibGVzIHwga2V5dmFsdWU7IHRyYWNrIGdyb3VwLmtleSkge1xuICAgICAgICAgICAgQGlmIChnZXRUYWJGb3JHcm91cChncm91cC5rZXkpID09PSBhY3RpdmVUYWIpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWJveFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXJcIiAoY2xpY2spPVwidG9nZ2xlR3JvdXAoZ3JvdXAua2V5KVwiPlxuICAgICAgICAgICAgICAgICAgPGgyPnt7IGdyb3VwLmtleSB9fTwvaDI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCIgW2NsYXNzLmV4cGFuZGVkXT1cImlzR3JvdXBFeHBhbmRlZChncm91cC5rZXkpXCI+4oy1PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgQGlmIChpc0dyb3VwRXhwYW5kZWQoZ3JvdXAua2V5KSkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAodmFyaWFibGUgb2YgZ3JvdXAudmFsdWU7IHRyYWNrIHZhcmlhYmxlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyB2YXJpYWJsZS5uYW1lLnJlcGxhY2UoJy0tJywgJycpIH19PC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc0NvbG9yKHZhcmlhYmxlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRIZXhGb3JDb2xvcklucHV0KHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlQ29sb3IoJGV2ZW50LCB2YXJpYWJsZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChbJ1TDrXR1bG9zJywgJ1ByZXTDrXR1bG9zJywgJ1N1YnTDrXR1bG9zJywgJ1RleHRvcycsICdGdWVudGVzJywgJ1RpcG9ncmFmw61hcyddLmluY2x1ZGVzKGdyb3VwLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9udFZhbHVlc1t2YXJpYWJsZS5uYW1lXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZUZvbnRWYXJpYWJsZSgkZXZlbnQsIHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9XCJGdWVudGVzIGRlbCBwcm95ZWN0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChmb250IG9mIGNvbG9yU2VydmljZS5wcm9qZWN0Rm9udHM7IHRyYWNrIGZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFbJ2ZvbnQtdGl0bGUnLCAnZm9udC1wcmV0aXRsZScsICdmb250LXRleHQnLCAnZm9udC1jbGFpbSddLmluY2x1ZGVzKGZvbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJmb250XCI+e3sgZm9udCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRncm91cD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIGxhYmVsPVwiR29vZ2xlIEZvbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGZvbnQgb2YgY29sb3JTZXJ2aWNlLmdvb2dsZUZvbnRzOyB0cmFjayBmb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiZm9udFwiPnt7IGZvbnQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFyaWFibGUudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZUNvbG9yKCRldmVudCwgdmFyaWFibGUubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3B5LWJ0blwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQodmFyaWFibGUudmFsdWUsIHZhcmlhYmxlLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+Ti1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXRleHRcIj5Db3BpYXI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICh3YXNDb3BpZWQodmFyaWFibGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3BpZWQtbXNnXCI+Q29waWFkbyDinJTvuI88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxufVxuIl19
|