UNPKG

matrix-react-sdk

Version:
223 lines (220 loc) 41.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _matrix = require("matrix-js-sdk/src/matrix"); var _languageHandler = require("../../../languageHandler"); var _MatrixClientPeg = require("../../../MatrixClientPeg"); var _Field = _interopRequireDefault(require("../elements/Field")); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var _AvatarSetting = _interopRequireDefault(require("../settings/AvatarSetting")); var _serialize = require("../../../editor/serialize"); var _RoomAvatar = require("../avatars/RoomAvatar"); 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; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Copyright 2019-2024 New Vector Ltd. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ // TODO: Merge with ProfileSettings? class RoomProfileSettings extends _react.default.Component { constructor(props) { super(props); (0, _defineProperty2.default)(this, "avatarUpload", /*#__PURE__*/(0, _react.createRef)()); (0, _defineProperty2.default)(this, "onAvatarChanged", file => { this.setState({ avatarFile: file, avatarRemovalPending: false, profileFieldsTouched: _objectSpread(_objectSpread({}, this.state.profileFieldsTouched), {}, { avatar: true }) }); }); (0, _defineProperty2.default)(this, "removeAvatar", () => { // clear file upload field so same file can be selected if (this.avatarUpload.current) this.avatarUpload.current.value = ""; this.setState({ avatarFile: null, avatarRemovalPending: true, profileFieldsTouched: _objectSpread(_objectSpread({}, this.state.profileFieldsTouched), {}, { avatar: true }) }); }); (0, _defineProperty2.default)(this, "isSaveEnabled", () => { return Boolean(Object.values(this.state.profileFieldsTouched).length); }); (0, _defineProperty2.default)(this, "cancelProfileChanges", async e => { e.stopPropagation(); e.preventDefault(); if (!this.isSaveEnabled()) return; this.setState({ profileFieldsTouched: {}, displayName: this.state.originalDisplayName, topic: this.state.originalTopic, avatarFile: null, avatarRemovalPending: false }); }); (0, _defineProperty2.default)(this, "saveProfile", async e => { e.stopPropagation(); e.preventDefault(); if (!this.isSaveEnabled()) return; this.setState({ profileFieldsTouched: {} }); const client = _MatrixClientPeg.MatrixClientPeg.safeGet(); const newState = {}; // TODO: What do we do about errors? const displayName = this.state.displayName.trim(); if (this.state.originalDisplayName !== this.state.displayName) { await client.setRoomName(this.props.roomId, displayName); newState.originalDisplayName = displayName; newState.displayName = displayName; } if (this.state.avatarFile) { const { content_uri: uri } = await client.uploadContent(this.state.avatarFile); await client.sendStateEvent(this.props.roomId, _matrix.EventType.RoomAvatar, { url: uri }, ""); newState.originalAvatarUrl = uri; newState.avatarFile = null; } else if (this.state.avatarRemovalPending) { await client.sendStateEvent(this.props.roomId, _matrix.EventType.RoomAvatar, {}, ""); newState.avatarRemovalPending = false; newState.originalAvatarUrl = null; } if (this.state.originalTopic !== this.state.topic) { const html = (0, _serialize.htmlSerializeFromMdIfNeeded)(this.state.topic, { forceHTML: false }); await client.setRoomTopic(this.props.roomId, this.state.topic, html); newState.originalTopic = this.state.topic; } this.setState(newState); }); (0, _defineProperty2.default)(this, "onDisplayNameChanged", e => { this.setState({ displayName: e.target.value }); if (this.state.originalDisplayName === e.target.value) { this.setState({ profileFieldsTouched: _objectSpread(_objectSpread({}, this.state.profileFieldsTouched), {}, { name: false }) }); } else { this.setState({ profileFieldsTouched: _objectSpread(_objectSpread({}, this.state.profileFieldsTouched), {}, { name: true }) }); } }); (0, _defineProperty2.default)(this, "onTopicChanged", e => { this.setState({ topic: e.target.value }); if (this.state.originalTopic === e.target.value) { this.setState({ profileFieldsTouched: _objectSpread(_objectSpread({}, this.state.profileFieldsTouched), {}, { topic: false }) }); } else { this.setState({ profileFieldsTouched: _objectSpread(_objectSpread({}, this.state.profileFieldsTouched), {}, { topic: true }) }); } }); const _client = _MatrixClientPeg.MatrixClientPeg.safeGet(); const room = _client.getRoom(props.roomId); if (!room) throw new Error(`Expected a room for ID: ${props.roomId}`); const avatarEvent = room.currentState.getStateEvents(_matrix.EventType.RoomAvatar, ""); const avatarUrl = avatarEvent?.getContent()["url"] ?? null; const topicEvent = room.currentState.getStateEvents(_matrix.EventType.RoomTopic, ""); const topic = topicEvent && topicEvent.getContent() ? topicEvent.getContent()["topic"] : ""; const nameEvent = room.currentState.getStateEvents(_matrix.EventType.RoomName, ""); const name = nameEvent && nameEvent.getContent() ? nameEvent.getContent()["name"] : ""; const userId = _client.getSafeUserId(); this.state = { originalDisplayName: name, displayName: name, originalAvatarUrl: avatarUrl, avatarFile: null, avatarRemovalPending: false, originalTopic: topic, topic: topic, profileFieldsTouched: {}, canSetName: room.currentState.maySendStateEvent(_matrix.EventType.RoomName, userId), canSetTopic: room.currentState.maySendStateEvent(_matrix.EventType.RoomTopic, userId), canSetAvatar: room.currentState.maySendStateEvent(_matrix.EventType.RoomAvatar, userId) }; } render() { let profileSettingsButtons; if (this.state.canSetName || this.state.canSetTopic || this.state.canSetAvatar) { profileSettingsButtons = /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomProfileSettings_buttons" }, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { onClick: this.cancelProfileChanges, kind: "primary_outline", disabled: !this.isSaveEnabled() }, (0, _languageHandler._t)("action|cancel")), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { onClick: this.saveProfile, kind: "primary", disabled: !this.isSaveEnabled() }, (0, _languageHandler._t)("action|save"))); } const canRemove = this.state.profileFieldsTouched.avatar ? Boolean(this.state.avatarFile) : Boolean(this.state.originalAvatarUrl); return /*#__PURE__*/_react.default.createElement("form", { onSubmit: this.saveProfile, autoComplete: "off", noValidate: true, className: "mx_RoomProfileSettings" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomProfileSettings_profile" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomProfileSettings_profile_controls" }, /*#__PURE__*/_react.default.createElement(_Field.default, { label: (0, _languageHandler._t)("room_settings|general|name_field_label"), type: "text", value: this.state.displayName, autoComplete: "off", onChange: this.onDisplayNameChanged, disabled: !this.state.canSetName }), /*#__PURE__*/_react.default.createElement(_Field.default, { className: (0, _classnames.default)("mx_RoomProfileSettings_profile_controls_topic", "mx_RoomProfileSettings_profile_controls_topic--room"), id: "profileTopic" // See: NewRoomIntro.tsx , label: (0, _languageHandler._t)("room_settings|general|topic_field_label"), disabled: !this.state.canSetTopic, type: "text", value: this.state.topic, autoComplete: "off", onChange: this.onTopicChanged, element: "textarea" })), /*#__PURE__*/_react.default.createElement(_AvatarSetting.default, { avatar: this.state.avatarRemovalPending ? undefined : this.state.avatarFile ?? this.state.originalAvatarUrl ?? undefined, avatarAltText: (0, _languageHandler._t)("room_settings|general|avatar_field_label"), disabled: !this.state.canSetAvatar, onChange: this.onAvatarChanged, removeAvatar: canRemove ? this.removeAvatar : undefined, placeholderId: (0, _RoomAvatar.idNameForRoom)(_MatrixClientPeg.MatrixClientPeg.safeGet().getRoom(this.props.roomId)), placeholderName: _MatrixClientPeg.MatrixClientPeg.safeGet().getRoom(this.props.roomId).name })), profileSettingsButtons); } } exports.default = RoomProfileSettings; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbWF0cml4IiwiX2xhbmd1YWdlSGFuZGxlciIsIl9NYXRyaXhDbGllbnRQZWciLCJfRmllbGQiLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIl9BdmF0YXJTZXR0aW5nIiwiX3NlcmlhbGl6ZSIsIl9Sb29tQXZhdGFyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiUm9vbVByb2ZpbGVTZXR0aW5ncyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImNyZWF0ZVJlZiIsImZpbGUiLCJzZXRTdGF0ZSIsImF2YXRhckZpbGUiLCJhdmF0YXJSZW1vdmFsUGVuZGluZyIsInByb2ZpbGVGaWVsZHNUb3VjaGVkIiwic3RhdGUiLCJhdmF0YXIiLCJhdmF0YXJVcGxvYWQiLCJjdXJyZW50IiwidmFsdWUiLCJCb29sZWFuIiwidmFsdWVzIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpc1NhdmVFbmFibGVkIiwiZGlzcGxheU5hbWUiLCJvcmlnaW5hbERpc3BsYXlOYW1lIiwidG9waWMiLCJvcmlnaW5hbFRvcGljIiwiY2xpZW50IiwiTWF0cml4Q2xpZW50UGVnIiwic2FmZUdldCIsIm5ld1N0YXRlIiwidHJpbSIsInNldFJvb21OYW1lIiwicm9vbUlkIiwiY29udGVudF91cmkiLCJ1cmkiLCJ1cGxvYWRDb250ZW50Iiwic2VuZFN0YXRlRXZlbnQiLCJFdmVudFR5cGUiLCJSb29tQXZhdGFyIiwidXJsIiwib3JpZ2luYWxBdmF0YXJVcmwiLCJodG1sIiwiaHRtbFNlcmlhbGl6ZUZyb21NZElmTmVlZGVkIiwiZm9yY2VIVE1MIiwic2V0Um9vbVRvcGljIiwidGFyZ2V0IiwibmFtZSIsInJvb20iLCJnZXRSb29tIiwiRXJyb3IiLCJhdmF0YXJFdmVudCIsImN1cnJlbnRTdGF0ZSIsImdldFN0YXRlRXZlbnRzIiwiYXZhdGFyVXJsIiwiZ2V0Q29udGVudCIsInRvcGljRXZlbnQiLCJSb29tVG9waWMiLCJuYW1lRXZlbnQiLCJSb29tTmFtZSIsInVzZXJJZCIsImdldFNhZmVVc2VySWQiLCJjYW5TZXROYW1lIiwibWF5U2VuZFN0YXRlRXZlbnQiLCJjYW5TZXRUb3BpYyIsImNhblNldEF2YXRhciIsInJlbmRlciIsInByb2ZpbGVTZXR0aW5nc0J1dHRvbnMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwib25DbGljayIsImNhbmNlbFByb2ZpbGVDaGFuZ2VzIiwia2luZCIsImRpc2FibGVkIiwiX3QiLCJzYXZlUHJvZmlsZSIsImNhblJlbW92ZSIsIm9uU3VibWl0IiwiYXV0b0NvbXBsZXRlIiwibm9WYWxpZGF0ZSIsImxhYmVsIiwidHlwZSIsIm9uQ2hhbmdlIiwib25EaXNwbGF5TmFtZUNoYW5nZWQiLCJjbGFzc05hbWVzIiwiaWQiLCJvblRvcGljQ2hhbmdlZCIsImVsZW1lbnQiLCJ1bmRlZmluZWQiLCJhdmF0YXJBbHRUZXh0Iiwib25BdmF0YXJDaGFuZ2VkIiwicmVtb3ZlQXZhdGFyIiwicGxhY2Vob2xkZXJJZCIsImlkTmFtZUZvclJvb20iLCJwbGFjZWhvbGRlck5hbWUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3Mvcm9vbV9zZXR0aW5ncy9Sb29tUHJvZmlsZVNldHRpbmdzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTktMjAyNCBOZXcgVmVjdG9yIEx0ZC5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCB7IEV2ZW50VHlwZSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcblxuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBNYXRyaXhDbGllbnRQZWcgfSBmcm9tIFwiLi4vLi4vLi4vTWF0cml4Q2xpZW50UGVnXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcIi4uL2VsZW1lbnRzL0ZpZWxkXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiwgeyBCdXR0b25FdmVudCB9IGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgQXZhdGFyU2V0dGluZyBmcm9tIFwiLi4vc2V0dGluZ3MvQXZhdGFyU2V0dGluZ1wiO1xuaW1wb3J0IHsgaHRtbFNlcmlhbGl6ZUZyb21NZElmTmVlZGVkIH0gZnJvbSBcIi4uLy4uLy4uL2VkaXRvci9zZXJpYWxpemVcIjtcbmltcG9ydCB7IGlkTmFtZUZvclJvb20gfSBmcm9tIFwiLi4vYXZhdGFycy9Sb29tQXZhdGFyXCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIHJvb21JZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICBvcmlnaW5hbERpc3BsYXlOYW1lOiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBvcmlnaW5hbEF2YXRhclVybDogc3RyaW5nIHwgbnVsbDtcbiAgICBhdmF0YXJGaWxlOiBGaWxlIHwgbnVsbDtcbiAgICAvLyBJZiB0cnVlLCB0aGUgdXNlciBoYXMgaW5kaWNhdGVkIHRoYXQgdGhleSB3aXNoIHRvIHJlbW92ZSB0aGUgYXZhdGFyIGFuZCB0aGlzIHNob3VsZCBoYXBwZW4gb24gc2F2ZS5cbiAgICBhdmF0YXJSZW1vdmFsUGVuZGluZzogYm9vbGVhbjtcbiAgICBvcmlnaW5hbFRvcGljOiBzdHJpbmc7XG4gICAgdG9waWM6IHN0cmluZztcbiAgICBwcm9maWxlRmllbGRzVG91Y2hlZDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgY2FuU2V0TmFtZTogYm9vbGVhbjtcbiAgICBjYW5TZXRUb3BpYzogYm9vbGVhbjtcbiAgICBjYW5TZXRBdmF0YXI6IGJvb2xlYW47XG59XG5cbi8vIFRPRE86IE1lcmdlIHdpdGggUHJvZmlsZVNldHRpbmdzP1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm9vbVByb2ZpbGVTZXR0aW5ncyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIHByaXZhdGUgYXZhdGFyVXBsb2FkID0gY3JlYXRlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IElQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gTWF0cml4Q2xpZW50UGVnLnNhZmVHZXQoKTtcbiAgICAgICAgY29uc3Qgcm9vbSA9IGNsaWVudC5nZXRSb29tKHByb3BzLnJvb21JZCk7XG4gICAgICAgIGlmICghcm9vbSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHJvb20gZm9yIElEOiAke3Byb3BzLnJvb21JZH1gKTtcblxuICAgICAgICBjb25zdCBhdmF0YXJFdmVudCA9IHJvb20uY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKEV2ZW50VHlwZS5Sb29tQXZhdGFyLCBcIlwiKTtcbiAgICAgICAgY29uc3QgYXZhdGFyVXJsID0gYXZhdGFyRXZlbnQ/LmdldENvbnRlbnQoKVtcInVybFwiXSA/PyBudWxsO1xuXG4gICAgICAgIGNvbnN0IHRvcGljRXZlbnQgPSByb29tLmN1cnJlbnRTdGF0ZS5nZXRTdGF0ZUV2ZW50cyhFdmVudFR5cGUuUm9vbVRvcGljLCBcIlwiKTtcbiAgICAgICAgY29uc3QgdG9waWMgPSB0b3BpY0V2ZW50ICYmIHRvcGljRXZlbnQuZ2V0Q29udGVudCgpID8gdG9waWNFdmVudC5nZXRDb250ZW50KClbXCJ0b3BpY1wiXSA6IFwiXCI7XG5cbiAgICAgICAgY29uc3QgbmFtZUV2ZW50ID0gcm9vbS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoRXZlbnRUeXBlLlJvb21OYW1lLCBcIlwiKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IG5hbWVFdmVudCAmJiBuYW1lRXZlbnQuZ2V0Q29udGVudCgpID8gbmFtZUV2ZW50LmdldENvbnRlbnQoKVtcIm5hbWVcIl0gOiBcIlwiO1xuXG4gICAgICAgIGNvbnN0IHVzZXJJZCA9IGNsaWVudC5nZXRTYWZlVXNlcklkKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvcmlnaW5hbERpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICAgICAgICBvcmlnaW5hbEF2YXRhclVybDogYXZhdGFyVXJsLFxuICAgICAgICAgICAgYXZhdGFyRmlsZTogbnVsbCxcbiAgICAgICAgICAgIGF2YXRhclJlbW92YWxQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIG9yaWdpbmFsVG9waWM6IHRvcGljLFxuICAgICAgICAgICAgdG9waWM6IHRvcGljLFxuICAgICAgICAgICAgcHJvZmlsZUZpZWxkc1RvdWNoZWQ6IHt9LFxuICAgICAgICAgICAgY2FuU2V0TmFtZTogcm9vbS5jdXJyZW50U3RhdGUubWF5U2VuZFN0YXRlRXZlbnQoRXZlbnRUeXBlLlJvb21OYW1lLCB1c2VySWQpLFxuICAgICAgICAgICAgY2FuU2V0VG9waWM6IHJvb20uY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KEV2ZW50VHlwZS5Sb29tVG9waWMsIHVzZXJJZCksXG4gICAgICAgICAgICBjYW5TZXRBdmF0YXI6IHJvb20uY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KEV2ZW50VHlwZS5Sb29tQXZhdGFyLCB1c2VySWQpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgb25BdmF0YXJDaGFuZ2VkID0gKGZpbGU6IEZpbGUpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhdmF0YXJGaWxlOiBmaWxlLFxuICAgICAgICAgICAgYXZhdGFyUmVtb3ZhbFBlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgcHJvZmlsZUZpZWxkc1RvdWNoZWQ6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLnByb2ZpbGVGaWVsZHNUb3VjaGVkLFxuICAgICAgICAgICAgICAgIGF2YXRhcjogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlbW92ZUF2YXRhciA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgLy8gY2xlYXIgZmlsZSB1cGxvYWQgZmllbGQgc28gc2FtZSBmaWxlIGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBpZiAodGhpcy5hdmF0YXJVcGxvYWQuY3VycmVudCkgdGhpcy5hdmF0YXJVcGxvYWQuY3VycmVudC52YWx1ZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgYXZhdGFyRmlsZTogbnVsbCxcbiAgICAgICAgICAgIGF2YXRhclJlbW92YWxQZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgcHJvZmlsZUZpZWxkc1RvdWNoZWQ6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLnByb2ZpbGVGaWVsZHNUb3VjaGVkLFxuICAgICAgICAgICAgICAgIGF2YXRhcjogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGlzU2F2ZUVuYWJsZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKE9iamVjdC52YWx1ZXModGhpcy5zdGF0ZS5wcm9maWxlRmllbGRzVG91Y2hlZCkubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjYW5jZWxQcm9maWxlQ2hhbmdlcyA9IGFzeW5jIChlOiBCdXR0b25FdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2F2ZUVuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHByb2ZpbGVGaWVsZHNUb3VjaGVkOiB7fSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLnN0YXRlLm9yaWdpbmFsRGlzcGxheU5hbWUsXG4gICAgICAgICAgICB0b3BpYzogdGhpcy5zdGF0ZS5vcmlnaW5hbFRvcGljLFxuICAgICAgICAgICAgYXZhdGFyRmlsZTogbnVsbCxcbiAgICAgICAgICAgIGF2YXRhclJlbW92YWxQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2F2ZVByb2ZpbGUgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNTYXZlRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwcm9maWxlRmllbGRzVG91Y2hlZDoge30gfSk7XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gTWF0cml4Q2xpZW50UGVnLnNhZmVHZXQoKTtcbiAgICAgICAgY29uc3QgbmV3U3RhdGU6IFBhcnRpYWw8SVN0YXRlPiA9IHt9O1xuXG4gICAgICAgIC8vIFRPRE86IFdoYXQgZG8gd2UgZG8gYWJvdXQgZXJyb3JzP1xuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuc3RhdGUuZGlzcGxheU5hbWUudHJpbSgpO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5vcmlnaW5hbERpc3BsYXlOYW1lICE9PSB0aGlzLnN0YXRlLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc2V0Um9vbU5hbWUodGhpcy5wcm9wcy5yb29tSWQsIGRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgIG5ld1N0YXRlLm9yaWdpbmFsRGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIG5ld1N0YXRlLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5hdmF0YXJGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNvbnRlbnRfdXJpOiB1cmkgfSA9IGF3YWl0IGNsaWVudC51cGxvYWRDb250ZW50KHRoaXMuc3RhdGUuYXZhdGFyRmlsZSk7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc2VuZFN0YXRlRXZlbnQodGhpcy5wcm9wcy5yb29tSWQsIEV2ZW50VHlwZS5Sb29tQXZhdGFyLCB7IHVybDogdXJpIH0sIFwiXCIpO1xuICAgICAgICAgICAgbmV3U3RhdGUub3JpZ2luYWxBdmF0YXJVcmwgPSB1cmk7XG4gICAgICAgICAgICBuZXdTdGF0ZS5hdmF0YXJGaWxlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmF2YXRhclJlbW92YWxQZW5kaW5nKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc2VuZFN0YXRlRXZlbnQodGhpcy5wcm9wcy5yb29tSWQsIEV2ZW50VHlwZS5Sb29tQXZhdGFyLCB7fSwgXCJcIik7XG4gICAgICAgICAgICBuZXdTdGF0ZS5hdmF0YXJSZW1vdmFsUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbmV3U3RhdGUub3JpZ2luYWxBdmF0YXJVcmwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUub3JpZ2luYWxUb3BpYyAhPT0gdGhpcy5zdGF0ZS50b3BpYykge1xuICAgICAgICAgICAgY29uc3QgaHRtbCA9IGh0bWxTZXJpYWxpemVGcm9tTWRJZk5lZWRlZCh0aGlzLnN0YXRlLnRvcGljLCB7IGZvcmNlSFRNTDogZmFsc2UgfSk7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc2V0Um9vbVRvcGljKHRoaXMucHJvcHMucm9vbUlkLCB0aGlzLnN0YXRlLnRvcGljLCBodG1sKTtcbiAgICAgICAgICAgIG5ld1N0YXRlLm9yaWdpbmFsVG9waWMgPSB0aGlzLnN0YXRlLnRvcGljO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSBhcyBJU3RhdGUpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uRGlzcGxheU5hbWVDaGFuZ2VkID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkaXNwbGF5TmFtZTogZS50YXJnZXQudmFsdWUgfSk7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm9yaWdpbmFsRGlzcGxheU5hbWUgPT09IGUudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBwcm9maWxlRmllbGRzVG91Y2hlZDoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLnByb2ZpbGVGaWVsZHNUb3VjaGVkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBwcm9maWxlRmllbGRzVG91Y2hlZDoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLnByb2ZpbGVGaWVsZHNUb3VjaGVkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIG9uVG9waWNDaGFuZ2VkID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0b3BpYzogZS50YXJnZXQudmFsdWUgfSk7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm9yaWdpbmFsVG9waWMgPT09IGUudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBwcm9maWxlRmllbGRzVG91Y2hlZDoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLnByb2ZpbGVGaWVsZHNUb3VjaGVkLFxuICAgICAgICAgICAgICAgICAgICB0b3BpYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgcHJvZmlsZUZpZWxkc1RvdWNoZWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZS5wcm9maWxlRmllbGRzVG91Y2hlZCxcbiAgICAgICAgICAgICAgICAgICAgdG9waWM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgbGV0IHByb2ZpbGVTZXR0aW5nc0J1dHRvbnM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmNhblNldE5hbWUgfHwgdGhpcy5zdGF0ZS5jYW5TZXRUb3BpYyB8fCB0aGlzLnN0YXRlLmNhblNldEF2YXRhcikge1xuICAgICAgICAgICAgcHJvZmlsZVNldHRpbmdzQnV0dG9ucyA9IChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Jvb21Qcm9maWxlU2V0dGluZ3NfYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5jYW5jZWxQcm9maWxlQ2hhbmdlc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJwcmltYXJ5X291dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLmlzU2F2ZUVuYWJsZWQoKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwiYWN0aW9ufGNhbmNlbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvbiBvbkNsaWNrPXt0aGlzLnNhdmVQcm9maWxlfSBraW5kPVwicHJpbWFyeVwiIGRpc2FibGVkPXshdGhpcy5pc1NhdmVFbmFibGVkKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwiYWN0aW9ufHNhdmVcIil9XG4gICAgICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYW5SZW1vdmUgPSB0aGlzLnN0YXRlLnByb2ZpbGVGaWVsZHNUb3VjaGVkLmF2YXRhclxuICAgICAgICAgICAgPyBCb29sZWFuKHRoaXMuc3RhdGUuYXZhdGFyRmlsZSlcbiAgICAgICAgICAgIDogQm9vbGVhbih0aGlzLnN0YXRlLm9yaWdpbmFsQXZhdGFyVXJsKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuc2F2ZVByb2ZpbGV9IGF1dG9Db21wbGV0ZT1cIm9mZlwiIG5vVmFsaWRhdGU9e3RydWV9IGNsYXNzTmFtZT1cIm14X1Jvb21Qcm9maWxlU2V0dGluZ3NcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Jvb21Qcm9maWxlU2V0dGluZ3NfcHJvZmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Jvb21Qcm9maWxlU2V0dGluZ3NfcHJvZmlsZV9jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwicm9vbV9zZXR0aW5nc3xnZW5lcmFsfG5hbWVfZmllbGRfbGFiZWxcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmRpc3BsYXlOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25EaXNwbGF5TmFtZUNoYW5nZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnN0YXRlLmNhblNldE5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm14X1Jvb21Qcm9maWxlU2V0dGluZ3NfcHJvZmlsZV9jb250cm9sc190b3BpY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm14X1Jvb21Qcm9maWxlU2V0dGluZ3NfcHJvZmlsZV9jb250cm9sc190b3BpYy0tcm9vbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcm9maWxlVG9waWNcIiAvLyBTZWU6IE5ld1Jvb21JbnRyby50c3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJyb29tX3NldHRpbmdzfGdlbmVyYWx8dG9waWNfZmllbGRfbGFiZWxcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnN0YXRlLmNhblNldFRvcGljfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS50b3BpY31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uVG9waWNDaGFuZ2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9XCJ0ZXh0YXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPEF2YXRhclNldHRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhcj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5hdmF0YXJSZW1vdmFsUGVuZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0aGlzLnN0YXRlLmF2YXRhckZpbGUgPz8gdGhpcy5zdGF0ZS5vcmlnaW5hbEF2YXRhclVybCA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJBbHRUZXh0PXtfdChcInJvb21fc2V0dGluZ3N8Z2VuZXJhbHxhdmF0YXJfZmllbGRfbGFiZWxcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMuc3RhdGUuY2FuU2V0QXZhdGFyfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25BdmF0YXJDaGFuZ2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXZhdGFyPXtjYW5SZW1vdmUgPyB0aGlzLnJlbW92ZUF2YXRhciA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVySWQ9e2lkTmFtZUZvclJvb20oTWF0cml4Q2xpZW50UGVnLnNhZmVHZXQoKS5nZXRSb29tKHRoaXMucHJvcHMucm9vbUlkKSEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJOYW1lPXtNYXRyaXhDbGllbnRQZWcuc2FmZUdldCgpLmdldFJvb20odGhpcy5wcm9wcy5yb29tSWQpIS5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHtwcm9maWxlU2V0dGluZ3NCdXR0b25zfVxuICAgICAg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