UNPKG

matrix-react-sdk

Version:
392 lines (372 loc) 37.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultBindingsProvider = void 0; var _KeyBindingsManager = require("./KeyBindingsManager"); var _Keyboard = require("./Keyboard"); var _SettingsStore = _interopRequireDefault(require("./settings/SettingsStore")); /* Copyright 2021 Clemens Zeidler Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ const messageComposerBindings = () => /*: KeyBinding<MessageComposerAction>[]*/ { const bindings /*: KeyBinding<MessageComposerAction>[]*/ = [{ action: _KeyBindingsManager.MessageComposerAction.SelectPrevSendHistory, keyCombo: { key: _Keyboard.Key.ARROW_UP, altKey: true, ctrlKey: true } }, { action: _KeyBindingsManager.MessageComposerAction.SelectNextSendHistory, keyCombo: { key: _Keyboard.Key.ARROW_DOWN, altKey: true, ctrlKey: true } }, { action: _KeyBindingsManager.MessageComposerAction.EditPrevMessage, keyCombo: { key: _Keyboard.Key.ARROW_UP } }, { action: _KeyBindingsManager.MessageComposerAction.EditNextMessage, keyCombo: { key: _Keyboard.Key.ARROW_DOWN } }, { action: _KeyBindingsManager.MessageComposerAction.CancelEditing, keyCombo: { key: _Keyboard.Key.ESCAPE } }, { action: _KeyBindingsManager.MessageComposerAction.FormatBold, keyCombo: { key: _Keyboard.Key.B, ctrlOrCmd: true } }, { action: _KeyBindingsManager.MessageComposerAction.FormatItalics, keyCombo: { key: _Keyboard.Key.I, ctrlOrCmd: true } }, { action: _KeyBindingsManager.MessageComposerAction.FormatQuote, keyCombo: { key: _Keyboard.Key.GREATER_THAN, ctrlOrCmd: true, shiftKey: true } }, { action: _KeyBindingsManager.MessageComposerAction.EditUndo, keyCombo: { key: _Keyboard.Key.Z, ctrlOrCmd: true } }, { action: _KeyBindingsManager.MessageComposerAction.MoveCursorToStart, keyCombo: { key: _Keyboard.Key.HOME, ctrlOrCmd: true } }, { action: _KeyBindingsManager.MessageComposerAction.MoveCursorToEnd, keyCombo: { key: _Keyboard.Key.END, ctrlOrCmd: true } }]; if (_Keyboard.isMac) { bindings.push({ action: _KeyBindingsManager.MessageComposerAction.EditRedo, keyCombo: { key: _Keyboard.Key.Z, ctrlOrCmd: true, shiftKey: true } }); } else { bindings.push({ action: _KeyBindingsManager.MessageComposerAction.EditRedo, keyCombo: { key: _Keyboard.Key.Y, ctrlOrCmd: true } }); } if (_SettingsStore.default.getValue('MessageComposerInput.ctrlEnterToSend')) { bindings.push({ action: _KeyBindingsManager.MessageComposerAction.Send, keyCombo: { key: _Keyboard.Key.ENTER, ctrlOrCmd: true } }); bindings.push({ action: _KeyBindingsManager.MessageComposerAction.NewLine, keyCombo: { key: _Keyboard.Key.ENTER } }); } else { bindings.push({ action: _KeyBindingsManager.MessageComposerAction.Send, keyCombo: { key: _Keyboard.Key.ENTER } }); bindings.push({ action: _KeyBindingsManager.MessageComposerAction.NewLine, keyCombo: { key: _Keyboard.Key.ENTER, shiftKey: true } }); if (_Keyboard.isMac) { bindings.push({ action: _KeyBindingsManager.MessageComposerAction.NewLine, keyCombo: { key: _Keyboard.Key.ENTER, altKey: true } }); } } return bindings; }; const autocompleteBindings = () => /*: KeyBinding<AutocompleteAction>[]*/ { return [{ action: _KeyBindingsManager.AutocompleteAction.CompleteOrNextSelection, keyCombo: { key: _Keyboard.Key.TAB } }, { action: _KeyBindingsManager.AutocompleteAction.CompleteOrNextSelection, keyCombo: { key: _Keyboard.Key.TAB, ctrlKey: true } }, { action: _KeyBindingsManager.AutocompleteAction.CompleteOrPrevSelection, keyCombo: { key: _Keyboard.Key.TAB, shiftKey: true } }, { action: _KeyBindingsManager.AutocompleteAction.CompleteOrPrevSelection, keyCombo: { key: _Keyboard.Key.TAB, ctrlKey: true, shiftKey: true } }, { action: _KeyBindingsManager.AutocompleteAction.Cancel, keyCombo: { key: _Keyboard.Key.ESCAPE } }, { action: _KeyBindingsManager.AutocompleteAction.PrevSelection, keyCombo: { key: _Keyboard.Key.ARROW_UP } }, { action: _KeyBindingsManager.AutocompleteAction.NextSelection, keyCombo: { key: _Keyboard.Key.ARROW_DOWN } }]; }; const roomListBindings = () => /*: KeyBinding<RoomListAction>[]*/ { return [{ action: _KeyBindingsManager.RoomListAction.ClearSearch, keyCombo: { key: _Keyboard.Key.ESCAPE } }, { action: _KeyBindingsManager.RoomListAction.PrevRoom, keyCombo: { key: _Keyboard.Key.ARROW_UP } }, { action: _KeyBindingsManager.RoomListAction.NextRoom, keyCombo: { key: _Keyboard.Key.ARROW_DOWN } }, { action: _KeyBindingsManager.RoomListAction.SelectRoom, keyCombo: { key: _Keyboard.Key.ENTER } }, { action: _KeyBindingsManager.RoomListAction.CollapseSection, keyCombo: { key: _Keyboard.Key.ARROW_LEFT } }, { action: _KeyBindingsManager.RoomListAction.ExpandSection, keyCombo: { key: _Keyboard.Key.ARROW_RIGHT } }]; }; const roomBindings = () => /*: KeyBinding<RoomAction>[]*/ { const bindings /*: KeyBinding<RoomAction>[]*/ = [{ action: _KeyBindingsManager.RoomAction.ScrollUp, keyCombo: { key: _Keyboard.Key.PAGE_UP } }, { action: _KeyBindingsManager.RoomAction.RoomScrollDown, keyCombo: { key: _Keyboard.Key.PAGE_DOWN } }, { action: _KeyBindingsManager.RoomAction.DismissReadMarker, keyCombo: { key: _Keyboard.Key.ESCAPE } }, { action: _KeyBindingsManager.RoomAction.JumpToOldestUnread, keyCombo: { key: _Keyboard.Key.PAGE_UP, shiftKey: true } }, { action: _KeyBindingsManager.RoomAction.UploadFile, keyCombo: { key: _Keyboard.Key.U, ctrlOrCmd: true, shiftKey: true } }, { action: _KeyBindingsManager.RoomAction.JumpToFirstMessage, keyCombo: { key: _Keyboard.Key.HOME, ctrlKey: true } }, { action: _KeyBindingsManager.RoomAction.JumpToLatestMessage, keyCombo: { key: _Keyboard.Key.END, ctrlKey: true } }]; if (_SettingsStore.default.getValue('ctrlFForSearch')) { bindings.push({ action: _KeyBindingsManager.RoomAction.FocusSearch, keyCombo: { key: _Keyboard.Key.F, ctrlOrCmd: true } }); } return bindings; }; const navigationBindings = () => /*: KeyBinding<NavigationAction>[]*/ { return [{ action: _KeyBindingsManager.NavigationAction.FocusRoomSearch, keyCombo: { key: _Keyboard.Key.K, ctrlOrCmd: true } }, { action: _KeyBindingsManager.NavigationAction.ToggleRoomSidePanel, keyCombo: { key: _Keyboard.Key.PERIOD, ctrlOrCmd: true } }, { action: _KeyBindingsManager.NavigationAction.ToggleUserMenu, // Ideally this would be CTRL+P for "Profile", but that's // taken by the print dialog. CTRL+I for "Information" // was previously chosen but conflicted with italics in // composer, so CTRL+` it is keyCombo: { key: _Keyboard.Key.BACKTICK, ctrlOrCmd: true } }, { action: _KeyBindingsManager.NavigationAction.ToggleShortCutDialog, keyCombo: { key: _Keyboard.Key.SLASH, ctrlOrCmd: true } }, { action: _KeyBindingsManager.NavigationAction.ToggleShortCutDialog, keyCombo: { key: _Keyboard.Key.SLASH, ctrlOrCmd: true, shiftKey: true } }, { action: _KeyBindingsManager.NavigationAction.GoToHome, keyCombo: { key: _Keyboard.Key.H, ctrlKey: true, altKey: !_Keyboard.isMac, shiftKey: _Keyboard.isMac } }, { action: _KeyBindingsManager.NavigationAction.SelectPrevRoom, keyCombo: { key: _Keyboard.Key.ARROW_UP, altKey: true } }, { action: _KeyBindingsManager.NavigationAction.SelectNextRoom, keyCombo: { key: _Keyboard.Key.ARROW_DOWN, altKey: true } }, { action: _KeyBindingsManager.NavigationAction.SelectPrevUnreadRoom, keyCombo: { key: _Keyboard.Key.ARROW_UP, altKey: true, shiftKey: true } }, { action: _KeyBindingsManager.NavigationAction.SelectNextUnreadRoom, keyCombo: { key: _Keyboard.Key.ARROW_DOWN, altKey: true, shiftKey: true } }]; }; const defaultBindingsProvider /*: IKeyBindingsProvider*/ = { getMessageComposerBindings: messageComposerBindings, getAutocompleteBindings: autocompleteBindings, getRoomListBindings: roomListBindings, getRoomBindings: roomBindings, getNavigationBindings: navigationBindings }; exports.defaultBindingsProvider = defaultBindingsProvider; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9LZXlCaW5kaW5nc0RlZmF1bHRzLnRzIl0sIm5hbWVzIjpbIm1lc3NhZ2VDb21wb3NlckJpbmRpbmdzIiwiYmluZGluZ3MiLCJhY3Rpb24iLCJNZXNzYWdlQ29tcG9zZXJBY3Rpb24iLCJTZWxlY3RQcmV2U2VuZEhpc3RvcnkiLCJrZXlDb21ibyIsImtleSIsIktleSIsIkFSUk9XX1VQIiwiYWx0S2V5IiwiY3RybEtleSIsIlNlbGVjdE5leHRTZW5kSGlzdG9yeSIsIkFSUk9XX0RPV04iLCJFZGl0UHJldk1lc3NhZ2UiLCJFZGl0TmV4dE1lc3NhZ2UiLCJDYW5jZWxFZGl0aW5nIiwiRVNDQVBFIiwiRm9ybWF0Qm9sZCIsIkIiLCJjdHJsT3JDbWQiLCJGb3JtYXRJdGFsaWNzIiwiSSIsIkZvcm1hdFF1b3RlIiwiR1JFQVRFUl9USEFOIiwic2hpZnRLZXkiLCJFZGl0VW5kbyIsIloiLCJNb3ZlQ3Vyc29yVG9TdGFydCIsIkhPTUUiLCJNb3ZlQ3Vyc29yVG9FbmQiLCJFTkQiLCJpc01hYyIsInB1c2giLCJFZGl0UmVkbyIsIlkiLCJTZXR0aW5nc1N0b3JlIiwiZ2V0VmFsdWUiLCJTZW5kIiwiRU5URVIiLCJOZXdMaW5lIiwiYXV0b2NvbXBsZXRlQmluZGluZ3MiLCJBdXRvY29tcGxldGVBY3Rpb24iLCJDb21wbGV0ZU9yTmV4dFNlbGVjdGlvbiIsIlRBQiIsIkNvbXBsZXRlT3JQcmV2U2VsZWN0aW9uIiwiQ2FuY2VsIiwiUHJldlNlbGVjdGlvbiIsIk5leHRTZWxlY3Rpb24iLCJyb29tTGlzdEJpbmRpbmdzIiwiUm9vbUxpc3RBY3Rpb24iLCJDbGVhclNlYXJjaCIsIlByZXZSb29tIiwiTmV4dFJvb20iLCJTZWxlY3RSb29tIiwiQ29sbGFwc2VTZWN0aW9uIiwiQVJST1dfTEVGVCIsIkV4cGFuZFNlY3Rpb24iLCJBUlJPV19SSUdIVCIsInJvb21CaW5kaW5ncyIsIlJvb21BY3Rpb24iLCJTY3JvbGxVcCIsIlBBR0VfVVAiLCJSb29tU2Nyb2xsRG93biIsIlBBR0VfRE9XTiIsIkRpc21pc3NSZWFkTWFya2VyIiwiSnVtcFRvT2xkZXN0VW5yZWFkIiwiVXBsb2FkRmlsZSIsIlUiLCJKdW1wVG9GaXJzdE1lc3NhZ2UiLCJKdW1wVG9MYXRlc3RNZXNzYWdlIiwiRm9jdXNTZWFyY2giLCJGIiwibmF2aWdhdGlvbkJpbmRpbmdzIiwiTmF2aWdhdGlvbkFjdGlvbiIsIkZvY3VzUm9vbVNlYXJjaCIsIksiLCJUb2dnbGVSb29tU2lkZVBhbmVsIiwiUEVSSU9EIiwiVG9nZ2xlVXNlck1lbnUiLCJCQUNLVElDSyIsIlRvZ2dsZVNob3J0Q3V0RGlhbG9nIiwiU0xBU0giLCJHb1RvSG9tZSIsIkgiLCJTZWxlY3RQcmV2Um9vbSIsIlNlbGVjdE5leHRSb29tIiwiU2VsZWN0UHJldlVucmVhZFJvb20iLCJTZWxlY3ROZXh0VW5yZWFkUm9vbSIsImRlZmF1bHRCaW5kaW5nc1Byb3ZpZGVyIiwiZ2V0TWVzc2FnZUNvbXBvc2VyQmluZGluZ3MiLCJnZXRBdXRvY29tcGxldGVCaW5kaW5ncyIsImdldFJvb21MaXN0QmluZGluZ3MiLCJnZXRSb29tQmluZGluZ3MiLCJnZXROYXZpZ2F0aW9uQmluZGluZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWdCQTs7QUFFQTs7QUFDQTs7QUFuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0EsTUFBTUEsdUJBQXVCLEdBQUc7QUFBQTtBQUEyQztBQUN2RSxRQUFNQztBQUE2QztBQUFBLElBQUcsQ0FDbEQ7QUFDSUMsSUFBQUEsTUFBTSxFQUFFQywwQ0FBc0JDLHFCQURsQztBQUVJQyxJQUFBQSxRQUFRLEVBQUU7QUFDTkMsTUFBQUEsR0FBRyxFQUFFQyxjQUFJQyxRQURIO0FBRU5DLE1BQUFBLE1BQU0sRUFBRSxJQUZGO0FBR05DLE1BQUFBLE9BQU8sRUFBRTtBQUhIO0FBRmQsR0FEa0QsRUFTbEQ7QUFDSVIsSUFBQUEsTUFBTSxFQUFFQyww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LE1BQUFBLE1BQU0sRUFBRSxJQUZGO0FBR05lLE1BQUFBLFFBQVEsRUFBRTtBQUhKO0FBRmQsR0F4RUcsQ0FBUDtBQWlGSCxDQWxGRDs7QUFvRk8sTUFBTWdFO0FBQTZDO0FBQUEsRUFBRztBQUN6REMsRUFBQUEsMEJBQTBCLEVBQUV6Rix1QkFENkI7QUFFekQwRixFQUFBQSx1QkFBdUIsRUFBRWxELG9CQUZnQztBQUd6RG1ELEVBQUFBLG1CQUFtQixFQUFFM0MsZ0JBSG9DO0FBSXpENEMsRUFBQUEsZUFBZSxFQUFFbEMsWUFKd0M7QUFLekRtQyxFQUFBQSxxQkFBcUIsRUFBRXJCO0FBTGtDLENBQXREIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDIxIENsZW1lbnMgWmVpZGxlclxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7IEF1dG9jb21wbGV0ZUFjdGlvbiwgSUtleUJpbmRpbmdzUHJvdmlkZXIsIEtleUJpbmRpbmcsIE1lc3NhZ2VDb21wb3NlckFjdGlvbiwgTmF2aWdhdGlvbkFjdGlvbiwgUm9vbUFjdGlvbixcbiAgICBSb29tTGlzdEFjdGlvbiB9IGZyb20gXCIuL0tleUJpbmRpbmdzTWFuYWdlclwiO1xuaW1wb3J0IHsgaXNNYWMsIEtleSB9IGZyb20gXCIuL0tleWJvYXJkXCI7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tIFwiLi9zZXR0aW5ncy9TZXR0aW5nc1N0b3JlXCI7XG5cbmNvbnN0IG1lc3NhZ2VDb21wb3NlckJpbmRpbmdzID0gKCk6IEtleUJpbmRpbmc8TWVzc2FnZUNvbXBvc2VyQWN0aW9uPltdID0+IHtcbiAgICBjb25zdCBiaW5kaW5nczogS2V5QmluZGluZzxNZXNzYWdlQ29tcG9zZXJBY3Rpb24+W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLlNlbGVjdFByZXZTZW5kSGlzdG9yeSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfVVAsXG4gICAgICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE1lc3NhZ2VDb21wb3NlckFjdGlvbi5TZWxlY3ROZXh0U2VuZEhpc3RvcnksXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX0RPV04sXG4gICAgICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE1lc3NhZ2VDb21wb3NlckFjdGlvbi5FZGl0UHJldk1lc3NhZ2UsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX1VQLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uRWRpdE5leHRNZXNzYWdlLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5BUlJPV19ET1dOLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uQ2FuY2VsRWRpdGluZyxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuRVNDQVBFLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uRm9ybWF0Qm9sZCxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQixcbiAgICAgICAgICAgICAgICBjdHJsT3JDbWQ6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE1lc3NhZ2VDb21wb3NlckFjdGlvbi5Gb3JtYXRJdGFsaWNzLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5JLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLkZvcm1hdFF1b3RlLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5HUkVBVEVSX1RIQU4sXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uRWRpdFVuZG8sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlosXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uTW92ZUN1cnNvclRvU3RhcnQsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkhPTUUsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uTW92ZUN1cnNvclRvRW5kLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5FTkQsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIGlmIChpc01hYykge1xuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLkVkaXRSZWRvLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5aLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJpbmRpbmdzLnB1c2goe1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uRWRpdFJlZG8sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlksXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChTZXR0aW5nc1N0b3JlLmdldFZhbHVlKCdNZXNzYWdlQ29tcG9zZXJJbnB1dC5jdHJsRW50ZXJUb1NlbmQnKSkge1xuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLlNlbmQsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVOVEVSLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLk5ld0xpbmUsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVOVEVSLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICBhY3Rpb246IE1lc3NhZ2VDb21wb3NlckFjdGlvbi5TZW5kLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5FTlRFUixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLk5ld0xpbmUsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVOVEVSLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc01hYykge1xuICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uTmV3TGluZSxcbiAgICAgICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IEtleS5FTlRFUixcbiAgICAgICAgICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmNvbnN0IGF1dG9jb21wbGV0ZUJpbmRpbmdzID0gKCk6IEtleUJpbmRpbmc8QXV0b2NvbXBsZXRlQWN0aW9uPltdID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IEF1dG9jb21wbGV0ZUFjdGlvbi5Db21wbGV0ZU9yTmV4dFNlbGVjdGlvbixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuVEFCLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBBdXRvY29tcGxldGVBY3Rpb24uQ29tcGxldGVPck5leHRTZWxlY3Rpb24sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlRBQixcbiAgICAgICAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBBdXRvY29tcGxldGVBY3Rpb24uQ29tcGxldGVPclByZXZTZWxlY3Rpb24sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlRBQixcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogQXV0b2NvbXBsZXRlQWN0aW9uLkNvbXBsZXRlT3JQcmV2U2VsZWN0aW9uLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5UQUIsXG4gICAgICAgICAgICAgICAgY3RybEtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogQXV0b2NvbXBsZXRlQWN0aW9uLkNhbmNlbCxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuRVNDQVBFLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBBdXRvY29tcGxldGVBY3Rpb24uUHJldlNlbGVjdGlvbixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfVVAsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IEF1dG9jb21wbGV0ZUFjdGlvbi5OZXh0U2VsZWN0aW9uLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5BUlJPV19ET1dOLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdO1xufVxuXG5jb25zdCByb29tTGlzdEJpbmRpbmdzID0gKCk6IEtleUJpbmRpbmc8Um9vbUxpc3RBY3Rpb24+W10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUxpc3RBY3Rpb24uQ2xlYXJTZWFyY2gsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVTQ0FQRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUxpc3RBY3Rpb24uUHJldlJvb20sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX1VQLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tTGlzdEFjdGlvbi5OZXh0Um9vbSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfRE9XTixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUxpc3RBY3Rpb24uU2VsZWN0Um9vbSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuRU5URVIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IFJvb21MaXN0QWN0aW9uLkNvbGxhcHNlU2VjdGlvbixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfTEVGVCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUxpc3RBY3Rpb24uRXhwYW5kU2VjdGlvbixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfUklHSFQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF07XG59XG5cbmNvbnN0IHJvb21CaW5kaW5ncyA9ICgpOiBLZXlCaW5kaW5nPFJvb21BY3Rpb24+W10gPT4ge1xuICAgIGNvbnN0IGJpbmRpbmdzOiBLZXlCaW5kaW5nPFJvb21BY3Rpb24+W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUFjdGlvbi5TY3JvbGxVcCxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuUEFHRV9VUCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUFjdGlvbi5Sb29tU2Nyb2xsRG93bixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuUEFHRV9ET1dOLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tQWN0aW9uLkRpc21pc3NSZWFkTWFya2VyLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5FU0NBUEUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IFJvb21BY3Rpb24uSnVtcFRvT2xkZXN0VW5yZWFkLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5QQUdFX1VQLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tQWN0aW9uLlVwbG9hZEZpbGUsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlUsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tQWN0aW9uLkp1bXBUb0ZpcnN0TWVzc2FnZSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuSE9NRSxcbiAgICAgICAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tQWN0aW9uLkp1bXBUb0xhdGVzdE1lc3NhZ2UsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVORCxcbiAgICAgICAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKFNldHRpbmdzU3RvcmUuZ2V0VmFsdWUoJ2N0cmxGRm9yU2VhcmNoJykpIHtcbiAgICAgICAgYmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICBhY3Rpb246IFJvb21BY3Rpb24uRm9jdXNTZWFyY2gsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkYsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5jb25zdCBuYXZpZ2F0aW9uQmluZGluZ3MgPSAoKTogS2V5QmluZGluZzxOYXZpZ2F0aW9uQWN0aW9uPltdID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE5hdmlnYXRpb25BY3Rpb24uRm9jdXNSb29tU2VhcmNoLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5LLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTmF2aWdhdGlvbkFjdGlvbi5Ub2dnbGVSb29tU2lkZVBhbmVsLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5QRVJJT0QsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBOYXZpZ2F0aW9uQWN0aW9uLlRvZ2dsZVVzZXJNZW51LFxuICAgICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHdvdWxkIGJlIENUUkwrUCBmb3IgXCJQcm9maWxlXCIsIGJ1dCB0aGF0J3NcbiAgICAgICAgICAgIC8vIHRha2VuIGJ5IHRoZSBwcmludCBkaWFsb2cuIENUUkwrSSBmb3IgXCJJbmZvcm1hdGlvblwiXG4gICAgICAgICAgICAvLyB3YXMgcHJldmlvdXNseSBjaG9zZW4gYnV0IGNvbmZsaWN0ZWQgd2l0aCBpdGFsaWNzIGluXG4gICAgICAgICAgICAvLyBjb21wb3Nlciwgc28gQ1RSTCtgIGl0IGlzXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkJBQ0tUSUNLLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTmF2aWdhdGlvbkFjdGlvbi5Ub2dnbGVTaG9ydEN1dERpYWxvZyxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuU0xBU0gsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBOYXZpZ2F0aW9uQWN0aW9uLlRvZ2dsZVNob3J0Q3V0RGlhbG9nLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5TTEFTSCxcbiAgICAgICAgICAgICAgICBjdHJsT3JDbWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE5hdmlnYXRpb25BY3Rpb24uR29Ub0hvbWUsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkgsXG4gICAgICAgICAgICAgICAgY3RybEtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhbHRLZXk6ICFpc01hYyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogaXNNYWMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE5hdmlnYXRpb25BY3Rpb24uU2VsZWN0UHJldlJvb20sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX1VQLFxuICAgICAgICAgICAgICAgIGFsdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTmF2aWdhdGlvbkFjdGlvbi5TZWxlY3ROZXh0Um9vbSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfRE9XTixcbiAgICAgICAgICAgICAgICBhbHRLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE5hdmlnYXRpb25BY3Rpb24uU2VsZWN0UHJldlVucmVhZFJvb20sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX1VQLFxuICAgICAgICAgICAgICAgIGFsdEtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTmF2aWdhdGlvbkFjdGlvbi5TZWxlY3ROZXh0VW5yZWFkUm9vbSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfRE9XTixcbiAgICAgICAgICAgICAgICBhbHRLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF07XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0QmluZGluZ3NQcm92aWRlcjogSUtleUJpbmRpbmdzUHJvdmlkZXIgPSB7XG4gICAgZ2V0TWVzc2FnZUNvbXBvc2VyQmluZGluZ3M6IG1lc3NhZ2VDb21wb3NlckJpbmRpbmdzLFxuICAgIGdldEF1dG9jb21wbGV0ZUJpbmRpbmdzOiBhdXRvY29tcGxldGVCaW5kaW5ncyxcbiAgICBnZXRSb29tTGlzdEJpbmRpbmdzOiByb29tTGlzdEJpbmRpbmdzLFxuICAgIGdldFJvb21CaW5kaW5nczogcm9vbUJpbmRpbmdzLFxuICAgIGdldE5hdmlnYXRpb25CaW5kaW5nczogbmF2aWdhdGlvbkJpbmRpbmdzLFxufVxuIl19