{"version":3,"sources":["node_modules/browser-pack/_prelude.js","TypeScripts/Account/saop-change-pwd-view.ts","TypeScripts/Settings/saop-settings-view.ts","TypeScripts/main.ts"],"names":[],"mappings":"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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\r\n/// \r\n/// \r\n\r\n\r\nexport interface SaopPasswordCriterias {\r\n pwdCheck:boolean;\r\n pwdLengthCheck:boolean;\r\n pwdLengthSetting:number;\r\n pwdComplexityCheck :boolean;\r\n pwdMinLength :boolean;\r\n pwdContainsUpperCase :boolean;\r\n pwdContainsLowerCase :boolean;\r\n pwdContainsNumbers :boolean;\r\n pwdContainsSpecialChars :boolean;\r\n pwdNotContainsUserData :boolean;\r\n pwdHistoryCheck:boolean;\r\n pwdNotUsedYet :boolean;\r\n}\r\n\r\nexport class SaopChangePwdView {\r\n //\r\n private _translationService: icSaopCore.SaopTranslationServiceEx;\r\n private _changePasswordForm :JQuery; \r\n\r\n constructor(viewId:string,libName:string = \"\") {\r\n this._changePasswordForm = $(viewId);\r\n this._translationService = new icSaopCore.SaopTranslationServiceEx(null);\r\n this.setTerminologyList();\r\n }\r\n\r\n setTerminologyList(){\r\n let _terminology: string[] = ['vsaj {0} znakov'];\r\n this._translationService.setTranslationsList(_terminology);\r\n }\r\n\r\n initView(): void {\r\n icSaopCore.global.ConsoleLogDegug(\"SaopChangePwdView.initView\");\r\n\r\n this.bindViewEvents(); \r\n \r\n this.checkPasswordStrength();\r\n }\r\n\r\n bindViewEvents(){\r\n icSaopCore.global.ConsoleLogDegug(\"SaopChangePwdView.bindGridEvents\");\r\n let _this = this;\r\n //\r\n let _NewPassword = this._changePasswordForm.find(\"#NewPassword\");\r\n _NewPassword.off(\"change\");\r\n _NewPassword.on('change', function (row) {\r\n _this.checkPasswordStrength();\r\n }); \r\n }\r\n\r\n fsetPwdClass(condition:boolean, divId:string):void {\r\n let okStatusCss = \"left saop-cl-green saop-img-check-mark-solid si-s\";\r\n let warringStatusCss = \"left saop-cl-red saop-img-close-solid si-s\"; \r\n let _targetDiv = this._changePasswordForm.find(divId);\r\n\r\n _targetDiv.removeAttr( \"class\" );\r\n // _targetDiv.removeClass(function(){\r\n // return $(this).attr( \"class\" );\r\n // });\r\n\r\n if (condition == true) {\r\n _targetDiv.addClass(okStatusCss);\r\n } else {\r\n _targetDiv.addClass(warringStatusCss);\r\n }\r\n }\r\n\r\n setPwdComplexityDivVal(saopPasswordCriterias:SaopPasswordCriterias):void{\r\n this.fsetPwdClass(saopPasswordCriterias.pwdMinLength,\"#pwdMinLength\");\r\n this.fsetPwdClass(saopPasswordCriterias.pwdContainsUpperCase,\"#pwdContainsUpperCase\");\r\n this.fsetPwdClass(saopPasswordCriterias.pwdContainsLowerCase,\"#pwdContainsLowerCase\");\r\n this.fsetPwdClass(saopPasswordCriterias.pwdContainsNumbers,\"#pwdContainsNumbers\");\r\n this.fsetPwdClass(saopPasswordCriterias.pwdContainsSpecialChars,\"#pwdContainsSpecialChars\");\r\n this.fsetPwdClass(saopPasswordCriterias.pwdNotContainsUserData,\"#pwdNotContainsUserData\");\r\n this.fsetPwdClass(saopPasswordCriterias.pwdNotUsedYet,\"#pwdNotUsedYet\");\r\n //\r\n\r\n let _pwdCheckDiv = this._changePasswordForm.find(\"#pwdCheck\");\r\n if (_pwdCheckDiv.length > 0) {\r\n if (saopPasswordCriterias.pwdCheck == false){\r\n _pwdCheckDiv.remove();\r\n }\r\n }\r\n\r\n let _pwdHistoryCheckDiv = this._changePasswordForm.find(\"#pwdHistoryCheck\");\r\n if (_pwdHistoryCheckDiv.length > 0) {\r\n if (saopPasswordCriterias.pwdHistoryCheck == false){\r\n _pwdHistoryCheckDiv.remove();\r\n }\r\n }\r\n\r\n let _pwdComplexityDiv = this._changePasswordForm.find(\"#pwdComplexity\");\r\n if (_pwdComplexityDiv.length > 0) {\r\n if (saopPasswordCriterias.pwdComplexityCheck == false){\r\n _pwdComplexityDiv.remove();\r\n }\r\n }\r\n\r\n let _pwdLengthCheckDiv = this._changePasswordForm.find(\"#pwdLengthCheck\");\r\n if (_pwdLengthCheckDiv.length > 0) {\r\n let _pwdLengthSettingDiv = this._changePasswordForm.find(\"#pwdLengthSetting\");\r\n if (saopPasswordCriterias.pwdLengthCheck == false){\r\n _pwdLengthCheckDiv.remove();\r\n } else {\r\n let _pwdLengthSettingCaption = this._translationService.translate(\"vsaj {0} znakov\").replace(\"{0}\",saopPasswordCriterias.pwdLengthSetting.toString());\r\n _pwdLengthSettingDiv.html(_pwdLengthSettingCaption);\r\n }\r\n }\r\n //\r\n }\r\n\r\n public checkPasswordStrength():void{\r\n let _this = this;\r\n let _newPassword = this._changePasswordForm.find(\"#NewPassword\");\r\n let _password = _newPassword.val();\r\n\r\n let data = {password: _password};\r\n\r\n let _saopServicesCore = new icSaopCore.SaopServicesCoreEx(); \r\n _saopServicesCore.afterSuccess = function (response:icSaopCore.SaopServicesCoreResponse) {\r\n let _saopPasswordCriterias = response.data as SaopPasswordCriterias;\r\n _this.setPwdComplexityDivVal(_saopPasswordCriterias);\r\n };\r\n _saopServicesCore.ExecuteAction({\r\n action: \"Settings/CheckPasswordStrength\"\r\n , data: data\r\n , type: \"POST\"\r\n }); \r\n }\r\n //\r\n}\r\n\r\n\r\n","/// \r\n/// \r\n/// \r\n/// \r\nimport * as SaopViewFormServices from \"../@types/saop_core/saopViewFormServices\"\r\nimport { SaopChangePwdView } from '../Account/saop-change-pwd-view'\r\n\r\nexport class SaopSettingsView { \r\n //\r\n private _saopServicesCore : icSaopCore.SaopServicesCoreEx;\r\n private _saopChangePwdView : SaopChangePwdView;\r\n\r\n constructor(viewId:string,libName:string = \"\") {\r\n \r\n this._saopServicesCore = new icSaopCore.SaopServicesCoreEx(); \r\n this._saopChangePwdView = new SaopChangePwdView(viewId,libName);\r\n }\r\n\r\n initView(): void {\r\n icSaopCore.global.ConsoleLogDegug(\"SaopSettingsView.initView\");\r\n\r\n this.bindViewEvents(); \r\n \r\n this.checkPasswordStrength();\r\n \r\n }\r\n\r\n bindViewEvents(){\r\n icSaopCore.global.ConsoleLogDegug(\"SaopSettingsView.bindGridEvents\");\r\n let _this = this;\r\n //\r\n $(\"#selectJezik\").off(\"change\");\r\n $(\"#selectJezik\").on('change', function (row) {\r\n _this.vrstaJezikaChanged();\r\n }); \r\n \r\n this._saopChangePwdView.bindViewEvents(); \r\n }\r\n\r\n vrstaJezikaChanged(): void {\r\n icSaopCore.global.ConsoleLogDegug(\"SaopSettingsView.vrstaJezikaChanged\");\r\n let _this = this;\r\n\r\n let vrstaJezikaElement = document.getElementById('selectJezik') as HTMLSelectElement;\r\n let jezik = vrstaJezikaElement.options[vrstaJezikaElement.selectedIndex].value;\r\n\r\n let idWebOperaterja = (document.getElementById('IDWebOperaterja') as HTMLInputElement).value;\r\n\r\n let data = { idweboperaterja: idWebOperaterja, jezik: jezik};\r\n\r\n this._saopServicesCore.afterDone = function (response:SaopViewFormServices.SaopWfSubmitResult) {\r\n if (response.alertMessage) {\r\n alertify.message(response.alertMessage);\r\n }\r\n\r\n if (response.viewContent) {\r\n $(\"#messageBanner\").html(response.viewContent);\r\n }\r\n\r\n if (response.success) {\r\n //reload current page \r\n icSaopCore.global.relodeCurrentPage();\r\n }\r\n else {\r\n $(\"#selectJezik\").val(response.jezik);\r\n }\r\n };\r\n this._saopServicesCore.ExecuteAction({\r\n action: \"Settings/UpdateSaopwebOperaterjiJezik\"\r\n , data: data\r\n , type: \"POST\"\r\n , spinnerDivId: \"#absenceConfirmationPendingLoading\"\r\n }); \r\n }\r\n\r\n public checkPasswordStrength():void{\r\n this._saopChangePwdView.checkPasswordStrength();\r\n }\r\n\r\n}\r\n\r\n\r\n","/// \r\n/// \r\n//import * as icSaopCore from \"./@types/saop_core/index\"\r\n//import * as icSaopCore from './@types/saop_core/index'\r\n//import * as saopCommonServices from \"./@types/saop_core/saopCommonServices\"\r\nimport { SaopSettingsView } from \"./Settings/saop-settings-view\";\r\nimport { SaopChangePwdView } from './Account/saop-change-pwd-view';\r\n\r\n\r\nexport function echo(): void {\r\n icSaopCore.echoTest(\"test\");\r\n}\r\n\r\n// export function checkCompatibility(): boolean {\r\n// return icSaopCore.checkCompatibility();\r\n// }\r\n\r\n// export function initClientLogModeValue():void {\r\n// icSaopCore.initClientLogModeValue();\r\n// }\r\n\r\n// export function initSiteBaseUrlValue():void {\r\n// icSaopCore.initSiteBaseUrlValue();\r\n// }\r\n\r\n// export function initializeSiteJS():void {\r\n// icSaopCore.initializeSiteJS();\r\n// }\r\n\r\n// export function setFirstControlToFocus(formId: string):void {\r\n// icSaopCore.setFirstControlToFocus(formId);\r\n// }\r\n\r\nexport class SaopSettingsViewEx extends SaopSettingsView { };\r\n\r\nexport class SaopChangePwdViewEx extends SaopChangePwdView { };\r\n\r\n\r\n\r\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJUeXBlU2NyaXB0cy9BY2NvdW50L3Nhb3AtY2hhbmdlLXB3ZC12aWV3LnRzIiwiVHlwZVNjcmlwdHMvU2V0dGluZ3Mvc2FvcC1zZXR0aW5ncy12aWV3LnRzIiwiVHlwZVNjcmlwdHMvbWFpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQztBQUNEO0FBQ0E7Ozs7Ozs7OztJQWtCYSxpQjtBQUtULCtCQUFZLE1BQVosRUFBNkM7QUFBQSxZQUFuQixPQUFtQix1RUFBRixFQUFFOztBQUFBOztBQUN6QyxhQUFLLG1CQUFMLEdBQTJCLEVBQUUsTUFBRixDQUEzQjtBQUNBLGFBQUssbUJBQUwsR0FBMkIsSUFBSSxXQUFXLHdCQUFmLENBQXdDLElBQXhDLENBQTNCO0FBQ0EsYUFBSyxrQkFBTDtBQUNIOzs7OzZDQUVpQjtBQUNkLGdCQUFJLGVBQXlCLENBQUMsaUJBQUQsQ0FBN0I7QUFDQSxpQkFBSyxtQkFBTCxDQUF5QixtQkFBekIsQ0FBNkMsWUFBN0M7QUFDSDs7O21DQUVPO0FBQ0osdUJBQVcsTUFBWCxDQUFrQixlQUFsQixDQUFrQyw0QkFBbEM7QUFFQSxpQkFBSyxjQUFMO0FBRUEsaUJBQUsscUJBQUw7QUFDSDs7O3lDQUVhO0FBQ1YsdUJBQVcsTUFBWCxDQUFrQixlQUFsQixDQUFrQyxrQ0FBbEM7QUFDQSxnQkFBSSxRQUFRLElBQVo7QUFDQTtBQUNBLGdCQUFJLGVBQWUsS0FBSyxtQkFBTCxDQUF5QixJQUF6QixDQUE4QixjQUE5QixDQUFuQjtBQUNBLHlCQUFhLEdBQWIsQ0FBaUIsUUFBakI7QUFDQSx5QkFBYSxFQUFiLENBQWdCLFFBQWhCLEVBQTBCLFVBQVUsR0FBVixFQUFhO0FBQ25DLHNCQUFNLHFCQUFOO0FBQ0gsYUFGRDtBQUdIOzs7cUNBRVksUyxFQUFtQixLLEVBQVk7QUFDeEMsZ0JBQUksY0FBYyxtREFBbEI7QUFDQSxnQkFBSSxtQkFBbUIsNENB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QXhDLFFBQUEsa0JBQUEsR0FBQSxrQkFBQTtBQUE0RDs7SUFFL0MsbUI7Ozs7Ozs7Ozs7RUFBNEIsdUJBQUEsaUI7O0FBQXpDLFFBQUEsbUJBQUEsR0FBQSxtQkFBQTtBQUE4RCIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIu+7vy8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9AdHlwZXMvc2FvcF9jb3JlL3Nhb3BDb21tb25TZXJ2aWNlcy5kLnRzXCIgLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL0B0eXBlcy9zYW9wX2NvcmUvc2FvcENvcmVTZXJ2aWNlcy5kLnRzXCIgLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL0B0eXBlcy9zYW9wX2NvcmUvc2FvcFRyYW5zbGF0aW9uc1NlcnZpY2VzLmQudHNcIiAvPlxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2FvcFBhc3N3b3JkQ3JpdGVyaWFzIHtcclxuICAgIHB3ZENoZWNrOmJvb2xlYW47XHJcbiAgICBwd2RMZW5ndGhDaGVjazpib29sZWFuO1xyXG4gICAgcHdkTGVuZ3RoU2V0dGluZzpudW1iZXI7XHJcbiAgICBwd2RDb21wbGV4aXR5Q2hlY2sgOmJvb2xlYW47XHJcbiAgICBwd2RNaW5MZW5ndGggOmJvb2xlYW47XHJcbiAgICBwd2RDb250YWluc1VwcGVyQ2FzZSA6Ym9vbGVhbjtcclxuICAgIHB3ZENvbnRhaW5zTG93ZXJDYXNlIDpib29sZWFuO1xyXG4gICAgcHdkQ29udGFpbnNOdW1iZXJzIDpib29sZWFuO1xyXG4gICAgcHdkQ29udGFpbnNTcGVjaWFsQ2hhcnMgOmJvb2xlYW47XHJcbiAgICBwd2ROb3RDb250YWluc1VzZXJEYXRhIDpib29sZWFuO1xyXG4gICAgcHdkSGlzdG9yeUNoZWNrOmJvb2xlYW47XHJcbiAgICBwd2ROb3RVc2VkWWV0IDpib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcENoYW5nZVB3ZFZpZXcge1xyXG4gICAgLy9cclxuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uU2VydmljZTogaWNTYW9wQ29yZS5TYW9wVHJhbnNsYXRpb25TZXJ2aWNlRXg7XHJcbiAgICBwcml2YXRlIF9jaGFuZ2VQYXNzd29yZEZvcm0gOkpRdWVyeTxIVE1MRWxlbWVudD47IFxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHZpZXdJZDpzdHJpbmcsbGliTmFtZTpzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlUGFzc3dvcmRGb3JtID0gJCh2aWV3SWQpO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0aW9uU2VydmljZSA9IG5ldyBpY1Nhb3BDb3JlLlNhb3BUcmFuc2xhdGlvblNlcnZpY2VFeChudWxsKTtcclxuICAgICAgICB0aGlzLnNldFRlcm1pbm9sb2d5TGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRlcm1pbm9sb2d5TGlzdCgpe1xyXG4gICAgICAgIGxldCBfdGVybWlub2xvZ3k6IHN0cmluZ1tdID0gWyd2c2FqIHswfSB6bmFrb3YnXTtcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGlvblNlcnZpY2Uuc2V0VHJhbnNsYXRpb25zTGlzdChfdGVybWlub2xvZ3kpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRWaWV3KCk6IHZvaWQge1xyXG4gICAgICAgIGljU2FvcENvcmUuZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BDaGFuZ2VQd2RWaWV3LmluaXRWaWV3XCIpO1xyXG5cclxuICAgICAgICB0aGlzLmJpbmRWaWV3RXZlbnRzKCk7ICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jaGVja1Bhc3N3b3JkU3RyZW5ndGgoKTtcclxuICAgIH1cclxuXHJcbiAgICBiaW5kVmlld0V2ZW50cygpe1xyXG4gICAgICAgIGljU2FvcENvcmUuZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BDaGFuZ2VQd2RWaWV3LmJpbmRHcmlkRXZlbnRzXCIpO1xyXG4gICAgICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgLy9cclxuICAgICAgICBsZXQgX05ld1Bhc3N3b3JkID0gdGhpcy5fY2hhbmdlUGFzc3dvcmRGb3JtLmZpbmQoXCIjTmV3UGFzc3dvcmRcIik7XHJcbiAgICAgICAgX05ld1Bhc3N3b3JkLm9mZihcImNoYW5nZVwiKTtcclxuICAgICAgICBfTmV3UGFzc3dvcmQub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChyb3cpIHtcclxuICAgICAgICAgICAgX3RoaXMuY2hlY2tQYXNzd29yZFN0cmVuZ3RoKCk7XHJcbiAgICAgICAgfSk7ICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnNldFB3ZENsYXNzKGNvbmRpdGlvbjpib29sZWFuLCBkaXZJZDpzdHJpbmcpOnZvaWQge1xyXG4gICAgICAgIGxldCBva1N0YXR1c0NzcyA9IFwibGVmdCBzYW9wLWNsLWdyZWVuIHNhb3AtaW1nLWNoZWNrLW1hcmstc29saWQgc2ktc1wiO1xyXG4gICAgICAgIGxldCB3YXJyaW5nU3RhdHVzQ3NzID0gXCJsZWZ0IHNhb3AtY2wtcmVkIHNhb3AtaW1nLWNsb3NlLXNvbGlkIHNpLXNcIjsgICAgICAgIFxyXG4gICAgICAgIGxldCBfdGFyZ2V0RGl2ID0gdGhpcy5fY2hhbmdlUGFzc3dvcmRGb3JtLmZpbmQoZGl2SWQpO1xyXG5cclxuICAgICAgICBfdGFyZ2V0RGl2LnJlbW92ZUF0dHIoIFwiY2xhc3NcIiApO1xyXG4gICAgICAgIC8vIF90YXJnZXREaXYucmVtb3ZlQ2xhc3MoZnVuY3Rpb24oKXtcclxuICAgICAgICAvLyAgICAgcmV0dXJuICQodGhpcykuYXR0ciggXCJjbGFzc1wiICk7XHJcbiAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgIGlmIChjb25kaXRpb24gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBfdGFyZ2V0RGl2LmFkZENsYXNzKG9rU3RhdHVzQ3NzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBfdGFyZ2V0RGl2LmFkZENsYXNzKHdhcnJpbmdTdGF0dXNDc3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRQd2RDb21wbGV4aXR5RGl2VmFsKHNhb3BQYXNzd29yZENyaXRlcmlhczpTYW9wUGFzc3dvcmRDcml0ZXJpYXMpOnZvaWR7XHJcbiAgICAgICAgdGhpcy5mc2V0UHdkQ2xhc3Moc2FvcFBhc3N3b3JkQ3JpdGVyaWFzLnB3ZE1pbkxlbmd0aCxcIiNwd2RNaW5MZW5ndGhcIik7XHJcbiAgICAgICAgdGhpcy5mc2V0UHdkQ2xhc3Moc2FvcFBhc3N3b3JkQ3JpdGVyaWFzLnB3ZENvbnRhaW5zVXBwZXJDYXNlLFwiI3B3ZENvbnRhaW5zVXBwZXJDYXNlXCIpO1xyXG4gICAgICAgIHRoaXMuZnNldFB3ZENsYXNzKHNhb3BQYXNzd29yZENyaXRlcmlhcy5wd2RDb250YWluc0xvd2VyQ2FzZSxcIiNwd2RDb250YWluc0xvd2VyQ2FzZVwiKTtcclxuICAgICAgICB0aGlzLmZzZXRQd2RDbGFzcyhzYW9wUGFzc3dvcmRDcml0ZXJpYXMucHdkQ29udGFpbnNOdW1iZXJzLFwiI3B3ZENvbnRhaW5zTnVtYmVyc1wiKTtcclxuICAgICAgICB0aGlzLmZzZXRQd2RDbGFzcyhzYW9wUGFzc3dvcmRDcml0ZXJpYXMucHdkQ29udGFpbnNTcGVjaWFsQ2hhcnMsXCIjcHdkQ29udGFpbnNTcGVjaWFsQ2hhcnNcIik7XHJcbiAgICAgICAgdGhpcy5mc2V0UHdkQ2xhc3Moc2FvcFBhc3N3b3JkQ3JpdGVyaWFzLnB3ZE5vdENvbnRhaW5zVXNlckRhdGEsXCIjcHdkTm90Q29udGFpbnNVc2VyRGF0YVwiKTtcclxuICAgICAgICB0aGlzLmZzZXRQd2RDbGFzcyhzYW9wUGFzc3dvcmRDcml0ZXJpYXMucHdkTm90VXNlZFlldCxcIiNwd2ROb3RVc2VkWWV0XCIpO1xyXG4gICAgICAgIC8vXHJcblxyXG4gICAgICAgIGxldCBfcHdkQ2hlY2tEaXYgPSB0aGlzLl9jaGFuZ2VQYXNzd29yZEZvcm0uZmluZChcIiNwd2RDaGVja1wiKTtcclxuICAgICAgICBpZiAoX3B3ZENoZWNrRGl2Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHNhb3BQYXNzd29yZENyaXRlcmlhcy5wd2RDaGVjayA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICBfcHdkQ2hlY2tEaXYucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBfcHdkSGlzdG9yeUNoZWNrRGl2ID0gdGhpcy5fY2hhbmdlUGFzc3dvcmRGb3JtLmZpbmQoXCIjcHdkSGlzdG9yeUNoZWNrXCIpO1xyXG4gICAgICAgIGlmIChfcHdkSGlzdG9yeUNoZWNrRGl2Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHNhb3BQYXNzd29yZENyaXRlcmlhcy5wd2RIaXN0b3J5Q2hlY2sgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgX3B3ZEhpc3RvcnlDaGVja0Rpdi5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IF9wd2RDb21wbGV4aXR5RGl2ID0gdGhpcy5fY2hhbmdlUGFzc3dvcmRGb3JtLmZpbmQoXCIjcHdkQ29tcGxleGl0eVwiKTtcclxuICAgICAgICBpZiAoX3B3ZENvbXBsZXhpdHlEaXYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoc2FvcFBhc3N3b3JkQ3JpdGVyaWFzLnB3ZENvbXBsZXhpdHlDaGVjayA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICBfcHdkQ29tcGxleGl0eURpdi5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IF9wd2RMZW5ndGhDaGVja0RpdiA9IHRoaXMuX2NoYW5nZVBhc3N3b3JkRm9ybS5maW5kKFwiI3B3ZExlbmd0aENoZWNrXCIpO1xyXG4gICAgICAgIGlmIChfcHdkTGVuZ3RoQ2hlY2tEaXYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgX3B3ZExlbmd0aFNldHRpbmdEaXYgPSB0aGlzLl9jaGFuZ2VQYXNzd29yZEZvcm0uZmluZChcIiNwd2RMZW5ndGhTZXR0aW5nXCIpO1xyXG4gICAgICAgICAgICBpZiAoc2FvcFBhc3N3b3JkQ3JpdGVyaWFzLnB3ZExlbmd0aENoZWNrID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgIF9wd2RMZW5ndGhDaGVja0Rpdi5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBfcHdkTGVuZ3RoU2V0dGluZ0NhcHRpb24gPSB0aGlzLl90cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKFwidnNhaiB7MH0gem5ha292XCIpLnJlcGxhY2UoXCJ7MH1cIixzYW9wUGFzc3dvcmRDcml0ZXJpYXMucHdkTGVuZ3RoU2V0dGluZy50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIF9wd2RMZW5ndGhTZXR0aW5nRGl2Lmh0bWwoX3B3ZExlbmd0aFNldHRpbmdDYXB0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja1Bhc3N3b3JkU3RyZW5ndGgoKTp2b2lke1xyXG4gICAgICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgbGV0IF9uZXdQYXNzd29yZCA9IHRoaXMuX2NoYW5nZVBhc3N3b3JkRm9ybS5maW5kKFwiI05ld1Bhc3N3b3JkXCIpO1xyXG4gICAgICAgIGxldCBfcGFzc3dvcmQgPSBfbmV3UGFzc3dvcmQudmFsKCk7XHJcblxyXG4gICAgICAgIGxldCBkYXRhID0ge3Bhc3N3b3JkOiBfcGFzc3dvcmR9O1xyXG5cclxuICAgICAgICBsZXQgX3Nhb3BTZXJ2aWNlc0NvcmUgPSBuZXcgaWNTYW9wQ29yZS5TYW9wU2VydmljZXNDb3JlRXgoKTsgXHJcbiAgICAgICAgX3Nhb3BTZXJ2aWNlc0NvcmUuYWZ0ZXJTdWNjZXNzID0gZnVuY3Rpb24gKHJlc3BvbnNlOmljU2FvcENvcmUuU2FvcFNlcnZpY2VzQ29yZVJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgbGV0IF9zYW9wUGFzc3dvcmRDcml0ZXJpYXMgPSByZXNwb25zZS5kYXRhIGFzIFNhb3BQYXNzd29yZENyaXRlcmlhcztcclxuICAgICAgICAgICBfdGhpcy5zZXRQd2RDb21wbGV4aXR5RGl2VmFsKF9zYW9wUGFzc3dvcmRDcml0ZXJpYXMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgX3Nhb3BTZXJ2aWNlc0NvcmUuRXhlY3V0ZUFjdGlvbih7XHJcbiAgICAgICAgICAgIGFjdGlvbjogXCJTZXR0aW5ncy9DaGVja1Bhc3N3b3JkU3RyZW5ndGhcIlxyXG4gICAgICAgICAgICAsIGRhdGE6IGRhdGFcclxuICAgICAgICAgICAgLCB0eXBlOiBcIlBPU1RcIlxyXG4gICAgICAgIH0pOyBcclxuICAgIH1cclxuICAgIC8vXHJcbn1cclxuXHJcblxyXG4iLCLvu78vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vQHR5cGVzL2FsZXJ0aWZ5L2luZGV4LmQudHNcIiAvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vQHR5cGVzL3Nhb3BfY29yZS9zYW9wQ29tbW9uU2VydmljZXMuZC50c1wiIC8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9AdHlwZXMvc2FvcF9jb3JlL3Nhb3BDb3JlU2VydmljZXMuZC50c1wiIC8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9AdHlwZXMvc2FvcF9jb3JlL3Nhb3BUcmFuc2xhdGlvbnNTZXJ2aWNlcy5kLnRzXCIgLz5cclxuaW1wb3J0ICogYXMgU2FvcFZpZXdGb3JtU2VydmljZXMgZnJvbSBcIi4uL0B0eXBlcy9zYW9wX2NvcmUvc2FvcFZpZXdGb3JtU2VydmljZXNcIlxyXG5pbXBvcnQgeyBTYW9wQ2hhbmdlUHdkVmlldyB9IGZyb20gJy4uL0FjY291bnQvc2FvcC1jaGFuZ2UtcHdkLXZpZXcnXHJcblxyXG5leHBvcnQgY2xhc3MgU2FvcFNldHRpbmdzVmlldyB7IFxyXG4gICAgLy9cclxuICAgIHByaXZhdGUgX3Nhb3BTZXJ2aWNlc0NvcmUgOiBpY1Nhb3BDb3JlLlNhb3BTZXJ2aWNlc0NvcmVFeDtcclxuICAgIHByaXZhdGUgX3Nhb3BDaGFuZ2VQd2RWaWV3IDogU2FvcENoYW5nZVB3ZFZpZXc7XHJcblxyXG4gICAgY29uc3RydWN0b3Iodmlld0lkOnN0cmluZyxsaWJOYW1lOnN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9zYW9wU2VydmljZXNDb3JlID0gbmV3IGljU2FvcENvcmUuU2FvcFNlcnZpY2VzQ29yZUV4KCk7IFxyXG4gICAgICAgIHRoaXMuX3Nhb3BDaGFuZ2VQd2RWaWV3ID0gbmV3IFNhb3BDaGFuZ2VQd2RWaWV3KHZpZXdJZCxsaWJOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0VmlldygpOiB2b2lkIHtcclxuICAgICAgICBpY1Nhb3BDb3JlLmdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJTYW9wU2V0dGluZ3NWaWV3LmluaXRWaWV3XCIpO1xyXG5cclxuICAgICAgICB0aGlzLmJpbmRWaWV3RXZlbnRzKCk7ICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jaGVja1Bhc3N3b3JkU3RyZW5ndGgoKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBiaW5kVmlld0V2ZW50cygpe1xyXG4gICAgICAgIGljU2FvcENvcmUuZ2xvYmFsLkNvbnNvbGVMb2dEZWd1ZyhcIlNhb3BTZXR0aW5nc1ZpZXcuYmluZEdyaWRFdmVudHNcIik7XHJcbiAgICAgICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgICAgICAvL1xyXG4gICAgICAgICQoXCIjc2VsZWN0SmV6aWtcIikub2ZmKFwiY2hhbmdlXCIpO1xyXG4gICAgICAgICQoXCIjc2VsZWN0SmV6aWtcIikub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChyb3cpIHtcclxuICAgICAgICAgICAgX3RoaXMudnJzdGFKZXppa2FDaGFuZ2VkKCk7XHJcbiAgICAgICAgfSk7ICBcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9zYW9wQ2hhbmdlUHdkVmlldy5iaW5kVmlld0V2ZW50cygpOyAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHZyc3RhSmV6aWthQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICBpY1Nhb3BDb3JlLmdsb2JhbC5Db25zb2xlTG9nRGVndWcoXCJTYW9wU2V0dGluZ3NWaWV3LnZyc3RhSmV6aWthQ2hhbmdlZFwiKTtcclxuICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG5cclxuICAgICAgICBsZXQgdnJzdGFKZXppa2FFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdEplemlrJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICAgICAgbGV0IGplemlrID0gdnJzdGFKZXppa2FFbGVtZW50Lm9wdGlvbnNbdnJzdGFKZXppa2FFbGVtZW50LnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgaWRXZWJPcGVyYXRlcmphID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJRFdlYk9wZXJhdGVyamEnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdGEgPSB7IGlkd2Vib3BlcmF0ZXJqYTogaWRXZWJPcGVyYXRlcmphLCBqZXppazogamV6aWt9O1xyXG5cclxuICAgICAgICB0aGlzLl9zYW9wU2VydmljZXNDb3JlLmFmdGVyRG9uZSA9IGZ1bmN0aW9uIChyZXNwb25zZTpTYW9wVmlld0Zvcm1TZXJ2aWNlcy5TYW9wV2ZTdWJtaXRSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmFsZXJ0TWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnRpZnkubWVzc2FnZShyZXNwb25zZS5hbGVydE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uudmlld0NvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgICQoXCIjbWVzc2FnZUJhbm5lclwiKS5odG1sKHJlc3BvbnNlLnZpZXdDb250ZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIC8vcmVsb2FkIGN1cnJlbnQgcGFnZSBcclxuICAgICAgICAgICAgICAgIGljU2FvcENvcmUuZ2xvYmFsLnJlbG9kZUN1cnJlbnRQYWdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI3NlbGVjdEplemlrXCIpLnZhbChyZXNwb25zZS5qZXppayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3Nhb3BTZXJ2aWNlc0NvcmUuRXhlY3V0ZUFjdGlvbih7XHJcbiAgICAgICAgICAgIGFjdGlvbjogXCJTZXR0aW5ncy9VcGRhdGVTYW9wd2ViT3BlcmF0ZXJqaUplemlrXCJcclxuICAgICAgICAgICAgLCBkYXRhOiBkYXRhXHJcbiAgICAgICAgICAgICwgdHlwZTogXCJQT1NUXCJcclxuICAgICAgICAgICAgLCBzcGlubmVyRGl2SWQ6IFwiI2Fic2VuY2VDb25maXJtYXRpb25QZW5kaW5nTG9hZGluZ1wiXHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tQYXNzd29yZFN0cmVuZ3RoKCk6dm9pZHtcclxuICAgICAgICB0aGlzLl9zYW9wQ2hhbmdlUHdkVmlldy5jaGVja1Bhc3N3b3JkU3RyZW5ndGgoKTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcblxyXG4iLCLvu78vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi9AdHlwZXMvc2FvcF9jb3JlL3Nhb3BDb21tb25TZXJ2aWNlcy5kLnRzXCIgLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vQHR5cGVzL3Nhb3BfY29yZS9zYW9wVHJhbnNsYXRpb25zU2VydmljZXMuZC50c1wiIC8+XHJcbi8vaW1wb3J0ICogYXMgaWNTYW9wQ29yZSBmcm9tIFwiLi9AdHlwZXMvc2FvcF9jb3JlL2luZGV4XCJcclxuLy9pbXBvcnQgKiBhcyBpY1Nhb3BDb3JlIGZyb20gJy4vQHR5cGVzL3Nhb3BfY29yZS9pbmRleCdcclxuLy9pbXBvcnQgKiBhcyBzYW9wQ29tbW9uU2VydmljZXMgZnJvbSBcIi4vQHR5cGVzL3Nhb3BfY29yZS9zYW9wQ29tbW9uU2VydmljZXNcIlxyXG5pbXBvcnQgeyBTYW9wU2V0dGluZ3NWaWV3IH0gZnJvbSBcIi4vU2V0dGluZ3Mvc2FvcC1zZXR0aW5ncy12aWV3XCI7XHJcbmltcG9ydCB7IFNhb3BDaGFuZ2VQd2RWaWV3IH0gZnJvbSAnLi9BY2NvdW50L3Nhb3AtY2hhbmdlLXB3ZC12aWV3JztcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWNobygpOiB2b2lkIHtcclxuICAgIGljU2FvcENvcmUuZWNob1Rlc3QoXCJ0ZXN0XCIpO1xyXG59XHJcblxyXG4vLyBleHBvcnQgZnVuY3Rpb24gY2hlY2tDb21wYXRpYmlsaXR5KCk6IGJvb2xlYW4ge1xyXG4vLyAgICAgcmV0dXJuIGljU2FvcENvcmUuY2hlY2tDb21wYXRpYmlsaXR5KCk7XHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiBpbml0Q2xpZW50TG9nTW9kZVZhbHVlKCk6dm9pZCB7XHJcbi8vICAgICBpY1Nhb3BDb3JlLmluaXRDbGllbnRMb2dNb2RlVmFsdWUoKTtcclxuLy8gfVxyXG5cclxuLy8gZXhwb3J0IGZ1bmN0aW9uIGluaXRTaXRlQmFzZVVybFZhbHVlKCk6dm9pZCB7XHJcbi8vICAgICBpY1Nhb3BDb3JlLmluaXRTaXRlQmFzZVVybFZhbHVlKCk7XHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplU2l0ZUpTKCk6dm9pZCB7XHJcbi8vICAgICBpY1Nhb3BDb3JlLmluaXRpYWxpemVTaXRlSlMoKTtcclxuLy8gfVxyXG5cclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHNldEZpcnN0Q29udHJvbFRvRm9jdXMoZm9ybUlkOiBzdHJpbmcpOnZvaWQge1xyXG4vLyAgICAgaWNTYW9wQ29yZS5zZXRGaXJzdENvbnRyb2xUb0ZvY3VzKGZvcm1JZCk7XHJcbi8vIH1cclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wU2V0dGluZ3NWaWV3RXggZXh0ZW5kcyBTYW9wU2V0dGluZ3NWaWV3IHsgfTtcclxuXHJcbmV4cG9ydCBjbGFzcyBTYW9wQ2hhbmdlUHdkVmlld0V4IGV4dGVuZHMgU2FvcENoYW5nZVB3ZFZpZXcgeyB9O1xyXG5cclxuXHJcblxyXG4iXX0="}