UNPKG

matrix-react-sdk

Version:
181 lines (177 loc) 35.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.RoomSettingsTab = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _TabbedView = _interopRequireWildcard(require("../../structures/TabbedView")); var _languageHandler = require("../../../languageHandler"); var _AdvancedRoomSettingsTab = _interopRequireDefault(require("../settings/tabs/room/AdvancedRoomSettingsTab")); var _RolesRoomSettingsTab = _interopRequireDefault(require("../settings/tabs/room/RolesRoomSettingsTab")); var _GeneralRoomSettingsTab = _interopRequireDefault(require("../settings/tabs/room/GeneralRoomSettingsTab")); var _SecurityRoomSettingsTab = _interopRequireDefault(require("../settings/tabs/room/SecurityRoomSettingsTab")); var _NotificationSettingsTab = _interopRequireDefault(require("../settings/tabs/room/NotificationSettingsTab")); var _BridgeSettingsTab = _interopRequireDefault(require("../settings/tabs/room/BridgeSettingsTab")); var _MatrixClientPeg = require("../../../MatrixClientPeg"); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore")); var _UIFeature = require("../../../settings/UIFeature"); var _BaseDialog = _interopRequireDefault(require("./BaseDialog")); var _actions = require("../../../dispatcher/actions"); var _VoipRoomSettingsTab = require("../settings/tabs/room/VoipRoomSettingsTab"); var _PollHistoryTab = require("../settings/tabs/room/PollHistoryTab"); var _ErrorBoundary = _interopRequireDefault(require("../elements/ErrorBoundary")); var _PeopleRoomSettingsTab = require("../settings/tabs/room/PeopleRoomSettingsTab"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /* Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ let RoomSettingsTab = exports.RoomSettingsTab = /*#__PURE__*/function (RoomSettingsTab) { RoomSettingsTab["General"] = "ROOM_GENERAL_TAB"; RoomSettingsTab["People"] = "ROOM_PEOPLE_TAB"; RoomSettingsTab["Voip"] = "ROOM_VOIP_TAB"; RoomSettingsTab["Security"] = "ROOM_SECURITY_TAB"; RoomSettingsTab["Roles"] = "ROOM_ROLES_TAB"; RoomSettingsTab["Notifications"] = "ROOM_NOTIFICATIONS_TAB"; RoomSettingsTab["Bridges"] = "ROOM_BRIDGES_TAB"; RoomSettingsTab["Advanced"] = "ROOM_ADVANCED_TAB"; RoomSettingsTab["PollHistory"] = "ROOM_POLL_HISTORY_TAB"; return RoomSettingsTab; }({}); class RoomSettingsDialog extends _react.default.Component { constructor(props) { super(props); (0, _defineProperty2.default)(this, "dispatcherRef", void 0); (0, _defineProperty2.default)(this, "onAction", payload => { // When view changes below us, close the room settings // whilst the modal is open this can only be triggered when someone hits Leave Room if (payload.action === _actions.Action.ViewHomePage) { this.props.onFinished(true); } }); (0, _defineProperty2.default)(this, "onRoomName", () => { // rerender when the room name changes this.forceUpdate(); }); (0, _defineProperty2.default)(this, "onStateEvent", event => { if (event.getType() === _matrix.EventType.RoomJoinRules) this.forceUpdate(); }); (0, _defineProperty2.default)(this, "onTabChange", tabId => { this.setState({ activeTabId: tabId }); }); const room = this.getRoom(); this.state = { room, activeTabId: props.initialTabId || RoomSettingsTab.General }; } componentDidMount() { this.dispatcherRef = _dispatcher.default.register(this.onAction); _MatrixClientPeg.MatrixClientPeg.safeGet().on(_matrix.RoomEvent.Name, this.onRoomName); _MatrixClientPeg.MatrixClientPeg.safeGet().on(_matrix.RoomStateEvent.Events, this.onStateEvent); this.onRoomName(); } componentDidUpdate() { if (this.props.roomId !== this.state.room.roomId) { const room = this.getRoom(); this.setState({ room }); } } componentWillUnmount() { if (this.dispatcherRef) { _dispatcher.default.unregister(this.dispatcherRef); } _MatrixClientPeg.MatrixClientPeg.get()?.removeListener(_matrix.RoomEvent.Name, this.onRoomName); _MatrixClientPeg.MatrixClientPeg.get()?.removeListener(_matrix.RoomStateEvent.Events, this.onStateEvent); } /** * Get room from client * @returns Room * @throws when room is not found */ getRoom() { const room = _MatrixClientPeg.MatrixClientPeg.safeGet().getRoom(this.props.roomId); // something is really wrong if we encounter this if (!room) { throw new Error(`Cannot find room ${this.props.roomId}`); } return room; } getTabs() { const tabs = []; tabs.push(new _TabbedView.Tab(RoomSettingsTab.General, (0, _languageHandler._td)("common|general"), "mx_RoomSettingsDialog_settingsIcon", /*#__PURE__*/_react.default.createElement(_GeneralRoomSettingsTab.default, { room: this.state.room }), "RoomSettingsGeneral")); if (_SettingsStore.default.getValue("feature_ask_to_join") && this.state.room.getJoinRule() === "knock") { tabs.push(new _TabbedView.Tab(RoomSettingsTab.People, (0, _languageHandler._td)("common|people"), "mx_RoomSettingsDialog_peopleIcon", /*#__PURE__*/_react.default.createElement(_PeopleRoomSettingsTab.PeopleRoomSettingsTab, { room: this.state.room }))); } if (_SettingsStore.default.getValue("feature_group_calls")) { tabs.push(new _TabbedView.Tab(RoomSettingsTab.Voip, (0, _languageHandler._td)("settings|voip|title"), "mx_RoomSettingsDialog_voiceIcon", /*#__PURE__*/_react.default.createElement(_VoipRoomSettingsTab.VoipRoomSettingsTab, { room: this.state.room }))); } tabs.push(new _TabbedView.Tab(RoomSettingsTab.Security, (0, _languageHandler._td)("room_settings|security|title"), "mx_RoomSettingsDialog_securityIcon", /*#__PURE__*/_react.default.createElement(_SecurityRoomSettingsTab.default, { room: this.state.room, closeSettingsFn: () => this.props.onFinished(true) }), "RoomSettingsSecurityPrivacy")); tabs.push(new _TabbedView.Tab(RoomSettingsTab.Roles, (0, _languageHandler._td)("room_settings|permissions|title"), "mx_RoomSettingsDialog_rolesIcon", /*#__PURE__*/_react.default.createElement(_RolesRoomSettingsTab.default, { room: this.state.room }), "RoomSettingsRolesPermissions")); tabs.push(new _TabbedView.Tab(RoomSettingsTab.Notifications, (0, _languageHandler._td)("notifications|enable_prompt_toast_title"), "mx_RoomSettingsDialog_notificationsIcon", /*#__PURE__*/_react.default.createElement(_NotificationSettingsTab.default, { roomId: this.state.room.roomId, closeSettingsFn: () => this.props.onFinished(true) }), "RoomSettingsNotifications")); if (_SettingsStore.default.getValue("feature_bridge_state")) { tabs.push(new _TabbedView.Tab(RoomSettingsTab.Bridges, (0, _languageHandler._td)("room_settings|bridges|title"), "mx_RoomSettingsDialog_bridgesIcon", /*#__PURE__*/_react.default.createElement(_BridgeSettingsTab.default, { room: this.state.room }), "RoomSettingsBridges")); } tabs.push(new _TabbedView.Tab(RoomSettingsTab.PollHistory, (0, _languageHandler._td)("right_panel|polls_button"), "mx_RoomSettingsDialog_pollsIcon", /*#__PURE__*/_react.default.createElement(_PollHistoryTab.PollHistoryTab, { room: this.state.room, onFinished: () => this.props.onFinished(true) }))); if (_SettingsStore.default.getValue(_UIFeature.UIFeature.AdvancedSettings)) { tabs.push(new _TabbedView.Tab(RoomSettingsTab.Advanced, (0, _languageHandler._td)("common|advanced"), "mx_RoomSettingsDialog_warningIcon", /*#__PURE__*/_react.default.createElement(_AdvancedRoomSettingsTab.default, { room: this.state.room, closeSettingsFn: () => this.props.onFinished(true) }), "RoomSettingsAdvanced")); } return tabs; } render() { const roomName = this.state.room.name; return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, { className: "mx_RoomSettingsDialog", hasCancel: true, onFinished: this.props.onFinished, title: (0, _languageHandler._t)("room_settings|title", { roomName }) }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsDialog_content" }, /*#__PURE__*/_react.default.createElement(_TabbedView.default, { tabs: this.getTabs(), activeTabId: this.state.activeTabId, screenName: "RoomSettings", onChange: this.onTabChange }))); } } const WrappedRoomSettingsDialog = props => /*#__PURE__*/_react.default.createElement(_ErrorBoundary.default, null, /*#__PURE__*/_react.default.createElement(RoomSettingsDialog, props)); var _default = exports.default = WrappedRoomSettingsDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9tYXRyaXgiLCJfVGFiYmVkVmlldyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9BZHZhbmNlZFJvb21TZXR0aW5nc1RhYiIsIl9Sb2xlc1Jvb21TZXR0aW5nc1RhYiIsIl9HZW5lcmFsUm9vbVNldHRpbmdzVGFiIiwiX1NlY3VyaXR5Um9vbVNldHRpbmdzVGFiIiwiX05vdGlmaWNhdGlvblNldHRpbmdzVGFiIiwiX0JyaWRnZVNldHRpbmdzVGFiIiwiX01hdHJpeENsaWVudFBlZyIsIl9kaXNwYXRjaGVyIiwiX1NldHRpbmdzU3RvcmUiLCJfVUlGZWF0dXJlIiwiX0Jhc2VEaWFsb2ciLCJfYWN0aW9ucyIsIl9Wb2lwUm9vbVNldHRpbmdzVGFiIiwiX1BvbGxIaXN0b3J5VGFiIiwiX0Vycm9yQm91bmRhcnkiLCJfUGVvcGxlUm9vbVNldHRpbmdzVGFiIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiUm9vbVNldHRpbmdzVGFiIiwiZXhwb3J0cyIsIlJvb21TZXR0aW5nc0RpYWxvZyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJwYXlsb2FkIiwiYWN0aW9uIiwiQWN0aW9uIiwiVmlld0hvbWVQYWdlIiwib25GaW5pc2hlZCIsImZvcmNlVXBkYXRlIiwiZXZlbnQiLCJnZXRUeXBlIiwiRXZlbnRUeXBlIiwiUm9vbUpvaW5SdWxlcyIsInRhYklkIiwic2V0U3RhdGUiLCJhY3RpdmVUYWJJZCIsInJvb20iLCJnZXRSb29tIiwic3RhdGUiLCJpbml0aWFsVGFiSWQiLCJHZW5lcmFsIiwiY29tcG9uZW50RGlkTW91bnQiLCJkaXNwYXRjaGVyUmVmIiwiZGlzIiwicmVnaXN0ZXIiLCJvbkFjdGlvbiIsIk1hdHJpeENsaWVudFBlZyIsInNhZmVHZXQiLCJvbiIsIlJvb21FdmVudCIsIk5hbWUiLCJvblJvb21OYW1lIiwiUm9vbVN0YXRlRXZlbnQiLCJFdmVudHMiLCJvblN0YXRlRXZlbnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJyb29tSWQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVucmVnaXN0ZXIiLCJyZW1vdmVMaXN0ZW5lciIsIkVycm9yIiwiZ2V0VGFicyIsInRhYnMiLCJwdXNoIiwiVGFiIiwiX3RkIiwiY3JlYXRlRWxlbWVudCIsIlNldHRpbmdzU3RvcmUiLCJnZXRWYWx1ZSIsImdldEpvaW5SdWxlIiwiUGVvcGxlIiwiUGVvcGxlUm9vbVNldHRpbmdzVGFiIiwiVm9pcCIsIlZvaXBSb29tU2V0dGluZ3NUYWIiLCJTZWN1cml0eSIsImNsb3NlU2V0dGluZ3NGbiIsIlJvbGVzIiwiTm90aWZpY2F0aW9ucyIsIkJyaWRnZXMiLCJQb2xsSGlzdG9yeSIsIlBvbGxIaXN0b3J5VGFiIiwiVUlGZWF0dXJlIiwiQWR2YW5jZWRTZXR0aW5ncyIsIkFkdmFuY2VkIiwicmVuZGVyIiwicm9vbU5hbWUiLCJuYW1lIiwiY2xhc3NOYW1lIiwiaGFzQ2FuY2VsIiwidGl0bGUiLCJfdCIsInNjcmVlbk5hbWUiLCJvbkNoYW5nZSIsIm9uVGFiQ2hhbmdlIiwiV3JhcHBlZFJvb21TZXR0aW5nc0RpYWxvZyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZGlhbG9ncy9Sb29tU2V0dGluZ3NEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5Db3B5cmlnaHQgMjAxOSBOZXcgVmVjdG9yIEx0ZFxuQ29weXJpZ2h0IDIwMTkgTWljaGFlbCBUZWxhdHluc2tpIDw3dDNjaGd1eUBnbWFpbC5jb20+XG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJvb21FdmVudCwgUm9vbSwgUm9vbVN0YXRlRXZlbnQsIE1hdHJpeEV2ZW50LCBFdmVudFR5cGUgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCBUYWJiZWRWaWV3LCB7IFRhYiB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmVzL1RhYmJlZFZpZXdcIjtcbmltcG9ydCB7IF90LCBfdGQgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgQWR2YW5jZWRSb29tU2V0dGluZ3NUYWIgZnJvbSBcIi4uL3NldHRpbmdzL3RhYnMvcm9vbS9BZHZhbmNlZFJvb21TZXR0aW5nc1RhYlwiO1xuaW1wb3J0IFJvbGVzUm9vbVNldHRpbmdzVGFiIGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3Jvb20vUm9sZXNSb29tU2V0dGluZ3NUYWJcIjtcbmltcG9ydCBHZW5lcmFsUm9vbVNldHRpbmdzVGFiIGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3Jvb20vR2VuZXJhbFJvb21TZXR0aW5nc1RhYlwiO1xuaW1wb3J0IFNlY3VyaXR5Um9vbVNldHRpbmdzVGFiIGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3Jvb20vU2VjdXJpdHlSb29tU2V0dGluZ3NUYWJcIjtcbmltcG9ydCBOb3RpZmljYXRpb25TZXR0aW5nc1RhYiBmcm9tIFwiLi4vc2V0dGluZ3MvdGFicy9yb29tL05vdGlmaWNhdGlvblNldHRpbmdzVGFiXCI7XG5pbXBvcnQgQnJpZGdlU2V0dGluZ3NUYWIgZnJvbSBcIi4uL3NldHRpbmdzL3RhYnMvcm9vbS9CcmlkZ2VTZXR0aW5nc1RhYlwiO1xuaW1wb3J0IHsgTWF0cml4Q2xpZW50UGVnIH0gZnJvbSBcIi4uLy4uLy4uL01hdHJpeENsaWVudFBlZ1wiO1xuaW1wb3J0IGRpcyBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3NTdG9yZVwiO1xuaW1wb3J0IHsgVUlGZWF0dXJlIH0gZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1VJRmVhdHVyZVwiO1xuaW1wb3J0IEJhc2VEaWFsb2cgZnJvbSBcIi4vQmFzZURpYWxvZ1wiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IHsgVm9pcFJvb21TZXR0aW5nc1RhYiB9IGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3Jvb20vVm9pcFJvb21TZXR0aW5nc1RhYlwiO1xuaW1wb3J0IHsgQWN0aW9uUGF5bG9hZCB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL3BheWxvYWRzXCI7XG5pbXBvcnQgeyBOb25FbXB0eUFycmF5IH0gZnJvbSBcIi4uLy4uLy4uL0B0eXBlcy9jb21tb25cIjtcbmltcG9ydCB7IFBvbGxIaXN0b3J5VGFiIH0gZnJvbSBcIi4uL3NldHRpbmdzL3RhYnMvcm9vbS9Qb2xsSGlzdG9yeVRhYlwiO1xuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4uL2VsZW1lbnRzL0Vycm9yQm91bmRhcnlcIjtcbmltcG9ydCB7IFBlb3BsZVJvb21TZXR0aW5nc1RhYiB9IGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3Jvb20vUGVvcGxlUm9vbVNldHRpbmdzVGFiXCI7XG5cbmV4cG9ydCBjb25zdCBlbnVtIFJvb21TZXR0aW5nc1RhYiB7XG4gICAgR2VuZXJhbCA9IFwiUk9PTV9HRU5FUkFMX1RBQlwiLFxuICAgIFBlb3BsZSA9IFwiUk9PTV9QRU9QTEVfVEFCXCIsXG4gICAgVm9pcCA9IFwiUk9PTV9WT0lQX1RBQlwiLFxuICAgIFNlY3VyaXR5ID0gXCJST09NX1NFQ1VSSVRZX1RBQlwiLFxuICAgIFJvbGVzID0gXCJST09NX1JPTEVTX1RBQlwiLFxuICAgIE5vdGlmaWNhdGlvbnMgPSBcIlJPT01fTk9USUZJQ0FUSU9OU19UQUJcIixcbiAgICBCcmlkZ2VzID0gXCJST09NX0JSSURHRVNfVEFCXCIsXG4gICAgQWR2YW5jZWQgPSBcIlJPT01fQURWQU5DRURfVEFCXCIsXG4gICAgUG9sbEhpc3RvcnkgPSBcIlJPT01fUE9MTF9ISVNUT1JZX1RBQlwiLFxufVxuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICByb29tSWQ6IHN0cmluZztcbiAgICBvbkZpbmlzaGVkOiAoc3VjY2Vzcz86IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgaW5pdGlhbFRhYklkPzogUm9vbVNldHRpbmdzVGFiO1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICByb29tOiBSb29tO1xuICAgIGFjdGl2ZVRhYklkOiBSb29tU2V0dGluZ3NUYWI7XG59XG5cbmNsYXNzIFJvb21TZXR0aW5nc0RpYWxvZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIHByaXZhdGUgZGlzcGF0Y2hlclJlZj86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5nZXRSb29tKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHJvb20sIGFjdGl2ZVRhYklkOiBwcm9wcy5pbml0aWFsVGFiSWQgfHwgUm9vbVNldHRpbmdzVGFiLkdlbmVyYWwgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlclJlZiA9IGRpcy5yZWdpc3Rlcih0aGlzLm9uQWN0aW9uKTtcbiAgICAgICAgTWF0cml4Q2xpZW50UGVnLnNhZmVHZXQoKS5vbihSb29tRXZlbnQuTmFtZSwgdGhpcy5vblJvb21OYW1lKTtcbiAgICAgICAgTWF0cml4Q2xpZW50UGVnLnNhZmVHZXQoKS5vbihSb29tU3RhdGVFdmVudC5FdmVudHMsIHRoaXMub25TdGF0ZUV2ZW50KTtcbiAgICAgICAgdGhpcy5vblJvb21OYW1lKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBvbmVudERpZFVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucm9vbUlkICE9PSB0aGlzLnN0YXRlLnJvb20ucm9vbUlkKSB7XG4gICAgICAgICAgICBjb25zdCByb29tID0gdGhpcy5nZXRSb29tKCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgcm9vbSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGF0Y2hlclJlZikge1xuICAgICAgICAgICAgZGlzLnVucmVnaXN0ZXIodGhpcy5kaXNwYXRjaGVyUmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1hdHJpeENsaWVudFBlZy5nZXQoKT8ucmVtb3ZlTGlzdGVuZXIoUm9vbUV2ZW50Lk5hbWUsIHRoaXMub25Sb29tTmFtZSk7XG4gICAgICAgIE1hdHJpeENsaWVudFBlZy5nZXQoKT8ucmVtb3ZlTGlzdGVuZXIoUm9vbVN0YXRlRXZlbnQuRXZlbnRzLCB0aGlzLm9uU3RhdGVFdmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHJvb20gZnJvbSBjbGllbnRcbiAgICAgKiBAcmV0dXJucyBSb29tXG4gICAgICogQHRocm93cyB3aGVuIHJvb20gaXMgbm90IGZvdW5kXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSb29tKCk6IFJvb20ge1xuICAgICAgICBjb25zdCByb29tID0gTWF0cml4Q2xpZW50UGVnLnNhZmVHZXQoKS5nZXRSb29tKHRoaXMucHJvcHMucm9vbUlkKSE7XG5cbiAgICAgICAgLy8gc29tZXRoaW5nIGlzIHJlYWxseSB3cm9uZyBpZiB3ZSBlbmNvdW50ZXIgdGhpc1xuICAgICAgICBpZiAoIXJvb20pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcm9vbSAke3RoaXMucHJvcHMucm9vbUlkfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb29tO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25BY3Rpb24gPSAocGF5bG9hZDogQWN0aW9uUGF5bG9hZCk6IHZvaWQgPT4ge1xuICAgICAgICAvLyBXaGVuIHZpZXcgY2hhbmdlcyBiZWxvdyB1cywgY2xvc2UgdGhlIHJvb20gc2V0dGluZ3NcbiAgICAgICAgLy8gd2hpbHN0IHRoZSBtb2RhbCBpcyBvcGVuIHRoaXMgY2FuIG9ubHkgYmUgdHJpZ2dlcmVkIHdoZW4gc29tZW9uZSBoaXRzIExlYXZlIFJvb21cbiAgICAgICAgaWYgKHBheWxvYWQuYWN0aW9uID09PSBBY3Rpb24uVmlld0hvbWVQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uRmluaXNoZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvblJvb21OYW1lID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAvLyByZXJlbmRlciB3aGVuIHRoZSByb29tIG5hbWUgY2hhbmdlc1xuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25TdGF0ZUV2ZW50ID0gKGV2ZW50OiBNYXRyaXhFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuZ2V0VHlwZSgpID09PSBFdmVudFR5cGUuUm9vbUpvaW5SdWxlcykgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uVGFiQ2hhbmdlID0gKHRhYklkOiBSb29tU2V0dGluZ3NUYWIpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZVRhYklkOiB0YWJJZCB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXRUYWJzKCk6IE5vbkVtcHR5QXJyYXk8VGFiPFJvb21TZXR0aW5nc1RhYj4+IHtcbiAgICAgICAgY29uc3QgdGFiczogVGFiPFJvb21TZXR0aW5nc1RhYj5bXSA9IFtdO1xuXG4gICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgIG5ldyBUYWIoXG4gICAgICAgICAgICAgICAgUm9vbVNldHRpbmdzVGFiLkdlbmVyYWwsXG4gICAgICAgICAgICAgICAgX3RkKFwiY29tbW9ufGdlbmVyYWxcIiksXG4gICAgICAgICAgICAgICAgXCJteF9Sb29tU2V0dGluZ3NEaWFsb2dfc2V0dGluZ3NJY29uXCIsXG4gICAgICAgICAgICAgICAgPEdlbmVyYWxSb29tU2V0dGluZ3NUYWIgcm9vbT17dGhpcy5zdGF0ZS5yb29tfSAvPixcbiAgICAgICAgICAgICAgICBcIlJvb21TZXR0aW5nc0dlbmVyYWxcIixcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChTZXR0aW5nc1N0b3JlLmdldFZhbHVlKFwiZmVhdHVyZV9hc2tfdG9fam9pblwiKSAmJiB0aGlzLnN0YXRlLnJvb20uZ2V0Sm9pblJ1bGUoKSA9PT0gXCJrbm9ja1wiKSB7XG4gICAgICAgICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFRhYihcbiAgICAgICAgICAgICAgICAgICAgUm9vbVNldHRpbmdzVGFiLlBlb3BsZSxcbiAgICAgICAgICAgICAgICAgICAgX3RkKFwiY29tbW9ufHBlb3BsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgXCJteF9Sb29tU2V0dGluZ3NEaWFsb2dfcGVvcGxlSWNvblwiLFxuICAgICAgICAgICAgICAgICAgICA8UGVvcGxlUm9vbVNldHRpbmdzVGFiIHJvb209e3RoaXMuc3RhdGUucm9vbX0gLz4sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFNldHRpbmdzU3RvcmUuZ2V0VmFsdWUoXCJmZWF0dXJlX2dyb3VwX2NhbGxzXCIpKSB7XG4gICAgICAgICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFRhYihcbiAgICAgICAgICAgICAgICAgICAgUm9vbVNldHRpbmdzVGFiLlZvaXAsXG4gICAgICAgICAgICAgICAgICAgIF90ZChcInNldHRpbmdzfHZvaXB8dGl0bGVcIiksXG4gICAgICAgICAgICAgICAgICAgIFwibXhfUm9vbVNldHRpbmdzRGlhbG9nX3ZvaWNlSWNvblwiLFxuICAgICAgICAgICAgICAgICAgICA8Vm9pcFJvb21TZXR0aW5nc1RhYiByb29tPXt0aGlzLnN0YXRlLnJvb219IC8+LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgIG5ldyBUYWIoXG4gICAgICAgICAgICAgICAgUm9vbVNldHRpbmdzVGFiLlNlY3VyaXR5LFxuICAgICAgICAgICAgICAgIF90ZChcInJvb21fc2V0dGluZ3N8c2VjdXJpdHl8dGl0bGVcIiksXG4gICAgICAgICAgICAgICAgXCJteF9Sb29tU2V0dGluZ3NEaWFsb2dfc2VjdXJpdHlJY29uXCIsXG4gICAgICAgICAgICAgICAgPFNlY3VyaXR5Um9vbVNldHRpbmdzVGFiIHJvb209e3RoaXMuc3RhdGUucm9vbX0gY2xvc2VTZXR0aW5nc0ZuPXsoKSA9PiB0aGlzLnByb3BzLm9uRmluaXNoZWQodHJ1ZSl9IC8+LFxuICAgICAgICAgICAgICAgIFwiUm9vbVNldHRpbmdzU2VjdXJpdHlQcml2YWN5XCIsXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICBuZXcgVGFiKFxuICAgICAgICAgICAgICAgIFJvb21TZXR0aW5nc1RhYi5Sb2xlcyxcbiAgICAgICAgICAgICAgICBfdGQoXCJyb29tX3NldHRpbmdzfHBlcm1pc3Npb25zfHRpdGxlXCIpLFxuICAgICAgICAgICAgICAgIFwibXhfUm9vbVNldHRpbmdzRGlhbG9nX3JvbGVzSWNvblwiLFxuICAgICAgICAgICAgICAgIDxSb2xlc1Jvb21TZXR0aW5nc1RhYiByb29tPXt0aGlzLnN0YXRlLnJvb219IC8+LFxuICAgICAgICAgICAgICAgIFwiUm9vbVNldHRpbmdzUm9sZXNQZXJtaXNzaW9uc1wiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgICAgbmV3IFRhYihcbiAgICAgICAgICAgICAgICBSb29tU2V0dGluZ3NUYWIuTm90aWZpY2F0aW9ucyxcbiAgICAgICAgICAgICAgICBfdGQoXCJub3RpZmljYXRpb25zfGVuYWJsZV9wcm9tcHRfdG9hc3RfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgXCJteF9Sb29tU2V0dGluZ3NEaWFsb2dfbm90aWZpY2F0aW9uc0ljb25cIixcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25TZXR0aW5nc1RhYlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vbUlkPXt0aGlzLnN0YXRlLnJvb20ucm9vbUlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VTZXR0aW5nc0ZuPXsoKSA9PiB0aGlzLnByb3BzLm9uRmluaXNoZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBcIlJvb21TZXR0aW5nc05vdGlmaWNhdGlvbnNcIixcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKFNldHRpbmdzU3RvcmUuZ2V0VmFsdWUoXCJmZWF0dXJlX2JyaWRnZV9zdGF0ZVwiKSkge1xuICAgICAgICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBUYWIoXG4gICAgICAgICAgICAgICAgICAgIFJvb21TZXR0aW5nc1RhYi5CcmlkZ2VzLFxuICAgICAgICAgICAgICAgICAgICBfdGQoXCJyb29tX3NldHRpbmdzfGJyaWRnZXN8dGl0bGVcIiksXG4gICAgICAgICAgICAgICAgICAgIFwibXhfUm9vbVNldHRpbmdzRGlhbG9nX2JyaWRnZXNJY29uXCIsXG4gICAgICAgICAgICAgICAgICAgIDxCcmlkZ2VTZXR0aW5nc1RhYiByb29tPXt0aGlzLnN0YXRlLnJvb219IC8+LFxuICAgICAgICAgICAgICAgICAgICBcIlJvb21TZXR0aW5nc0JyaWRnZXNcIixcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgIG5ldyBUYWIoXG4gICAgICAgICAgICAgICAgUm9vbVNldHRpbmdzVGFiLlBvbGxIaXN0b3J5LFxuICAgICAgICAgICAgICAgIF90ZChcInJpZ2h0X3BhbmVsfHBvbGxzX2J1dHRvblwiKSxcbiAgICAgICAgICAgICAgICBcIm14X1Jvb21TZXR0aW5nc0RpYWxvZ19wb2xsc0ljb25cIixcbiAgICAgICAgICAgICAgICA8UG9sbEhpc3RvcnlUYWIgcm9vbT17dGhpcy5zdGF0ZS5yb29tfSBvbkZpbmlzaGVkPXsoKSA9PiB0aGlzLnByb3BzLm9uRmluaXNoZWQodHJ1ZSl9IC8+LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZShVSUZlYXR1cmUuQWR2YW5jZWRTZXR0aW5ncykpIHtcbiAgICAgICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgVGFiKFxuICAgICAgICAgICAgICAgICAgICBSb29tU2V0dGluZ3NUYWIuQWR2YW5jZWQsXG4gICAgICAgICAgICAgICAgICAgIF90ZChcImNvbW1vbnxhZHZhbmNlZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgXCJteF9Sb29tU2V0dGluZ3NEaWFsb2dfd2FybmluZ0ljb25cIixcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEFkdmFuY2VkUm9vbVNldHRpbmdzVGFiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vbT17dGhpcy5zdGF0ZS5yb29tfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlU2V0dGluZ3NGbj17KCkgPT4gdGhpcy5wcm9wcy5vbkZpbmlzaGVkKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgXCJSb29tU2V0dGluZ3NBZHZhbmNlZFwiLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhYnMgYXMgTm9uRW1wdHlBcnJheTxUYWI8Um9vbVNldHRpbmdzVGFiPj47XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgICAgICBjb25zdCByb29tTmFtZSA9IHRoaXMuc3RhdGUucm9vbS5uYW1lO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJhc2VEaWFsb2dcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9Sb29tU2V0dGluZ3NEaWFsb2dcIlxuICAgICAgICAgICAgICAgIGhhc0NhbmNlbD17dHJ1ZX1cbiAgICAgICAgICAgICAgICBvbkZpbmlzaGVkPXt0aGlzLnByb3BzLm9uRmluaXNoZWR9XG4gICAgICAgICAgICAgICAgdGl0bGU9e190KFwicm9vbV9zZXR0aW5nc3x0aXRsZVwiLCB7IHJvb21OYW1lIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfU2V0dGluZ3NEaWFsb2dfY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8VGFiYmVkVmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFicz17dGhpcy5nZXRUYWJzKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUYWJJZD17dGhpcy5zdGF0ZS5hY3RpdmVUYWJJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbk5hbWU9XCJSb29tU2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25UYWJDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0Jhc2VEaWFsb2c+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBXcmFwcGVkUm9vbVNldHRpbmdzRGlhbG9nOiBSZWFjdC5GQzxJUHJvcHM+ID0gKHByb3BzKSA9PiAoXG4gICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgIDxSb29tU2V0dGluZ3NEaWFsb2cgey4uLnByb3BzfSAvPlxuICAgIDwvRXJyb3JCb3VuZGFyeT5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFdyYXBwZWRSb29tU2V0dGluZ3NEaWFsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBVUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsV0FBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksZ0JBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLHdCQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxxQkFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sdUJBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLHdCQUFBLEdBQUFU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