UNPKG

stimulsoft-forms

Version:
178 lines 30.3 kB
import { Injectable } from "@angular/core"; import { StiLocalizationService } from "./sti-localization.service"; import { StiObject } from "../system/StiObject"; import { StiStaticHelperService } from "./sti-static-helper.service"; import * as i0 from "@angular/core"; import * as i1 from "./model.service"; import * as i2 from "./http-client.service"; import * as i3 from "./sti-helper.service"; import * as i4 from "./sti-user-service"; import * as i5 from "./sti-localization.service"; import * as i6 from "../stimulsoft-forms.service"; import * as i7 from "./sti-local-storage.service"; import * as i8 from "./sti-export.service"; import * as i9 from "./sti-draggable.service"; export class StiControllerService { constructor(model, httpClient, helper, userService, loc, formService, stiLocalStorage, exportService, draggableService) { this.model = model; this.httpClient = httpClient; this.helper = helper; this.userService = userService; this.loc = loc; this.formService = formService; this.stiLocalStorage = stiLocalStorage; this.exportService = exportService; this.draggableService = draggableService; this.USED_PROPERTIES = [ "localization", "accountUserProperties", "localizationList", "licenseProducts", "creationDate", "version", "fontFamilies", "imagesArray", ]; formService.serviceEvents.subscribe((data) => { switch (data.action) { case "postData": this.httpClient.post(this.model.requestUrl, data.data, "json", data.options).subscribe((result) => { this.model.showProgress = false; if (data.func) { data.func(result); } }); break; case "showFileMenu": this.model.formEvents.next({ name: "ShowFileMenu" }); break; case "showSaveMenu": this.model.formEvents.next({ name: "ShowSaveMenu" }); break; case "showTab": this.model.formEvents.next({ name: "ShowTab", value: data.tabName }); break; case "exportToPdf": this.exportService.useReadOnly = data.readOnly; this.exportService.usePdfA = data.pdfACompliance; this.exportService.exportToPdf(); break; case "getPdfBytes": this.exportService.useReadOnly = data.readOnly; this.exportService.usePdfA = data.pdfACompliance; this.exportService.getPdfBytes().then((val) => { this.formService.serviceEventsCallbacks.next({ action: "pdfBytesCallback", value: val }); }); break; case "setZoom": this.model.setZoomFromString(data.zoom); break; case "addElementToForm": this.draggableService.addingByDoubleClick(data.element); break; } }); } initialize() { if (this.model.properties?.cloudLoginInfo) { this.model.login = this.model.properties.cloudLoginInfo; return; } let localization; if (this.stiLocalStorage.getItem("StiFormsLocalization") != null && this.stiLocalStorage.getItem("StiFormsLocalization") != undefined && this.stiLocalStorage.getItem("StiFormsLocalization") != "undefined") { localization = JSON.parse(this.stiLocalStorage.getItem("StiFormsLocalization")); } let currentLocalization = (localization?.cultureName) ?? (StiStaticHelperService.browserLanguage ?? "en"); let scale = window.devicePixelRatio; this.httpClient .post(this.model.requestUrl, { action: "Initialize", currentLocalization: currentLocalization, scaleFactor: scale }, "json", { showProgress: this.model.loadingFromCloud ? false : true }) .subscribe((data) => { if (this.model.properties) { delete this.model.properties?.cloudLogin; delete this.model.properties?.cloudPassword; } if (data["cloudReload"]) { document.location.href = document.location.href; return; } let options = (this.model.options = data); StiLocalizationService.setLocalization(options.localization); this.model.assemblyInfo = options.assemblyInfo; this.userService.licenseProducts = options.licenseProducts; this.userService.currentUser = options.accountUserProperties; this.model.userName = options.userName; this.loc.localizationList = this.model.toCamelCase(options.localizationList); let localizationSetting = data["localizationSetting"]; let defaultLocalization = StiStaticHelperService.browserLanguage; if (!this.loc.localizationList?.find((item) => item.cultureName == defaultLocalization)) { defaultLocalization = defaultLocalization.substring(0, 2); } this.loc.defaultLocalization = this.loc.localizationList?.find((item) => item.cultureName == defaultLocalization); if (localizationSetting && localizationSetting.length > 0) { this.loc.currentLocalization = this.loc.localizationList?.find((item) => item.cultureName == localizationSetting); } else { if (!this.loc.currentLocalization) { if (currentLocalization != this.loc.defaultLocalization?.cultureName) { this.loc.currentLocalization = this.loc.localizationList?.find((item) => item.cultureName == currentLocalization); } else { this.loc.currentLocalization = this.loc.localizationList?.find((item) => item.cultureName == defaultLocalization); } } } if (options.creationDate) { this.userService.buildDate = new Date(options.creationDate); this.model.buildDate = options.creationDate; } else { this.userService.buildDate = new Date(options.assemblyInfo?.created); this.model.buildDate = options.assemblyInfo?.created; } if (this.model?.properties?.cloudPlanIdent) { } else { this.userService.checkLicense(); } this.model.buildVersion = options.assemblyInfo.version; if (options.fontFamilies) { let fontFamilies = []; options.fontFamilies.forEach((f) => fontFamilies.push({ name: f })); this.model.fontFamilies = fontFamilies; } if (options.imagesArray) { this.model.imagesArray = options.imagesArray; } this.model.showProgress = false; this.model.needToRefresh.next(true); this.helper.updateHelper(); setTimeout(() => { this.model.showTrialLog(); }); let eventData = {}; this.model.isInitialized = true; setTimeout(() => { if (this.model.isWebView && this.model.showTrialBar) { this.model.showTrialTimerWindow = true; } }, 3000); this.model.setZoomFromString(this.model?.settings?.zoom); StiObject.keys(options) .filter((p) => this.USED_PROPERTIES.indexOf(p) == -1) .forEach((prop) => (eventData[prop] = options[prop])); this.model.interfaceEvent.next({ name: "Loaded", data: eventData }); }, (error) => { if (!this.model?.properties?.cloudPlanIdent) { this.userService.checkLicense(); } }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiControllerService, deps: [{ token: i1.StiModelService }, { token: i2.StiHttpClientService }, { token: i3.StiHelperService }, { token: i4.StiUserService }, { token: i5.StiLocalizationService }, { token: i6.StimulsoftFormsService }, { token: i7.StiLocalStorageService }, { token: i8.StiExportService }, { token: i9.StiDraggableService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiControllerService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiControllerService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.StiModelService }, { type: i2.StiHttpClientService }, { type: i3.StiHelperService }, { type: i4.StiUserService }, { type: i5.StiLocalizationService }, { type: i6.StimulsoftFormsService }, { type: i7.StiLocalStorageService }, { type: i8.StiExportService }, { type: i9.StiDraggableService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLWNvbnRyb2xsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0aW11bHNvZnQtZm9ybXMvc3JjL2xpYi9zZXJ2aWNlcy9zdGktY29udHJvbGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFLcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBS2hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7OztBQUdyRSxNQUFNLE9BQU8sb0JBQW9CO0lBWS9CLFlBQ1MsS0FBc0IsRUFDdEIsVUFBZ0MsRUFDaEMsTUFBd0IsRUFDeEIsV0FBMkIsRUFDM0IsR0FBMkIsRUFDM0IsV0FBbUMsRUFDbkMsZUFBdUMsRUFDdkMsYUFBK0IsRUFDL0IsZ0JBQXFDO1FBUnJDLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBd0I7UUFDbkMsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBcEJ0QyxvQkFBZSxHQUFHO1lBQ3hCLGNBQWM7WUFDZCx1QkFBdUI7WUFDdkIsa0JBQWtCO1lBQ2xCLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsU0FBUztZQUNULGNBQWM7WUFDZCxhQUFhO1NBQ2QsQ0FBQztRQWFBLFdBQVcsQ0FBQyxhQUFhLENBQUMs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QkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3RpSHR0cENsaWVudFNlcnZpY2UgfSBmcm9tIFwiLi9odHRwLWNsaWVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0aUxvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9zdGktbG9jYWxpemF0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RpTW9kZWxTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGlXZWJGb3JtT3B0aW9ucyB9IGZyb20gXCIuL29iamVjdHNcIjtcclxuaW1wb3J0IHsgU3RpSGVscGVyU2VydmljZSB9IGZyb20gXCIuL3N0aS1oZWxwZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGlVc2VyU2VydmljZSB9IGZyb20gXCIuL3N0aS11c2VyLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RpT2JqZWN0IH0gZnJvbSBcIi4uL3N5c3RlbS9TdGlPYmplY3RcIjtcclxuaW1wb3J0IHsgU3RpbXVsc29mdEZvcm1zU2VydmljZSB9IGZyb20gXCIuLi9zdGltdWxzb2Z0LWZvcm1zLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RpTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gXCIuL3N0aS1sb2NhbC1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RpRXhwb3J0U2VydmljZSB9IGZyb20gXCIuL3N0aS1leHBvcnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGlEcmFnZ2FibGVTZXJ2aWNlIH0gZnJvbSBcIi4vc3RpLWRyYWdnYWJsZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0aVN0YXRpY0hlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi9zdGktc3RhdGljLWhlbHBlci5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTdGlDb250cm9sbGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBVU0VEX1BST1BFUlRJRVMgPSBbXHJcbiAgICBcImxvY2FsaXphdGlvblwiLFxyXG4gICAgXCJhY2NvdW50VXNlclByb3BlcnRpZXNcIixcclxuICAgIFwibG9jYWxpemF0aW9uTGlzdFwiLFxyXG4gICAgXCJsaWNlbnNlUHJvZHVjdHNcIixcclxuICAgIFwiY3JlYXRpb25EYXRlXCIsXHJcbiAgICBcInZlcnNpb25cIixcclxuICAgIFwiZm9udEZhbWlsaWVzXCIsXHJcbiAgICBcImltYWdlc0FycmF5XCIsXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbW9kZWw6IFN0aU1vZGVsU2VydmljZSxcclxuICAgIHB1YmxpYyBodHRwQ2xpZW50OiBTdGlIdHRwQ2xpZW50U2VydmljZSxcclxuICAgIHB1YmxpYyBoZWxwZXI6IFN0aUhlbHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFN0aVVzZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIGxvYzogU3RpTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBmb3JtU2VydmljZTogU3RpbXVsc29mdEZvcm1zU2VydmljZSxcclxuICAgIHB1YmxpYyBzdGlMb2NhbFN0b3JhZ2U6IFN0aUxvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZXhwb3J0U2VydmljZTogU3RpRXhwb3J0U2VydmljZSxcclxuICAgIHB1YmxpYyBkcmFnZ2FibGVTZXJ2aWNlOiBTdGlEcmFnZ2FibGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBmb3JtU2VydmljZS5zZXJ2aWNlRXZlbnRzLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGRhdGEuYWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSBcInBvc3REYXRhXCI6XHJcbiAgICAgICAgICB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLm1vZGVsLnJlcXVlc3RVcmwsIGRhdGEuZGF0YSwgXCJqc29uXCIsIGRhdGEub3B0aW9ucykuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zaG93UHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZnVuYykge1xyXG4gICAgICAgICAgICAgIGRhdGEuZnVuYyhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzaG93RmlsZU1lbnVcIjpcclxuICAgICAgICAgIHRoaXMubW9kZWwuZm9ybUV2ZW50cy5uZXh0KHsgbmFtZTogXCJTaG93RmlsZU1lbnVcIiB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzaG93U2F2ZU1lbnVcIjpcclxuICAgICAgICAgIHRoaXMubW9kZWwuZm9ybUV2ZW50cy5uZXh0KHsgbmFtZTogXCJTaG93U2F2ZU1lbnVcIiB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzaG93VGFiXCI6XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1FdmVudHMubmV4dCh7IG5hbWU6IFwiU2hvd1RhYlwiLCB2YWx1ZTogZGF0YS50YWJOYW1lIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImV4cG9ydFRvUGRmXCI6XHJcbiAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UudXNlUmVhZE9ubHkgPSBkYXRhLnJlYWRPbmx5O1xyXG4gICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnVzZVBkZkEgPSBkYXRhLnBkZkFDb21wbGlhbmNlO1xyXG4gICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydFRvUGRmKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZ2V0UGRmQnl0ZXNcIjpcclxuICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS51c2VSZWFkT25seSA9IGRhdGEucmVhZE9ubHk7XHJcbiAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UudXNlUGRmQSA9IGRhdGEucGRmQUNvbXBsaWFuY2U7XHJcbiAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZ2V0UGRmQnl0ZXMoKS50aGVuKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS5zZXJ2aWNlRXZlbnRzQ2FsbGJhY2tzLm5leHQoeyBhY3Rpb246IFwicGRmQnl0ZXNDYWxsYmFja1wiLCB2YWx1ZTogdmFsIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2V0Wm9vbVwiOlxyXG4gICAgICAgICAgdGhpcy5tb2RlbC5zZXRab29tRnJvbVN0cmluZyhkYXRhLnpvb20pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImFkZEVsZW1lbnRUb0Zvcm1cIjpcclxuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5hZGRpbmdCeURvdWJsZUNsaWNrKGRhdGEuZWxlbWVudCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpIHtcclxuICAgIGlmICh0aGlzLm1vZGVsLnByb3BlcnRpZXM/LmNsb3VkTG9naW5JbmZvKSB7XHJcbiAgICAgIHRoaXMubW9kZWwubG9naW4gPSB0aGlzLm1vZGVsLnByb3BlcnRpZXMuY2xvdWRMb2dpbkluZm87XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbG9jYWxpemF0aW9uO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnN0aUxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiU3RpRm9ybXNMb2NhbGl6YXRpb25cIikgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLnN0aUxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiU3RpRm9ybXNMb2NhbGl6YXRpb25cIikgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuc3RpTG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJTdGlGb3Jtc0xvY2FsaXphdGlvblwiKSAhPSBcInVuZGVmaW5lZFwiXHJcbiAgICApIHtcclxuICAgICAgbG9jYWxpemF0aW9uID0gSlNPTi5wYXJzZSh0aGlzLnN0aUxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiU3RpRm9ybXNMb2NhbGl6YXRpb25cIikpO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJlbnRMb2NhbGl6YXRpb24gPSAobG9jYWxpemF0aW9uPy5jdWx0dXJlTmFtZSkgPz8gKFN0aVN0YXRpY0hlbHBlclNlcnZpY2UuYnJvd3Nlckxhbmd1YWdlID8/IFwiZW5cIik7XHJcbiAgICBsZXQgc2NhbGUgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdChcclxuICAgICAgICB0aGlzLm1vZGVsLnJlcXVlc3RVcmwsXHJcbiAgICAgICAgeyBhY3Rpb246IFwiSW5pdGlhbGl6ZVwiLCBjdXJyZW50TG9jYWxpemF0aW9uOiBjdXJyZW50TG9jYWxpemF0aW9uLCBzY2FsZUZhY3Rvcjogc2NhbGUgfSxcclxuICAgICAgICBcImpzb25cIixcclxuICAgICAgICB7IHNob3dQcm9ncmVzczogdGhpcy5tb2RlbC5sb2FkaW5nRnJvbUNsb3VkID8gZmFsc2UgOiB0cnVlIH1cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbC5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsLnByb3BlcnRpZXM/LmNsb3VkTG9naW47XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsLnByb3BlcnRpZXM/LmNsb3VkUGFzc3dvcmQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGFbXCJjbG91ZFJlbG9hZFwiXSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBvcHRpb25zID0gKHRoaXMubW9kZWwub3B0aW9ucyA9IGRhdGEgYXMgU3RpV2ViRm9ybU9wdGlvbnMpO1xyXG4gICAgICAgICAgU3RpTG9jYWxpemF0aW9uU2VydmljZS5zZXRMb2NhbGl6YXRpb24ob3B0aW9ucy5sb2NhbGl6YXRpb24pO1xyXG4gICAgICAgICAgdGhpcy5tb2RlbC5hc3NlbWJseUluZm8gPSBvcHRpb25zLmFzc2VtYmx5SW5mbztcclxuICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UubGljZW5zZVByb2R1Y3RzID0gb3B0aW9ucy5saWNlbnNlUHJvZHVjdHM7XHJcbiAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRVc2VyID0gb3B0aW9ucy5hY2NvdW50VXNlclByb3BlcnRpZXM7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLnVzZXJOYW1lID0gb3B0aW9ucy51c2VyTmFtZTtcclxuICAgICAgICAgIHRoaXMubG9jLmxvY2FsaXphdGlvbkxpc3QgPSB0aGlzLm1vZGVsLnRvQ2FtZWxDYXNlKG9wdGlvbnMubG9jYWxpemF0aW9uTGlzdCk7XHJcbiAgICAgICAgICBsZXQgbG9jYWxpemF0aW9uU2V0dGluZyA9IGRhdGFbXCJsb2NhbGl6YXRpb25TZXR0aW5nXCJdO1xyXG4gICAgICAgICAgbGV0IGRlZmF1bHRMb2NhbGl6YXRpb24gPSBTdGlTdGF0aWNIZWxwZXJTZXJ2aWNlLmJyb3dzZXJMYW5ndWFnZTtcclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMubG9jLmxvY2FsaXphdGlvbkxpc3Q/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uY3VsdHVyZU5hbWUgPT0gZGVmYXVsdExvY2FsaXphdGlvbikpIHtcclxuICAgICAgICAgICAgZGVmYXVsdExvY2FsaXphdGlvbiA9IGRlZmF1bHRMb2NhbGl6YXRpb24uc3Vic3RyaW5nKDAsIDIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5sb2MuZGVmYXVsdExvY2FsaXphdGlvbiA9IHRoaXMubG9jLmxvY2FsaXphdGlvbkxpc3Q/LmZpbmQoXHJcbiAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmN1bHR1cmVOYW1lID09IGRlZmF1bHRMb2NhbGl6YXRpb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAobG9jYWxpemF0aW9uU2V0dGluZyAmJiBsb2NhbGl6YXRpb25TZXR0aW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5sb2MuY3VycmVudExvY2FsaXphdGlvbiA9IHRoaXMubG9jLmxvY2FsaXphdGlvbkxpc3Q/LmZpbmQoXHJcbiAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uY3VsdHVyZU5hbWUgPT0gbG9jYWxpemF0aW9uU2V0dGluZ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYy5jdXJyZW50TG9jYWxpemF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2NhbGl6YXRpb24gIT0gdGhpcy5sb2MuZGVmYXVsdExvY2FsaXphdGlvbj8uY3VsdHVyZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jLmN1cnJlbnRMb2NhbGl6YXRpb24gPSB0aGlzLmxvYy5sb2NhbGl6YXRpb25MaXN0Py5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jdWx0dXJlTmFtZSA9PSBjdXJyZW50TG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYy5jdXJyZW50TG9jYWxpemF0aW9uID0gdGhpcy5sb2MubG9jYWxpemF0aW9uTGlzdD8uZmluZChcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uY3VsdHVyZU5hbWUgPT0gZGVmYXVsdExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvcHRpb25zLmNyZWF0aW9uRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmJ1aWxkRGF0ZSA9IG5ldyBEYXRlKG9wdGlvbnMuY3JlYXRpb25EYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5idWlsZERhdGUgPSBvcHRpb25zLmNyZWF0aW9uRGF0ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuYnVpbGREYXRlID0gbmV3IERhdGUob3B0aW9ucy5hc3NlbWJseUluZm8/LmNyZWF0ZWQpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmJ1aWxkRGF0ZSA9IG9wdGlvbnMuYXNzZW1ibHlJbmZvPy5jcmVhdGVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZWw/LnByb3BlcnRpZXM/LmNsb3VkUGxhbklkZW50KSB7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmNoZWNrTGljZW5zZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5tb2RlbC5idWlsZFZlcnNpb24gPSBvcHRpb25zLmFzc2VtYmx5SW5mby52ZXJzaW9uO1xyXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9udEZhbWlsaWVzKSB7XHJcbiAgICAgICAgICAgIGxldCBmb250RmFtaWxpZXMgPSBbXTtcclxuICAgICAgICAgICAgb3B0aW9ucy5mb250RmFtaWxpZXMuZm9yRWFjaCgoZikgPT4gZm9udEZhbWlsaWVzLnB1c2goeyBuYW1lOiBmIH0pKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5mb250RmFtaWxpZXMgPSBmb250RmFtaWxpZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy5pbWFnZXNBcnJheSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmltYWdlc0FycmF5ID0gb3B0aW9ucy5pbWFnZXNBcnJheTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubW9kZWwuc2hvd1Byb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLm5lZWRUb1JlZnJlc2gubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuaGVscGVyLnVwZGF0ZUhlbHBlcigpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2hvd1RyaWFsTG9nKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGxldCBldmVudERhdGEgPSB7fTtcclxuICAgICAgICAgIHRoaXMubW9kZWwuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuaXNXZWJWaWV3ICYmIHRoaXMubW9kZWwuc2hvd1RyaWFsQmFyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaG93VHJpYWxUaW1lcldpbmRvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDMwMDApO1xyXG4gICAgICAgICAgdGhpcy5tb2RlbC5zZXRab29tRnJvbVN0cmluZyh0aGlzLm1vZGVsPy5zZXR0aW5ncz8uem9vbSk7XHJcbiAgICAgICAgICBTdGlPYmplY3Qua2V5cyhvcHRpb25zKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChwKSA9PiB0aGlzLlVTRURfUFJPUEVSVElFUy5pbmRleE9mKHApID09IC0xKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgocHJvcCkgPT4gKGV2ZW50RGF0YVtwcm9wXSA9IG9wdGlvbnNbcHJvcF0pKTtcclxuICAgICAgICAgIHRoaXMubW9kZWwuaW50ZXJmYWNlRXZlbnQubmV4dCh7IG5hbWU6IFwiTG9hZGVkXCIsIGRhdGE6IGV2ZW50RGF0YSB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMubW9kZWw/LnByb3BlcnRpZXM/LmNsb3VkUGxhbklkZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuY2hlY2tMaWNlbnNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=