UNPKG

matrix-react-sdk

Version:
250 lines (211 loc) 35.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _languageHandler = require("../../../../../languageHandler"); var _LabelledToggleSwitch = _interopRequireDefault(require("../../../elements/LabelledToggleSwitch")); var _SettingsStore = _interopRequireDefault(require("../../../../../settings/SettingsStore")); var _Field = _interopRequireDefault(require("../../../elements/Field")); var sdk = _interopRequireWildcard(require("../../../../..")); var _PlatformPeg = _interopRequireDefault(require("../../../../../PlatformPeg")); var _SettingLevel = require("../../../../../settings/SettingLevel"); var _replaceableComponent = require("../../../../../utils/replaceableComponent"); var _dec, _class, _class2, _temp; let PreferencesUserSettingsTab = (_dec = (0, _replaceableComponent.replaceableComponent)("views.settings.tabs.user.PreferencesUserSettingsTab"), _dec(_class = (_temp = _class2 = class PreferencesUserSettingsTab extends _react.default.Component /*:: <{}, IState>*/ { constructor(props) { super(props); (0, _defineProperty2.default)(this, "onAutoLaunchChange", (checked /*: boolean*/ ) => { _PlatformPeg.default.get().setAutoLaunchEnabled(checked).then(() => this.setState({ autoLaunch: checked })); }); (0, _defineProperty2.default)(this, "onWarnBeforeExitChange", (checked /*: boolean*/ ) => { _PlatformPeg.default.get().setWarnBeforeExit(checked).then(() => this.setState({ warnBeforeExit: checked })); }); (0, _defineProperty2.default)(this, "onAlwaysShowMenuBarChange", (checked /*: boolean*/ ) => { _PlatformPeg.default.get().setAutoHideMenuBarEnabled(!checked).then(() => this.setState({ alwaysShowMenuBar: checked })); }); (0, _defineProperty2.default)(this, "onMinimizeToTrayChange", (checked /*: boolean*/ ) => { _PlatformPeg.default.get().setMinimizeToTrayEnabled(checked).then(() => this.setState({ minimizeToTray: checked })); }); (0, _defineProperty2.default)(this, "onAutocompleteDelayChange", (e /*: React.ChangeEvent<HTMLInputElement>*/ ) => { this.setState({ autocompleteDelay: e.target.value }); _SettingsStore.default.setValue("autocompleteDelay", null, _SettingLevel.SettingLevel.DEVICE, e.target.value); }); (0, _defineProperty2.default)(this, "onReadMarkerInViewThresholdMs", (e /*: React.ChangeEvent<HTMLInputElement>*/ ) => { this.setState({ readMarkerInViewThresholdMs: e.target.value }); _SettingsStore.default.setValue("readMarkerInViewThresholdMs", null, _SettingLevel.SettingLevel.DEVICE, e.target.value); }); (0, _defineProperty2.default)(this, "onReadMarkerOutOfViewThresholdMs", (e /*: React.ChangeEvent<HTMLInputElement>*/ ) => { this.setState({ readMarkerOutOfViewThresholdMs: e.target.value }); _SettingsStore.default.setValue("readMarkerOutOfViewThresholdMs", null, _SettingLevel.SettingLevel.DEVICE, e.target.value); }); this.state = { autoLaunch: false, autoLaunchSupported: false, warnBeforeExit: true, warnBeforeExitSupported: false, alwaysShowMenuBar: true, alwaysShowMenuBarSupported: false, minimizeToTray: true, minimizeToTraySupported: false, autocompleteDelay: _SettingsStore.default.getValueAt(_SettingLevel.SettingLevel.DEVICE, 'autocompleteDelay').toString(10), readMarkerInViewThresholdMs: _SettingsStore.default.getValueAt(_SettingLevel.SettingLevel.DEVICE, 'readMarkerInViewThresholdMs').toString(10), readMarkerOutOfViewThresholdMs: _SettingsStore.default.getValueAt(_SettingLevel.SettingLevel.DEVICE, 'readMarkerOutOfViewThresholdMs').toString(10) }; } async componentDidMount() { const platform = _PlatformPeg.default.get(); const autoLaunchSupported = await platform.supportsAutoLaunch(); let autoLaunch = false; if (autoLaunchSupported) { autoLaunch = await platform.getAutoLaunchEnabled(); } const warnBeforeExitSupported = await platform.supportsWarnBeforeExit(); let warnBeforeExit = false; if (warnBeforeExitSupported) { warnBeforeExit = await platform.shouldWarnBeforeExit(); } const alwaysShowMenuBarSupported = await platform.supportsAutoHideMenuBar(); let alwaysShowMenuBar = true; if (alwaysShowMenuBarSupported) { alwaysShowMenuBar = !(await platform.getAutoHideMenuBarEnabled()); } const minimizeToTraySupported = await platform.supportsMinimizeToTray(); let minimizeToTray = true; if (minimizeToTraySupported) { minimizeToTray = await platform.getMinimizeToTrayEnabled(); } this.setState({ autoLaunch, autoLaunchSupported, warnBeforeExit, warnBeforeExitSupported, alwaysShowMenuBarSupported, alwaysShowMenuBar, minimizeToTraySupported, minimizeToTray }); } renderGroup(settingIds /*: string[]*/ ) /*: React.ReactNodeArray*/ { const SettingsFlag = sdk.getComponent("views.elements.SettingsFlag"); return settingIds.filter(_SettingsStore.default.isEnabled).map(i => { return /*#__PURE__*/_react.default.createElement(SettingsFlag, { key: i, name: i, level: _SettingLevel.SettingLevel.ACCOUNT }); }); } render() { let autoLaunchOption = null; if (this.state.autoLaunchSupported) { autoLaunchOption = /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, { value: this.state.autoLaunch, onChange: this.onAutoLaunchChange, label: (0, _languageHandler._t)('Start automatically after system login') }); } let warnBeforeExitOption = null; if (this.state.warnBeforeExitSupported) { warnBeforeExitOption = /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, { value: this.state.warnBeforeExit, onChange: this.onWarnBeforeExitChange, label: (0, _languageHandler._t)('Warn before quitting') }); } let autoHideMenuOption = null; if (this.state.alwaysShowMenuBarSupported) { autoHideMenuOption = /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, { value: this.state.alwaysShowMenuBar, onChange: this.onAlwaysShowMenuBarChange, label: (0, _languageHandler._t)('Always show the window menu bar') }); } let minimizeToTrayOption = null; if (this.state.minimizeToTraySupported) { minimizeToTrayOption = /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, { value: this.state.minimizeToTray, onChange: this.onMinimizeToTrayChange, label: (0, _languageHandler._t)('Show tray icon and minimize window to it on close') }); } return /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab mx_PreferencesUserSettingsTab" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab_heading" }, (0, _languageHandler._t)("Preferences")), /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab_section" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_SettingsTab_subheading" }, (0, _languageHandler._t)("Room list")), this.renderGroup(PreferencesUserSettingsTab.ROOM_LIST_SETTINGS)), /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab_section" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_SettingsTab_subheading" }, (0, _languageHandler._t)("Composer")), this.renderGroup(PreferencesUserSettingsTab.COMPOSER_SETTINGS)), /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab_section" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_SettingsTab_subheading" }, (0, _languageHandler._t)("Timeline")), this.renderGroup(PreferencesUserSettingsTab.TIMELINE_SETTINGS)), /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab_section" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_SettingsTab_subheading" }, (0, _languageHandler._t)("General")), this.renderGroup(PreferencesUserSettingsTab.GENERAL_SETTINGS), minimizeToTrayOption, autoHideMenuOption, autoLaunchOption, warnBeforeExitOption, /*#__PURE__*/_react.default.createElement(_Field.default, { label: (0, _languageHandler._t)('Autocomplete delay (ms)'), type: "number", value: this.state.autocompleteDelay, onChange: this.onAutocompleteDelayChange }), /*#__PURE__*/_react.default.createElement(_Field.default, { label: (0, _languageHandler._t)('Read Marker lifetime (ms)'), type: "number", value: this.state.readMarkerInViewThresholdMs, onChange: this.onReadMarkerInViewThresholdMs }), /*#__PURE__*/_react.default.createElement(_Field.default, { label: (0, _languageHandler._t)('Read Marker off-screen lifetime (ms)'), type: "number", value: this.state.readMarkerOutOfViewThresholdMs, onChange: this.onReadMarkerOutOfViewThresholdMs }))); } }, (0, _defineProperty2.default)(_class2, "ROOM_LIST_SETTINGS", ['breadcrumbs']), (0, _defineProperty2.default)(_class2, "COMPOSER_SETTINGS", ['MessageComposerInput.autoReplaceEmoji', 'MessageComposerInput.suggestEmoji', 'sendTypingNotifications', 'MessageComposerInput.ctrlEnterToSend', 'MessageComposerInput.showStickersButton']), (0, _defineProperty2.default)(_class2, "TIMELINE_SETTINGS", ['showTypingNotifications', 'autoplayGifsAndVideos', 'urlPreviewsEnabled', 'TextualBody.enableBigEmoji', 'showReadReceipts', 'showTwelveHourTimestamps', 'alwaysShowTimestamps', 'showRedactions', 'enableSyntaxHighlightLanguageDetection', 'expandCodeByDefault', 'scrollToBottomOnMessageSent', 'showCodeLineNumbers', 'showJoinLeaves', 'showAvatarChanges', 'showDisplaynameChanges', 'showImages', 'showChatEffects', 'Pill.shouldShowPillAvatar', 'ctrlFForSearch']), (0, _defineProperty2.default)(_class2, "GENERAL_SETTINGS", ['TagPanel.enableTagPanel', 'promptBeforeInviteUnknownUsers' // Start automatically after startup (electron-only) // Autocomplete delay (niche text box) ]), _temp)) || _class); exports.default = PreferencesUserSettingsTab; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3NldHRpbmdzL3RhYnMvdXNlci9QcmVmZXJlbmNlc1VzZXJTZXR0aW5nc1RhYi50c3giXSwibmFtZXMiOlsiUHJlZmVyZW5jZXNVc2VyU2V0dGluZ3NUYWIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJjaGVja2VkIiwiUGxhdGZvcm1QZWciLCJnZXQiLCJzZXRBdXRvTGF1bmNoRW5hYmxlZCIsInRoZW4iLCJzZXRTdGF0ZSIsImF1dG9MYXVuY2giLCJzZXRXYXJuQmVmb3JlRXhpdCIsIndhcm5CZWZvcmVFeGl0Iiwic2V0QXV0b0hpZGVNZW51QmFyRW5hYmxlZCIsImFsd2F5c1Nob3dNZW51QmFyIiwic2V0TWluaW1pemVUb1RyYXlFbmFibGVkIiwibWluaW1pemVUb1RyYXkiLCJlIiwiYXV0b2NvbXBsZXRlRGVsYXkiLCJ0YXJnZXQiLCJ2YWx1ZSIsIlNldHRpbmdzU3RvcmUiLCJzZXRWYWx1ZSIsIlNldHRpbmdMZXZlbCIsIkRFVklDRSIsInJlYWRNYXJrZXJJblZpZXdUaHJlc2hvbGRNcyIsInJlYWRNYXJrZXJPdXRPZlZpZXdUaHJlc2hvbGRNcyIsInN0YXRlIiwiYXV0b0xhdW5jaFN1cHBvcnRlZCIsIndhcm5CZWZvcmVFeGl0U3VwcG9ydGVkIiwiYWx3YXlzU2hvd01lbnVCYXJTdXBwb3J0ZWQiLCJtaW5pbWl6ZVRvVHJheVN1cHBvcnRlZCIsImdldFZhbHVlQXQiLCJ0b1N0cmluZyIsImNvbXBvbmVudERpZE1vdW50IiwicGxhdGZvcm0iLCJzdXBwb3J0c0F1dG9MYXVuY2giLCJnZXRBdXRvTGF1bmNoRW5hYmxlZCIsInN1cHBvcnRzV2FybkJlZm9yZUV4aXQiLCJzaG91bGRXYXJuQmVmb3JlRXhpdCIsInN1cHBvcnRzQXV0b0hpZGVNZW51QmFyIiwiZ2V0QXV0b0hpZGVNZW51QmFyRW5hYmxlZCIsInN1cHBvcnRzTWluaW1pemVUb1RyYXkiLCJnZXRNaW5pbWl6ZVRvVHJheUVuYWJsZWQiLCJyZW5kZXJHcm91cCIsInNldHRpbmdJZHMiLCJTZXR0aW5nc0ZsYWciLCJzZGsiLCJnZXRDb21wb25lbnQiLCJmaWx0ZXIiLCJpc0VuYWJsZWQiLCJtYXAiLCJpIiwiQUNDT1VOVCIsInJlbmRlciIsImF1dG9MYXVuY2hPcHRpb24iLCJvbkF1dG9MYXVuY2hDaGFuZ2UiLCJ3YXJuQmVmb3JlRXhpdE9wdGlvbiIsIm9uV2FybkJlZm9yZUV4aXRDaGFuZ2UiLCJhdXRvSGlkZU1lbnVPcHRpb24iLCJvbkFsd2F5c1Nob3dNZW51QmFyQ2hhbmdlIiwibWluaW1pemVUb1RyYXlPcHRpb24iLCJvbk1pbmltaXplVG9UcmF5Q2hhbmdlIiwiUk9PTV9MSVNUX1NFVFRJTkdTIiwiQ09NUE9TRVJfU0VUVElOR1MiLCJUSU1FTElORV9TRVRUSU5HUyIsIkdFTkVSQUxfU0VUVElOR1MiLCJvbkF1dG9jb21wbGV0ZURlbGF5Q2hhbmdlIiwib25SZWFkTWFya2VySW5WaWV3VGhyZXNob2xkTXMiLCJvblJlYWRNYXJrZXJPdXRPZlZpZXdUaHJlc2hvbGRNcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWlCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztJQWlCcUJBLDBCLFdBRHBCLGdEQUFxQixxREFBckIsQyxtQ0FBRCxNQUNxQkEsMEJBRHJCLFNBQ3dEQyxlQUFNQztBQUQ5RDtBQUNvRjtBQTBDaEZDLEVBQUFBLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQURlLDhEQTREVSxDQUFDQztBQUFEO0FBQUEsU0FBc0I7QUFDL0NDLDJCQUFZQyxHQUFaLEdBQWtCQyxvQkFBbEIsQ0FBdUNILE9BQXZDLEVBQWdESSxJQUFoRCxDQUFxRCxNQUFNLEtBQUtDLFFBQUwsQ0FBYztBQUFDQyxRQUFBQSxVQUFVLEVBQUVOO0FBQWIsT0FBZCxDQUEzRDtBQUNILEtBOURrQjtBQUFBLGtFQWdFYyxDQUFD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QixnQkFSdUIsRUFTdkIsd0NBVHVCLEVBVXZCLHFCQVZ1QixFQVd2Qiw2QkFYdUIsRUFZdkIscUJBWnVCLEVBYXZCLGdCQWJ1QixFQWN2QixtQkFkdUIsRUFldkIsd0JBZnVCLEVBZ0J2QixZQWhCdUIsRUFpQnZCLGlCQWpCdUIsRUFrQnZCLDJCQWxCdUIsRUFtQnZCLGdCQW5CdUIsQyw4REFzQkQsQ0FDdEIseUJBRHNCLEVBRXRCLGdDQUZzQixDQUd0QjtBQUNBO0FBSnNCLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTktMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuQ29weXJpZ2h0IDIwMTkgTWljaGFlbCBUZWxhdHluc2tpIDw3dDNjaGd1eUBnbWFpbC5jb20+XG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7X3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBMYWJlbGxlZFRvZ2dsZVN3aXRjaCBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudHMvTGFiZWxsZWRUb2dnbGVTd2l0Y2hcIjtcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zZXR0aW5ncy9TZXR0aW5nc1N0b3JlXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcIi4uLy4uLy4uL2VsZW1lbnRzL0ZpZWxkXCI7XG5pbXBvcnQgKiBhcyBzZGsgZnJvbSBcIi4uLy4uLy4uLy4uLy4uXCI7XG5pbXBvcnQgUGxhdGZvcm1QZWcgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL1BsYXRmb3JtUGVnXCI7XG5pbXBvcnQge1NldHRpbmdMZXZlbH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NldHRpbmdzL1NldHRpbmdMZXZlbFwiO1xuaW1wb3J0IHsgcmVwbGFjZWFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdXRpbHMvcmVwbGFjZWFibGVDb21wb25lbnRcIjtcblxuaW50ZXJmYWNlIElTdGF0ZSB7XG4gICAgYXV0b0xhdW5jaDogYm9vbGVhbjtcbiAgICBhdXRvTGF1bmNoU3VwcG9ydGVkOiBib29sZWFuO1xuICAgIHdhcm5CZWZvcmVFeGl0OiBib29sZWFuO1xuICAgIHdhcm5CZWZvcmVFeGl0U3VwcG9ydGVkOiBib29sZWFuO1xuICAgIGFsd2F5c1Nob3dNZW51QmFyU3VwcG9ydGVkOiBib29sZWFuO1xuICAgIGFsd2F5c1Nob3dNZW51QmFyOiBib29sZWFuO1xuICAgIG1pbmltaXplVG9UcmF5U3VwcG9ydGVkOiBib29sZWFuO1xuICAgIG1pbmltaXplVG9UcmF5OiBib29sZWFuO1xuICAgIGF1dG9jb21wbGV0ZURlbGF5OiBzdHJpbmc7XG4gICAgcmVhZE1hcmtlckluVmlld1RocmVzaG9sZE1zOiBzdHJpbmc7XG4gICAgcmVhZE1hcmtlck91dE9mVmlld1RocmVzaG9sZE1zOiBzdHJpbmc7XG59XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLnNldHRpbmdzLnRhYnMudXNlci5QcmVmZXJlbmNlc1VzZXJTZXR0aW5nc1RhYlwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJlZmVyZW5jZXNVc2VyU2V0dGluZ3NUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30sIElTdGF0ZT4ge1xuICAgIHN0YXRpYyBST09NX0xJU1RfU0VUVElOR1MgPSBbXG4gICAgICAgICdicmVhZGNydW1icycsXG4gICAgXTtcblxuICAgIHN0YXRpYyBDT01QT1NFUl9TRVRUSU5HUyA9IFtcbiAgICAgICAgJ01lc3NhZ2VDb21wb3NlcklucHV0LmF1dG9SZXBsYWNlRW1vamknLFxuICAgICAgICAnTWVzc2FnZUNvbXBvc2VySW5wdXQuc3VnZ2VzdEVtb2ppJyxcbiAgICAgICAgJ3NlbmRUeXBpbmdOb3RpZmljYXRpb25zJyxcbiAgICAgICAgJ01lc3NhZ2VDb21wb3NlcklucHV0LmN0cmxFbnRlclRvU2VuZCcsXG4gICAgICAgICdNZXNzYWdlQ29tcG9zZXJJbnB1dC5zaG93U3RpY2tlcnNCdXR0b24nLFxuICAgIF07XG5cbiAgICBzdGF0aWMgVElNRUxJTkVfU0VUVElOR1MgPSBbXG4gICAgICAgICdzaG93VHlwaW5nTm90aWZpY2F0aW9ucycsXG4gICAgICAgICdhdXRvcGxheUdpZnNBbmRWaWRlb3MnLFxuICAgICAgICAndXJsUHJldmlld3NFbmFibGVkJyxcbiAgICAgICAgJ1RleHR1YWxCb2R5LmVuYWJsZUJpZ0Vtb2ppJyxcbiAgICAgICAgJ3Nob3dSZWFkUmVjZWlwdHMnLFxuICAgICAgICAnc2hvd1R3ZWx2ZUhvdXJUaW1lc3RhbXBzJyxcbiAgICAgICAgJ2Fsd2F5c1Nob3dUaW1lc3RhbXBzJyxcbiAgICAgICAgJ3Nob3dSZWRhY3Rpb25zJyxcbiAgICAgICAgJ2VuYWJsZVN5bnRheEhpZ2hsaWdodExhbmd1YWdlRGV0ZWN0aW9uJyxcbiAgICAgICAgJ2V4cGFuZENvZGVCeURlZmF1bHQnLFxuICAgICAgICAnc2Nyb2xsVG9Cb3R0b21Pbk1lc3NhZ2VTZW50JyxcbiAgICAgICAgJ3Nob3dDb2RlTGluZU51bWJlcnMnLFxuICAgICAgICAnc2hvd0pvaW5MZWF2ZXMnLFxuICAgICAgICAnc2hvd0F2YXRhckNoYW5nZXMnLFxuICAgICAgICAnc2hvd0Rpc3BsYXluYW1lQ2hhbmdlcycsXG4gICAgICAgICdzaG93SW1hZ2VzJyxcbiAgICAgICAgJ3Nob3dDaGF0RWZmZWN0cycsXG4gICAgICAgICdQaWxsLnNob3VsZFNob3dQaWxsQXZhdGFyJyxcbiAgICAgICAgJ2N0cmxGRm9yU2VhcmNoJyxcbiAgICBdO1xuXG4gICAgc3RhdGljIEdFTkVSQUxfU0VUVElOR1MgPSBbXG4gICAgICAgICdUYWdQYW5lbC5lbmFibGVUYWdQYW5lbCcsXG4gICAgICAgICdwcm9tcHRCZWZvcmVJbnZpdGVVbmtub3duVXNlcnMnLFxuICAgICAgICAvLyBTdGFydCBhdXRvbWF0aWNhbGx5IGFmdGVyIHN0YXJ0dXAgKGVsZWN0cm9uLW9ubHkpXG4gICAgICAgIC8vIEF1dG9jb21wbGV0ZSBkZWxheSAobmljaGUgdGV4dCBib3gpXG4gICAgXTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYXV0b0xhdW5jaDogZmFsc2UsXG4gICAgICAgICAgICBhdXRvTGF1bmNoU3VwcG9ydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHdhcm5CZWZvcmVFeGl0OiB0cnVlLFxuICAgICAgICAgICAgd2FybkJlZm9yZUV4aXRTdXBwb3J0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgYWx3YXlzU2hvd01lbnVCYXI6IHRydWUsXG4gICAgICAgICAgICBhbHdheXNTaG93TWVudUJhclN1cHBvcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBtaW5pbWl6ZVRvVHJheTogdHJ1ZSxcbiAgICAgICAgICAgIG1pbmltaXplVG9UcmF5U3VwcG9ydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZURlbGF5OlxuICAgICAgICAgICAgICAgIFNldHRpbmdzU3RvcmUuZ2V0VmFsdWVBdChTZXR0aW5nTGV2ZWwuREVWSUNFLCAnYXV0b2NvbXBsZXRlRGVsYXknKS50b1N0cmluZygxMCksXG4gICAgICAgICAgICByZWFkTWFya2VySW5WaWV3VGhyZXNob2xkTXM6XG4gICAgICAgICAgICAgICAgU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZUF0KFNldHRpbmdMZXZlbC5ERVZJQ0UsICdyZWFkTWFya2VySW5WaWV3VGhyZXNob2xkTXMnKS50b1N0cmluZygxMCksXG4gICAgICAgICAgICByZWFkTWFya2VyT3V0T2ZWaWV3VGhyZXNob2xkTXM6XG4gICAgICAgICAgICAgICAgU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZUF0KFNldHRpbmdMZXZlbC5ERVZJQ0UsICdyZWFkTWFya2VyT3V0T2ZWaWV3VGhyZXNob2xkTXMnKS50b1N0cmluZygxMCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gUGxhdGZvcm1QZWcuZ2V0KCk7XG5cbiAgICAgICAgY29uc3QgYXV0b0xhdW5jaFN1cHBvcnRlZCA9IGF3YWl0IHBsYXRmb3JtLnN1cHBvcnRzQXV0b0xhdW5jaCgpO1xuICAgICAgICBsZXQgYXV0b0xhdW5jaCA9IGZhbHNlO1xuICAgICAgICBpZiAoYXV0b0xhdW5jaFN1cHBvcnRlZCkge1xuICAgICAgICAgICAgYXV0b0xhdW5jaCA9IGF3YWl0IHBsYXRmb3JtLmdldEF1dG9MYXVuY2hFbmFibGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3YXJuQmVmb3JlRXhpdFN1cHBvcnRlZCA9IGF3YWl0IHBsYXRmb3JtLnN1cHBvcnRzV2FybkJlZm9yZUV4aXQoKTtcbiAgICAgICAgbGV0IHdhcm5CZWZvcmVFeGl0ID0gZmFsc2U7XG4gICAgICAgIGlmICh3YXJuQmVmb3JlRXhpdFN1cHBvcnRlZCkge1xuICAgICAgICAgICAgd2FybkJlZm9yZUV4aXQgPSBhd2FpdCBwbGF0Zm9ybS5zaG91bGRXYXJuQmVmb3JlRXhpdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWx3YXlzU2hvd01lbnVCYXJTdXBwb3J0ZWQgPSBhd2FpdCBwbGF0Zm9ybS5zdXBwb3J0c0F1dG9IaWRlTWVudUJhcigpO1xuICAgICAgICBsZXQgYWx3YXlzU2hvd01lbnVCYXIgPSB0cnVlO1xuICAgICAgICBpZiAoYWx3YXlzU2hvd01lbnVCYXJTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIGFsd2F5c1Nob3dNZW51QmFyID0gIWF3YWl0IHBsYXRmb3JtLmdldEF1dG9IaWRlTWVudUJhckVuYWJsZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pbmltaXplVG9UcmF5U3VwcG9ydGVkID0gYXdhaXQgcGxhdGZvcm0uc3VwcG9ydHNNaW5pbWl6ZVRvVHJheSgpO1xuICAgICAgICBsZXQgbWluaW1pemVUb1RyYXkgPSB0cnVlO1xuICAgICAgICBpZiAobWluaW1pemVUb1RyYXlTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIG1pbmltaXplVG9UcmF5ID0gYXdhaXQgcGxhdGZvcm0uZ2V0TWluaW1pemVUb1RyYXlFbmFibGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGF1dG9MYXVuY2gsXG4gICAgICAgICAgICBhdXRvTGF1bmNoU3VwcG9ydGVkLFxuICAgICAgICAgICAgd2FybkJlZm9yZUV4aXQsXG4gICAgICAgICAgICB3YXJuQmVmb3JlRXhpdFN1cHBvcnRlZCxcbiAgICAgICAgICAgIGFsd2F5c1Nob3dNZW51QmFyU3VwcG9ydGVkLFxuICAgICAgICAgICAgYWx3YXlzU2hvd01lbnVCYXIsXG4gICAgICAgICAgICBtaW5pbWl6ZVRvVHJheVN1cHBvcnRlZCxcbiAgICAgICAgICAgIG1pbmltaXplVG9UcmF5LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXV0b0xhdW5jaENoYW5nZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgICAgIFBsYXRmb3JtUGVnLmdldCgpLnNldEF1dG9MYXVuY2hFbmFibGVkKGNoZWNrZWQpLnRoZW4oKCkgPT4gdGhpcy5zZXRTdGF0ZSh7YXV0b0xhdW5jaDogY2hlY2tlZH0pKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbldhcm5CZWZvcmVFeGl0Q2hhbmdlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgUGxhdGZvcm1QZWcuZ2V0KCkuc2V0V2FybkJlZm9yZUV4aXQoY2hlY2tlZCkudGhlbigoKSA9PiB0aGlzLnNldFN0YXRlKHt3YXJuQmVmb3JlRXhpdDogY2hlY2tlZH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQWx3YXlzU2hvd01lbnVCYXJDaGFuZ2UgPSAoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICBQbGF0Zm9ybVBlZy5nZXQoKS5zZXRBdXRvSGlkZU1lbnVCYXJFbmFibGVkKCFjaGVja2VkKS50aGVuKCgpID0+IHRoaXMuc2V0U3RhdGUoe2Fsd2F5c1Nob3dNZW51QmFyOiBjaGVja2VkfSkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uTWluaW1pemVUb1RyYXlDaGFuZ2UgPSAoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICBQbGF0Zm9ybVBlZy5nZXQoKS5zZXRNaW5pbWl6ZVRvVHJheUVuYWJsZWQoY2hlY2tlZCkudGhlbigoKSA9PiB0aGlzLnNldFN0YXRlKHttaW5pbWl6ZVRvVHJheTogY2hlY2tlZH0pKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkF1dG9jb21wbGV0ZURlbGF5Q2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2F1dG9jb21wbGV0ZURlbGF5OiBlLnRhcmdldC52YWx1ZX0pO1xuICAgICAgICBTZXR0aW5nc1N0b3JlLnNldFZhbHVlKFwiYXV0b2NvbXBsZXRlRGVsYXlcIiwgbnVsbCwgU2V0dGluZ0xldmVsLkRFVklDRSwgZS50YXJnZXQudmFsdWUpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uUmVhZE1hcmtlckluVmlld1RocmVzaG9sZE1zID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3JlYWRNYXJrZXJJblZpZXdUaHJlc2hvbGRNczogZS50YXJnZXQudmFsdWV9KTtcbiAgICAgICAgU2V0dGluZ3NTdG9yZS5zZXRWYWx1ZShcInJlYWRNYXJrZXJJblZpZXdUaHJlc2hvbGRNc1wiLCBudWxsLCBTZXR0aW5nTGV2ZWwuREVWSUNFLCBlLnRhcmdldC52YWx1ZSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25SZWFkTWFya2VyT3V0T2ZWaWV3VGhyZXNob2xkTXMgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cmVhZE1hcmtlck91dE9mVmlld1RocmVzaG9sZE1zOiBlLnRhcmdldC52YWx1ZX0pO1xuICAgICAgICBTZXR0aW5nc1N0b3JlLnNldFZhbHVlKFwicmVhZE1hcmtlck91dE9mVmlld1RocmVzaG9sZE1zXCIsIG51bGwsIFNldHRpbmdMZXZlbC5ERVZJQ0UsIGUudGFyZ2V0LnZhbHVlKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZW5kZXJHcm91cChzZXR0aW5nSWRzOiBzdHJpbmdbXSk6IFJlYWN0LlJlYWN0Tm9kZUFycmF5IHtcbiAgICAgICAgY29uc3QgU2V0dGluZ3NGbGFnID0gc2RrLmdldENvbXBvbmVudChcInZpZXdzLmVsZW1lbnRzLlNldHRpbmdzRmxhZ1wiKTtcbiAgICAgICAgcmV0dXJuIHNldHRpbmdJZHMuZmlsdGVyKFNldHRpbmdzU3RvcmUuaXNFbmFibGVkKS5tYXAoaSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPFNldHRpbmdzRmxhZyBrZXk9e2l9IG5hbWU9e2l9IGxldmVsPXtTZXR0aW5nTGV2ZWwuQUNDT1VOVH0gLz47XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IGF1dG9MYXVuY2hPcHRpb24gPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5hdXRvTGF1bmNoU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICBhdXRvTGF1bmNoT3B0aW9uID0gPExhYmVsbGVkVG9nZ2xlU3dpdGNoXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYXV0b0xhdW5jaH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkF1dG9MYXVuY2hDaGFuZ2V9XG4gICAgICAgICAgICAgICAgbGFiZWw9e190KCdTdGFydCBhdXRvbWF0aWNhbGx5IGFmdGVyIHN5c3RlbSBsb2dpbicpfSAvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3YXJuQmVmb3JlRXhpdE9wdGlvbiA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLndhcm5CZWZvcmVFeGl0U3VwcG9ydGVkKSB7XG4gICAgICAgICAgICB3YXJuQmVmb3JlRXhpdE9wdGlvbiA9IDxMYWJlbGxlZFRvZ2dsZVN3aXRjaFxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLndhcm5CZWZvcmVFeGl0fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uV2FybkJlZm9yZUV4aXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgbGFiZWw9e190KCdXYXJuIGJlZm9yZSBxdWl0dGluZycpfSAvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhdXRvSGlkZU1lbnVPcHRpb24gPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5hbHdheXNTaG93TWVudUJhclN1cHBvcnRlZCkge1xuICAgICAgICAgICAgYXV0b0hpZGVNZW51T3B0aW9uID0gPExhYmVsbGVkVG9nZ2xlU3dpdGNoXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYWx3YXlzU2hvd01lbnVCYXJ9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25BbHdheXNTaG93TWVudUJhckNoYW5nZX1cbiAgICAgICAgICAgICAgICBsYWJlbD17X3QoJ0Fsd2F5cyBzaG93IHRoZSB3aW5kb3cgbWVudSBiYXInKX0gLz47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWluaW1pemVUb1RyYXlPcHRpb24gPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5taW5pbWl6ZVRvVHJheVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgbWluaW1pemVUb1RyYXlPcHRpb24gPSA8TGFiZWxsZWRUb2dnbGVTd2l0Y2hcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5taW5pbWl6ZVRvVHJheX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbk1pbmltaXplVG9UcmF5Q2hhbmdlfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtfdCgnU2hvdyB0cmF5IGljb24gYW5kIG1pbmltaXplIHdpbmRvdyB0byBpdCBvbiBjbG9zZScpfSAvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NldHRpbmdzVGFiIG14X1ByZWZlcmVuY2VzVXNlclNldHRpbmdzVGFiXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9TZXR0aW5nc1RhYl9oZWFkaW5nXCI+e190KFwiUHJlZmVyZW5jZXNcIil9PC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NldHRpbmdzVGFiX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfU2V0dGluZ3NUYWJfc3ViaGVhZGluZ1wiPntfdChcIlJvb20gbGlzdFwiKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckdyb3VwKFByZWZlcmVuY2VzVXNlclNldHRpbmdzVGFiLlJPT01fTElTVF9TRVRUSU5HUyl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NldHRpbmdzVGFiX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfU2V0dGluZ3NUYWJfc3ViaGVhZGluZ1wiPntfdChcIkNvbXBvc2VyXCIpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyR3JvdXAoUHJlZmVyZW5jZXNVc2VyU2V0dGluZ3NUYWIuQ09NUE9TRVJfU0VUVElOR1MpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9TZXR0aW5nc1RhYl9zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14X1NldHRpbmdzVGFiX3N1YmhlYWRpbmdcIj57X3QoXCJUaW1lbGluZVwiKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckdyb3VwKFByZWZlcmVuY2VzVXNlclNldHRpbmdzVGFiLlRJTUVMSU5FX1NFVFRJTkdTKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfU2V0dGluZ3NUYWJfc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteF9TZXR0aW5nc1RhYl9zdWJoZWFkaW5nXCI+e190KFwiR2VuZXJhbFwiKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckdyb3VwKFByZWZlcmVuY2VzVXNlclNldHRpbmdzVGFiLkdFTkVSQUxfU0VUVElOR1MpfVxuICAgICAgICAgICAgICAgICAgICB7bWluaW1pemVUb1RyYXlPcHRpb259XG4gICAgICAgICAgICAgICAgICAgIHthdXRvSGlkZU1lbnVPcHRpb259XG4gICAgICAgICAgICAgICAgICAgIHthdXRvTGF1bmNoT3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICB7d2FybkJlZm9yZUV4aXRPcHRpb259XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KCdBdXRvY29tcGxldGUgZGVsYXkgKG1zKScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0nbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYXV0b2NvbXBsZXRlRGVsYXl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkF1dG9jb21wbGV0ZURlbGF5Q2hhbmdlfSAvPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdCgnUmVhZCBNYXJrZXIgbGlmZXRpbWUgKG1zKScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0nbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucmVhZE1hcmtlckluVmlld1RocmVzaG9sZE1zfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25SZWFkTWFya2VySW5WaWV3VGhyZXNob2xkTXN9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KCdSZWFkIE1hcmtlciBvZmYtc2NyZWVuIGxpZmV0aW1lIChtcyknKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnJlYWRNYXJrZXJPdXRPZlZpZXdUaHJlc2hvbGRNc31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uUmVhZE1hcmtlck91dE9mVmlld1RocmVzaG9sZE1zfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19