@pepperi/lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.1.
284 lines • 32.9 kB
JavaScript
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
import { CustomizationService, LAYOUT_TYPE } from '@pepperi/lib';
import * as i0 from "@angular/core";
import * as i1 from "@pepperi/lib";
import * as i2 from "@angular/common";
import * as i3 from "@pepperi/lib/files-uploader";
import * as i4 from "@pepperi/lib/field-title";
function PepperiAttachmentComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {
const _r8 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "files-uploader", 3);
i0.ɵɵlistener("fileChanged", function PepperiAttachmentComponent_ng_template_0_Template_files_uploader_fileChanged_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.onFileChanged($event); })("elementClicked", function PepperiAttachmentComponent_ng_template_0_Template_files_uploader_elementClicked_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.onFileClicked($event); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵproperty("key", ctx_r1.key)("src", ctx_r1.src)("label", ctx_r1.label)("required", ctx_r1.required)("disabled", ctx_r1.disabled)("xAlignment", ctx_r1.xAlignment)("rowSpan", ctx_r1.rowSpan)("controlType", ctx_r1.controlType)("form", ctx_r1.form)("layoutType", ctx_r1.layoutType)("standAlone", ctx_r1.standAlone)("acceptedExtensions", ctx_r1.acceptAttachmentType);
} }
function PepperiAttachmentComponent_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
function PepperiAttachmentComponent_ng_template_2_ng_template_1_a_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "a", 9);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r15 = i0.ɵɵnextContext(3);
i0.ɵɵpropertyInterpolate("title", ctx_r15.src);
i0.ɵɵpropertyInterpolate("href", ctx_r15.src, i0.ɵɵsanitizeUrl);
i0.ɵɵproperty("id", ctx_r15.key);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx_r15.src);
} }
function PepperiAttachmentComponent_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 7);
i0.ɵɵtemplate(1, PepperiAttachmentComponent_ng_template_2_ng_template_1_a_1_Template, 2, 4, "a", 8);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r12 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r12.src != null);
} }
function PepperiAttachmentComponent_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span");
i0.ɵɵtext(1, "\u00A0");
i0.ɵɵelementEnd();
} }
function PepperiAttachmentComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, PepperiAttachmentComponent_ng_template_2_ng_container_0_Template, 1, 0, "ng-container", 4);
i0.ɵɵtemplate(1, PepperiAttachmentComponent_ng_template_2_ng_template_1_Template, 2, 1, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(3, PepperiAttachmentComponent_ng_template_2_ng_template_3_Template, 2, 0, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
} if (rf & 2) {
const _r11 = i0.ɵɵreference(2);
const _r13 = i0.ɵɵreference(4);
const ctx_r3 = i0.ɵɵnextContext();
i0.ɵɵproperty("ngIf", (ctx_r3.src == null ? null : ctx_r3.src.length) > 0)("ngIfThen", _r11)("ngIfElse", _r13);
} }
function PepperiAttachmentComponent_ng_container_4_ng_container_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
const _c0 = function (a0, a1) { return { "one-row": a0, "stand-alone": a1 }; };
function PepperiAttachmentComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "div", 10);
i0.ɵɵelement(2, "pep-field-title", 11);
i0.ɵɵtemplate(3, PepperiAttachmentComponent_ng_container_4_ng_container_3_Template, 1, 0, "ng-container", 12);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r4 = i0.ɵɵnextContext();
const _r0 = i0.ɵɵreference(1);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(7, _c0, ctx_r4.rowSpan == 1, ctx_r4.standAlone));
i0.ɵɵadvance(1);
i0.ɵɵproperty("label", ctx_r4.label)("required", ctx_r4.required)("disabled", ctx_r4.disabled)("xAlignment", ctx_r4.xAlignment)("showTitle", ctx_r4.showTitle);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngTemplateOutlet", _r0);
} }
function PepperiAttachmentComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
function PepperiAttachmentComponent_ng_container_5_ng_template_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
function PepperiAttachmentComponent_ng_container_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 10);
i0.ɵɵtemplate(1, PepperiAttachmentComponent_ng_container_5_ng_template_2_ng_container_1_Template, 1, 0, "ng-container", 12);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r19 = i0.ɵɵnextContext(2);
const _r0 = i0.ɵɵreference(1);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(2, _c0, ctx_r19.rowSpan == 1, ctx_r19.standAlone));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngTemplateOutlet", _r0);
} }
function PepperiAttachmentComponent_ng_container_5_ng_template_4_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
function PepperiAttachmentComponent_ng_container_5_ng_template_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, PepperiAttachmentComponent_ng_container_5_ng_template_4_ng_container_0_Template, 1, 0, "ng-container", 12);
} if (rf & 2) {
i0.ɵɵnextContext(2);
const _r2 = i0.ɵɵreference(3);
i0.ɵɵproperty("ngTemplateOutlet", _r2);
} }
function PepperiAttachmentComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PepperiAttachmentComponent_ng_container_5_ng_container_1_Template, 1, 0, "ng-container", 4);
i0.ɵɵtemplate(2, PepperiAttachmentComponent_ng_container_5_ng_template_2_Template, 2, 5, "ng-template", null, 13, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(4, PepperiAttachmentComponent_ng_container_5_ng_template_4_Template, 1, 1, "ng-template", null, 14, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const _r18 = i0.ɵɵreference(3);
const _r20 = i0.ɵɵreference(5);
const ctx_r5 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", false && ctx_r5.isActive && !ctx_r5.disabled)("ngIfThen", _r18)("ngIfElse", _r20);
} }
function PepperiAttachmentComponent_ng_container_6_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
function PepperiAttachmentComponent_ng_container_6_ng_template_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
function PepperiAttachmentComponent_ng_container_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 15);
i0.ɵɵtemplate(1, PepperiAttachmentComponent_ng_container_6_ng_template_2_ng_container_1_Template, 1, 0, "ng-container", 12);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵnextContext(2);
const _r0 = i0.ɵɵreference(1);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngTemplateOutlet", _r0);
} }
function PepperiAttachmentComponent_ng_container_6_ng_template_4_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
function PepperiAttachmentComponent_ng_container_6_ng_template_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, PepperiAttachmentComponent_ng_container_6_ng_template_4_ng_container_0_Template, 1, 0, "ng-container", 12);
} if (rf & 2) {
i0.ɵɵnextContext(2);
const _r2 = i0.ɵɵreference(3);
i0.ɵɵproperty("ngTemplateOutlet", _r2);
} }
function PepperiAttachmentComponent_ng_container_6_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PepperiAttachmentComponent_ng_container_6_ng_container_1_Template, 1, 0, "ng-container", 4);
i0.ɵɵtemplate(2, PepperiAttachmentComponent_ng_container_6_ng_template_2_Template, 2, 1, "ng-template", null, 13, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(4, PepperiAttachmentComponent_ng_container_6_ng_template_4_Template, 1, 1, "ng-template", null, 14, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const _r25 = i0.ɵɵreference(3);
const _r27 = i0.ɵɵreference(5);
const ctx_r6 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", false && ctx_r6.isActive && !ctx_r6.disabled)("ngIfThen", _r25)("ngIfElse", _r27);
} }
export class PepperiAttachmentComponent {
constructor(customizationService, renderer, element, fileService) {
this.customizationService = customizationService;
this.renderer = renderer;
this.element = element;
this.fileService = fileService;
this.key = '';
this.src = '';
this.label = '';
this.required = false;
this.disabled = false;
this.readonly = false;
this.xAlignment = '0';
this.rowSpan = 1;
this.controlType = 'attachment';
this.form = null;
this.showTitle = true;
this.layoutType = LAYOUT_TYPE.PepperiForm;
this.isActive = false;
this.valueChanged = new EventEmitter();
this.elementClicked = new EventEmitter();
this.LAYOUT_TYPE = LAYOUT_TYPE;
this.fieldHeight = '';
this.standAlone = false;
this.dataURI = null;
this.acceptAttachmentType = 'application/pdf,application/json,text/csv,text/csv-schema,application/msword,application/vnd.ms-excel,text/plain,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/bmp,image/jpg, image/jpeg, image/png, image/tif, image/tiff, txt, json';
}
ngOnDestroy() {
if (this.elementClicked) {
this.elementClicked.unsubscribe();
}
if (this.valueChanged) {
this.valueChanged.unsubscribe();
}
}
ngOnInit() {
if (this.form === null) {
this.standAlone = true;
this.form = this.customizationService.getDefaultFromGroup(this.key, this.src, this.required, this.readonly, this.disabled);
this.renderer.addClass(this.element.nativeElement, CustomizationService.STAND_ALONE_FIELD_CLASS_NAME);
}
this.fieldHeight = this.customizationService.calculateFieldHeight(this.layoutType, this.rowSpan, this.standAlone);
}
ngOnChanges(changes) {
if (changes.src && changes.src.currentValue.length > 0) {
// Empty dataURI if there is change in the src.
this.dataURI = null;
}
}
onFileChanged(value) {
this.dataURI = value.length > 0 ? JSON.parse(value) : null;
this.src = this.dataURI ? this.dataURI.fileStr : '';
this.customizationService.updateFormFieldValue(this.form, this.key, this.dataURI ? this.dataURI.fileExt : '');
this.valueChanged.emit({ apiName: this.key, value, controlType: this.controlType });
}
onFileClicked(event) {
if (this.dataURI != null) {
const fileStrArr = this.dataURI.fileStr.split(';');
if (fileStrArr.length === 2) {
const win = window.open('', '_blank');
const contentType = fileStrArr[0].split(':')[1];
const base64 = fileStrArr[1].split(',')[1];
const blob = this.fileService.convertFromb64toBlob(base64, contentType);
const url = URL.createObjectURL(blob);
win.location.href = url;
}
}
else {
if (this.fileService.isValidUrl(this.src)) {
const win = window.open('', '_blank');
win.location.href = this.src;
}
}
this.elementClicked.emit({ apiName: this.key, eventWhich: event.which });
}
}
PepperiAttachmentComponent.ɵfac = function PepperiAttachmentComponent_Factory(t) { return new (t || PepperiAttachmentComponent)(i0.ɵɵdirectiveInject(i1.CustomizationService), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.FileService)); };
PepperiAttachmentComponent.ɵcmp = i0.ɵɵdefineComponent({ type: PepperiAttachmentComponent, selectors: [["pep-attachment"]], inputs: { key: "key", src: "src", label: "label", required: "required", disabled: "disabled", readonly: "readonly", xAlignment: "xAlignment", rowSpan: "rowSpan", form: "form", showTitle: "showTitle", layoutType: "layoutType", isActive: "isActive" }, outputs: { valueChanged: "valueChanged", elementClicked: "elementClicked" }, features: [i0.ɵɵNgOnChangesFeature], decls: 7, vars: 3, consts: [["pepperiTemplate", ""], ["pepperiReadonlyTemplate", ""], [4, "ngIf"], [3, "key", "src", "label", "required", "disabled", "xAlignment", "rowSpan", "controlType", "form", "layoutType", "standAlone", "acceptedExtensions", "fileChanged", "elementClicked"], [4, "ngIf", "ngIfThen", "ngIfElse"], ["notEmptyBlock", ""], ["emptyBlock", ""], [1, "pepperi-file-container"], ["class", "color-link body-sm pepperi-card-input ", "target", "_blank", 3, "id", "title", "href", 4, "ngIf"], ["target", "_blank", 1, "color-link", "body-sm", "pepperi-card-input", 3, "id", "title", "href"], [1, "pepperi-file-container", 3, "ngClass"], [3, "label", "required", "disabled", "xAlignment", "showTitle"], [4, "ngTemplateOutlet"], ["selectedBlock", ""], ["notSelectedBlock", ""], [1, "pepperi-file-container", "one-row"]], template: function PepperiAttachmentComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, PepperiAttachmentComponent_ng_template_0_Template, 1, 12, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(2, PepperiAttachmentComponent_ng_template_2_Template, 5, 3, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(4, PepperiAttachmentComponent_ng_container_4_Template, 4, 10, "ng-container", 2);
i0.ɵɵtemplate(5, PepperiAttachmentComponent_ng_container_5_Template, 6, 3, "ng-container", 2);
i0.ɵɵtemplate(6, PepperiAttachmentComponent_ng_container_6_Template, 6, 3, "ng-container", 2);
} if (rf & 2) {
i0.ɵɵadvance(4);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiForm);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiCard);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.layoutType === ctx.LAYOUT_TYPE.PepperiTable);
} }, directives: [i2.NgIf, i3.FilesUploaderComponent, i2.NgClass, i4.PepperiFieldTitleComponent, i2.NgTemplateOutlet], styles: ["[_nghost-%COMP%]{display:block}"], changeDetection: 0 });
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(PepperiAttachmentComponent, [{
type: Component,
args: [{
selector: 'pep-attachment',
templateUrl: './attachment.component.html',
styleUrls: ['./attachment.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], function () { return [{ type: i1.CustomizationService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.FileService }]; }, { key: [{
type: Input
}], src: [{
type: Input
}], label: [{
type: Input
}], required: [{
type: Input
}], disabled: [{
type: Input
}], readonly: [{
type: Input
}], xAlignment: [{
type: Input
}], rowSpan: [{
type: Input
}], form: [{
type: Input
}], showTitle: [{
type: Input
}], layoutType: [{
type: Input
}], isActive: [{
type: Input
}], valueChanged: [{
type: Output
}], elementClicked: [{
type: Output
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wZXBwZXJpLWxpYi9hdHRhY2htZW50L2F0dGFjaG1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGVwcGVyaS1saWIvYXR0YWNobWVudC9hdHRhY2htZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUVySixPQUFPLEVBQWUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7OztJQ0ExRSx5Q0FJaUI7SUFGdUMseU9BQXFDLGtPQUFBO0lBRTdGLGlCQUFpQjs7O0lBSkQsZ0NBQVcsbUJBQUEsdUJBQUEsNkJBQUEsNkJBQUEsaUNBQUEsMkJBQUEsbUNBQUEscUJBQUEsaUNBQUEsaUNBQUEsbURBQUE7OztJQVEzQix3QkFBMEY7OztJQUdsRiw0QkFDcUM7SUFBQSxZQUFTO0lBQUEsaUJBQUk7OztJQUQrQiw4Q0FBaUI7SUFDOUUsK0RBQWdCO0lBRGpDLGdDQUFVO0lBQ3dCLGVBQVM7SUFBVCxpQ0FBUzs7O0lBRmxELDhCQUNJO0lBQUEsbUdBQ3FDO0lBQ3pDLGlCQUFNOzs7SUFGMkQsZUFBbUI7SUFBbkIsMENBQW1COzs7SUFLcEYsNEJBQU07SUFBQSxzQkFBTTtJQUFBLGlCQUFPOzs7SUFSdkIsMkdBQTJFO0lBQzNFLDBJQUNJO0lBS0osMElBQ0k7Ozs7O0lBUlUsMEVBQTRELGtCQUFBLGtCQUFBOzs7SUFpQnRFLHdCQUFpRTs7OztJQUx6RSw2QkFDSTtJQUFBLCtCQUNJO0lBQUEsc0NBRWtCO0lBQ2xCLDZHQUFrRDtJQUN0RCxpQkFBTTtJQUNWLDBCQUFlOzs7O0lBTnlCLGVBQWtFO0lBQWxFLDRG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QUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQzs7b0dBeEZRLDBCQUEwQjsrREFBMUIsMEJBQTBCO1FDVHZDLDZIQUNJO1FBT0osNEhBQ0k7UUFZSiw4RkFDSTtRQVFKLDZGQUNJO1FBWUosNkZBQ0k7O1FBdkJVLGVBQThDO1FBQTlDLHFFQUE4QztRQVM5QyxlQUE4QztRQUE5QyxxRUFBOEM7UUFhOUMsZUFBK0M7UUFBL0Msc0VBQStDOztrRERsQ2hELDBCQUEwQjtjQU50QyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsV0FBVyxFQUFFLDZCQUE2QjtnQkFDMUMsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7Z0JBQzFDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2xEO2tKQUVZLEdBQUc7a0JBQVgsS0FBSztZQUNHLEdBQUc7a0JBQVgsS0FBSztZQUNHLEtBQUs7a0JBQWIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxPQUFPO2tCQUFmLEtBQUs7WUFJRyxJQUFJO2tCQUFaLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFFSSxZQUFZO2tCQUFyQixNQUFNO1lBQ0csY0FBYztrQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UsIEN1c3RvbWl6YXRpb25TZXJ2aWNlLCBMQVlPVVRfVFlQRSB9IGZyb20gJ0BwZXBwZXJpL2xpYic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncGVwLWF0dGFjaG1lbnQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXR0YWNobWVudC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXBwZXJpQXR0YWNobWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkga2V5ID0gJyc7XHJcbiAgICBASW5wdXQoKSBzcmMgPSAnJztcclxuICAgIEBJbnB1dCgpIGxhYmVsID0gJyc7XHJcbiAgICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSB4QWxpZ25tZW50ID0gJzAnO1xyXG4gICAgQElucHV0KCkgcm93U3BhbiA9IDE7XHJcblxyXG4gICAgY29udHJvbFR5cGUgPSAnYXR0YWNobWVudCc7XHJcblxyXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBsYXlvdXRUeXBlOiBMQVlPVVRfVFlQRSA9IExBWU9VVF9UWVBFLlBlcHBlcmlGb3JtO1xyXG4gICAgQElucHV0KCkgaXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIGVsZW1lbnRDbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIExBWU9VVF9UWVBFID0gTEFZT1VUX1RZUEU7XHJcbiAgICBmaWVsZEhlaWdodCA9ICcnO1xyXG4gICAgc3RhbmRBbG9uZSA9IGZhbHNlO1xyXG4gICAgZGF0YVVSSSA9IG51bGw7XHJcblxyXG4gICAgYWNjZXB0QXR0YWNobWVudFR5cGUgPVxyXG4gICAgICAgICdhcHBsaWNhdGlvbi9wZGYsYXBwbGljYXRpb24vanNvbix0ZXh0L2Nzdix0ZXh0L2Nzdi1zY2hlbWEsYXBwbGljYXRpb24vbXN3b3JkLGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCx0ZXh0L3BsYWluLGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50LGltYWdlL2JtcCxpbWFnZS9qcGcsIGltYWdlL2pwZWcsIGltYWdlL3BuZywgaW1hZ2UvdGlmLCBpbWFnZS90aWZmLCB0eHQsIGpzb24nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY3VzdG9taXphdGlvblNlcnZpY2U6IEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZSkgeyB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudENsaWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2tlZC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFuZEFsb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS5nZXREZWZhdWx0RnJvbUdyb3VwKHRoaXMua2V5LCB0aGlzLnNyYywgdGhpcy5yZXF1aXJlZCwgdGhpcy5yZWFkb25seSwgdGhpcy5kaXNhYmxlZCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9DTEFTU19OQU1FKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRIZWlnaHQgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmNhbGN1bGF0ZUZpZWxkSGVpZ2h0KHRoaXMubGF5b3V0VHlwZSwgdGhpcy5yb3dTcGFuLCB0aGlzLnN0YW5kQWxvbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLnNyYyAmJiBjaGFuZ2VzLnNyYy5jdXJyZW50VmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBFbXB0eSBkYXRhVVJJIGlmIHRoZXJlIGlzIGNoYW5nZSBpbiB0aGUgc3JjLlxyXG4gICAgICAgICAgICB0aGlzLmRhdGFVUkkgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkZpbGVDaGFuZ2VkKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRhdGFVUkkgPSB2YWx1ZS5sZW5ndGggPiAwID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuc3JjID0gdGhpcy5kYXRhVVJJID8gdGhpcy5kYXRhVVJJLmZpbGVTdHIgOiAnJztcclxuICAgICAgICB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLnVwZGF0ZUZvcm1GaWVsZFZhbHVlKHRoaXMuZm9ybSwgdGhpcy5rZXksIHRoaXMuZGF0YVVSSSA/IHRoaXMuZGF0YVVSSS5maWxlRXh0IDogJycpO1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQoeyBhcGlOYW1lOiB0aGlzLmtleSwgdmFsdWUsIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRmlsZUNsaWNrZWQoZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhVVJJICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZVN0ckFyciA9IHRoaXMuZGF0YVVSSS5maWxlU3RyLnNwbGl0KCc7Jyk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlU3RyQXJyLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2luID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZmlsZVN0ckFyclswXS5zcGxpdCgnOicpWzFdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZmlsZVN0ckFyclsxXS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuZmlsZVNlcnZpY2UuY29udmVydEZyb21iNjR0b0Jsb2IoYmFzZTY0LCBjb250ZW50VHlwZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgd2luLmxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maWxlU2VydmljZS5pc1ZhbGlkVXJsKHRoaXMuc3JjKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2luID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgICAgIHdpbi5sb2NhdGlvbi5ocmVmID0gdGhpcy5zcmM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrZWQuZW1pdCh7IGFwaU5hbWU6IHRoaXMua2V5LCBldmVudFdoaWNoOiBldmVudC53aGljaCB9KTtcclxuICAgIH1cclxufVxyXG4iLCI8IS0tIE5ldyBjb2RlIC0tPlxyXG48bmctdGVtcGxhdGUgI3BlcHBlcmlUZW1wbGF0ZT5cclxuICAgIDxmaWxlcy11cGxvYWRlciBba2V5XT1cImtleVwiIFtzcmNdPVwic3JjXCIgW2xhYmVsXT1cImxhYmVsXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbeEFsaWdubWVudF09XCJ4QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwicm93U3BhblwiIFtjb250cm9sVHlwZV09XCJjb250cm9sVHlwZVwiIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIiBbc3RhbmRBbG9uZV09XCJzdGFuZEFsb25lXCIgKGZpbGVDaGFuZ2VkKT1cIm9uRmlsZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGVsZW1lbnRDbGlja2VkKT1cIm9uRmlsZUNsaWNrZWQoJGV2ZW50KVwiIFthY2NlcHRlZEV4dGVuc2lvbnNdPVwiYWNjZXB0QXR0YWNobWVudFR5cGVcIj5cclxuICAgIDwvZmlsZXMtdXBsb2FkZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3BlcHBlcmlSZWFkb25seVRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNyYz8ubGVuZ3RoID4gMDsgdGhlbiBub3RFbXB0eUJsb2NrOyBlbHNlIGVtcHR5QmxvY2tcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm90RW1wdHlCbG9jaz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVwcGVyaS1maWxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8YSBbaWRdPVwia2V5XCIgY2xhc3M9XCJjb2xvci1saW5rIGJvZHktc20gcGVwcGVyaS1jYXJkLWlucHV0IFwiICpuZ0lmPVwic3JjICE9IG51bGxcIiB0aXRsZT1cInt7IHNyYyB9fVwiXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwie3sgc3JjIH19XCI+e3sgc3JjIH19PC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlCbG9jaz5cclxuICAgICAgICA8c3Bhbj4mbmJzcDs8L3NwYW4+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09IExBWU9VVF9UWVBFLlBlcHBlcmlGb3JtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGVwcGVyaS1maWxlLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgJ29uZS1yb3cnOiByb3dTcGFuID09IDEsICdzdGFuZC1hbG9uZSc6IHN0YW5kQWxvbmUgfVwiPlxyXG4gICAgICAgIDxwZXAtZmllbGQtdGl0bGUgW2xhYmVsXT1cImxhYmVsXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3hBbGlnbm1lbnRdPVwieEFsaWdubWVudFwiXHJcbiAgICAgICAgICAgIFtzaG93VGl0bGVdPVwic2hvd1RpdGxlXCI+XHJcbiAgICAgICAgPC9wZXAtZmllbGQtdGl0bGU+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcHBlcmlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09IExBWU9VVF9UWVBFLlBlcHBlcmlDYXJkXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmFsc2UgJiYgaXNBY3RpdmUgJiYgIWRpc2FibGVkOyB0aGVuIHNlbGVjdGVkQmxvY2s7IGVsc2Ugbm90U2VsZWN0ZWRCbG9ja1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZEJsb2NrPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZXBwZXJpLWZpbGUtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieyAnb25lLXJvdyc6IHJvd1NwYW4gPT0gMSwgJ3N0YW5kLWFsb25lJzogc3RhbmRBbG9uZX1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcHBlcmlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm90U2VsZWN0ZWRCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwcGVyaVJlYWRvbmx5VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSBMQVlPVVRfVFlQRS5QZXBwZXJpVGFibGVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmYWxzZSAmJiBpc0FjdGl2ZSAmJiAhZGlzYWJsZWQ7IHRoZW4gc2VsZWN0ZWRCbG9jazsgZWxzZSBub3RTZWxlY3RlZEJsb2NrXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctdGVtcGxhdGUgI3NlbGVjdGVkQmxvY2s+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcHBlcmktZmlsZS1jb250YWluZXIgb25lLXJvd1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwcGVyaVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNub3RTZWxlY3RlZEJsb2NrPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBwZXJpUmVhZG9ubHlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==