matrix-react-sdk
Version:
SDK for matrix.org using React
120 lines (117 loc) • 23.1 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RoomKnocksBar = void 0;
var _matrix = require("matrix-js-sdk/src/matrix");
var _types = require("matrix-js-sdk/src/types");
var _react = _interopRequireWildcard(require("react"));
var _close = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/close"));
var _check = require("../../../../res/img/feather-customised/check.svg");
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _useEventEmitter = require("../../../hooks/useEventEmitter");
var _languageHandler = require("../../../languageHandler");
var _Modal = _interopRequireDefault(require("../../../Modal"));
var _MemberAvatar = _interopRequireDefault(require("../avatars/MemberAvatar"));
var _ErrorDialog = _interopRequireDefault(require("../dialogs/ErrorDialog"));
var _RoomSettingsDialog = require("../dialogs/RoomSettingsDialog");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _Heading = _interopRequireDefault(require("../typography/Heading"));
var _FormattingUtils = require("../../../utils/FormattingUtils");
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 Nordeck IT + Consulting GmbH
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
const RoomKnocksBar = ({
room
}) => {
const [disabled, setDisabled] = (0, _react.useState)(false);
const knockMembers = (0, _useEventEmitter.useTypedEventEmitterState)(room, _matrix.RoomStateEvent.Update, (0, _react.useCallback)(() => room.getMembersWithMembership(_types.KnownMembership.Knock), [room]));
const knockMembersCount = knockMembers.length;
if (room.getJoinRule() !== _matrix.JoinRule.Knock || knockMembersCount === 0) return null;
const client = room.client;
const userId = client.getUserId() || "";
const canInvite = room.canInvite(userId);
const member = room.getMember(userId);
const state = room.getLiveTimeline().getState(_matrix.EventTimeline.FORWARDS);
const canKick = member && state ? state.hasSufficientPowerLevelFor("kick", member.powerLevel) : false;
if (!canInvite && !canKick) return null;
const onError = error => {
_Modal.default.createDialog(_ErrorDialog.default, {
title: error.name,
description: error.message
});
};
const handleApprove = userId => {
setDisabled(true);
client.invite(room.roomId, userId).catch(onError).finally(() => setDisabled(false));
};
const handleDeny = userId => {
setDisabled(true);
client.kick(room.roomId, userId).catch(onError).finally(() => setDisabled(false));
};
const handleOpenRoomSettings = () => _dispatcher.default.dispatch({
action: "open_room_settings",
room_id: room.roomId,
initial_tab_id: _RoomSettingsDialog.RoomSettingsTab.People
});
let buttons = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_RoomKnocksBar_action",
kind: "primary",
onClick: handleOpenRoomSettings,
title: (0, _languageHandler._t)("action|view")
}, (0, _languageHandler._t)("action|view"));
let names = (0, _FormattingUtils.formatList)(knockMembers.map(knockMember => knockMember.name), 3, true);
let link = null;
if (knockMembersCount === 1) {
buttons = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_RoomKnocksBar_action",
disabled: !canKick || disabled,
kind: "icon_primary_outline",
onClick: () => handleDeny(knockMembers[0].userId),
title: (0, _languageHandler._t)("action|deny")
}, /*#__PURE__*/_react.default.createElement(_close.default, {
width: 18,
height: 18
})), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_RoomKnocksBar_action",
disabled: !canInvite || disabled,
kind: "icon_primary",
onClick: () => handleApprove(knockMembers[0].userId),
title: (0, _languageHandler._t)("action|approve")
}, /*#__PURE__*/_react.default.createElement(_check.Icon, {
width: 18,
height: 18
})));
names = `${knockMembers[0].name} (${knockMembers[0].userId})`;
link = knockMembers[0].events.member?.getContent().reason && /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_RoomKnocksBar_link",
element: "a",
kind: "link_inline",
onClick: handleOpenRoomSettings
}, (0, _languageHandler._t)("action|view_message"));
}
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomKnocksBar"
}, knockMembers.slice(0, 2).map(knockMember => /*#__PURE__*/_react.default.createElement(_MemberAvatar.default, {
className: "mx_RoomKnocksBar_avatar",
key: knockMember.userId,
member: knockMember,
size: "32px"
})), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomKnocksBar_content"
}, /*#__PURE__*/_react.default.createElement(_Heading.default, {
size: "4"
}, (0, _languageHandler._t)("room|header|n_people_asking_to_join", {
count: knockMembersCount
})), /*#__PURE__*/_react.default.createElement("p", {
className: "mx_RoomKnocksBar_paragraph"
}, names, link)), buttons);
};
exports.RoomKnocksBar = RoomKnocksBar;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl90eXBlcyIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2Nsb3NlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jaGVjayIsIl9kaXNwYXRjaGVyIiwiX3VzZUV2ZW50RW1pdHRlciIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfTW9kYWwiLCJfTWVtYmVyQXZhdGFyIiwiX0Vycm9yRGlhbG9nIiwiX1Jvb21TZXR0aW5nc0RpYWxvZyIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX0hlYWRpbmciLCJfRm9ybWF0dGluZ1V0aWxzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiUm9vbUtub2Nrc0JhciIsInJvb20iLCJkaXNhYmxlZCIsInNldERpc2FibGVkIiwidXNlU3RhdGUiLCJrbm9ja01lbWJlcnMiLCJ1c2VUeXBlZEV2ZW50RW1pdHRlclN0YXRlIiwiUm9vbVN0YXRlRXZlbnQiLCJVcGRhdGUiLCJ1c2VDYWxsYmFjayIsImdldE1lbWJlcnNXaXRoTWVtYmVyc2hpcCIsIktub3duTWVtYmVyc2hpcCIsIktub2NrIiwia25vY2tNZW1iZXJzQ291bnQiLCJsZW5ndGgiLCJnZXRKb2luUnVsZSIsIkpvaW5SdWxlIiwiY2xpZW50IiwidXNlcklkIiwiZ2V0VXNlcklkIiwiY2FuSW52aXRlIiwibWVtYmVyIiwiZ2V0TWVtYmVyIiwic3RhdGUiLCJnZXRMaXZlVGltZWxpbmUiLCJnZXRTdGF0ZSIsIkV2ZW50VGltZWxpbmUiLCJGT1JXQVJEUyIsImNhbktpY2siLCJoYXNTdWZmaWNpZW50UG93ZXJMZXZlbEZvciIsInBvd2VyTGV2ZWwiLCJvbkVycm9yIiwiZXJyb3IiLCJNb2RhbCIsImNyZWF0ZURpYWxvZyIsIkVycm9yRGlhbG9nIiwidGl0bGUiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiaGFuZGxlQXBwcm92ZSIsImludml0ZSIsInJvb21JZCIsImNhdGNoIiwiZmluYWxseSIsImhhbmRsZURlbnkiLCJraWNrIiwiaGFuZGxlT3BlblJvb21TZXR0aW5ncyIsImRpcyIsImRpc3BhdGNoIiwiYWN0aW9uIiwicm9vbV9pZCIsImluaXRpYWxfdGFiX2lkIiwiUm9vbVNldHRpbmdzVGFiIiwiUGVvcGxlIiwiYnV0dG9ucyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJraW5kIiwib25DbGljayIsIl90IiwibmFtZXMiLCJmb3JtYXRMaXN0IiwibWFwIiwia25vY2tNZW1iZXIiLCJsaW5rIiwiRnJhZ21lbnQiLCJ3aWR0aCIsImhlaWdodCIsIkljb24iLCJldmVudHMiLCJnZXRDb250ZW50IiwicmVhc29uIiwiZWxlbWVudCIsInNsaWNlIiwia2V5Iiwic2l6ZSIsImNvdW50IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL1Jvb21Lbm9ja3NCYXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIzIE5vcmRlY2sgSVQgKyBDb25zdWx0aW5nIEdtYkhcblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgRXZlbnRUaW1lbGluZSwgSm9pblJ1bGUsIE1hdHJpeEVycm9yLCBSb29tLCBSb29tU3RhdGVFdmVudCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IEtub3duTWVtYmVyc2hpcCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy90eXBlc1wiO1xuaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlU3RhdGUsIFZGQyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC1kZXNpZ24tdG9rZW5zL2Fzc2V0cy93ZWIvaWNvbnMvY2xvc2VcIjtcblxuaW1wb3J0IHsgSWNvbiBhcyBDaGVja0ljb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vcmVzL2ltZy9mZWF0aGVyLWN1c3RvbWlzZWQvY2hlY2suc3ZnXCI7XG5pbXBvcnQgZGlzIGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcbmltcG9ydCB7IHVzZVR5cGVkRXZlbnRFbWl0dGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlRXZlbnRFbWl0dGVyXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vLi4vTW9kYWxcIjtcbmltcG9ydCBNZW1iZXJBdmF0YXIgZnJvbSBcIi4uL2F2YXRhcnMvTWVtYmVyQXZhdGFyXCI7XG5pbXBvcnQgRXJyb3JEaWFsb2cgZnJvbSBcIi4uL2RpYWxvZ3MvRXJyb3JEaWFsb2dcIjtcbmltcG9ydCB7IFJvb21TZXR0aW5nc1RhYiB9IGZyb20gXCIuLi9kaWFsb2dzL1Jvb21TZXR0aW5nc0RpYWxvZ1wiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4uL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcbmltcG9ydCBIZWFkaW5nIGZyb20gXCIuLi90eXBvZ3JhcGh5L0hlYWRpbmdcIjtcbmltcG9ydCB7IGZvcm1hdExpc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvRm9ybWF0dGluZ1V0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCBSb29tS25vY2tzQmFyOiBWRkM8eyByb29tOiBSb29tIH0+ID0gKHsgcm9vbSB9KSA9PiB7XG4gICAgY29uc3QgW2Rpc2FibGVkLCBzZXREaXNhYmxlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3Qga25vY2tNZW1iZXJzID0gdXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZShcbiAgICAgICAgcm9vbSxcbiAgICAgICAgUm9vbVN0YXRlRXZlbnQuVXBkYXRlLFxuICAgICAgICB1c2VDYWxsYmFjaygoKSA9PiByb29tLmdldE1lbWJlcnNXaXRoTWVtYmVyc2hpcChLbm93bk1lbWJlcnNoaXAuS25vY2spLCBbcm9vbV0pLFxuICAgICk7XG4gICAgY29uc3Qga25vY2tNZW1iZXJzQ291bnQgPSBrbm9ja01lbWJlcnMubGVuZ3RoO1xuXG4gICAgaWYgKHJvb20uZ2V0Sm9pblJ1bGUoKSAhPT0gSm9pblJ1bGUuS25vY2sgfHwga25vY2tNZW1iZXJzQ291bnQgPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY2xpZW50ID0gcm9vbS5jbGllbnQ7XG4gICAgY29uc3QgdXNlcklkID0gY2xpZW50LmdldFVzZXJJZCgpIHx8IFwiXCI7XG4gICAgY29uc3QgY2FuSW52aXRlID0gcm9vbS5jYW5JbnZpdGUodXNlcklkKTtcbiAgICBjb25zdCBtZW1iZXIgPSByb29tLmdldE1lbWJlcih1c2VySWQpO1xuICAgIGNvbnN0IHN0YXRlID0gcm9vbS5nZXRMaXZlVGltZWxpbmUoKS5nZXRTdGF0ZShFdmVudFRpbWVsaW5lLkZPUldBUkRTKTtcbiAgICBjb25zdCBjYW5LaWNrID0gbWVtYmVyICYmIHN0YXRlID8gc3RhdGUuaGFzU3VmZmljaWVudFBvd2VyTGV2ZWxGb3IoXCJraWNrXCIsIG1lbWJlci5wb3dlckxldmVsKSA6IGZhbHNlO1xuXG4gICAgaWYgKCFjYW5JbnZpdGUgJiYgIWNhbktpY2spIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogTWF0cml4RXJyb3IpOiB2b2lkID0+IHtcbiAgICAgICAgTW9kYWwuY3JlYXRlRGlhbG9nKEVycm9yRGlhbG9nLCB7IHRpdGxlOiBlcnJvci5uYW1lLCBkZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlQXBwcm92ZSA9ICh1c2VySWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICBzZXREaXNhYmxlZCh0cnVlKTtcbiAgICAgICAgY2xpZW50XG4gICAgICAgICAgICAuaW52aXRlKHJvb20ucm9vbUlkLCB1c2VySWQpXG4gICAgICAgICAgICAuY2F0Y2gob25FcnJvcilcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHNldERpc2FibGVkKGZhbHNlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZURlbnkgPSAodXNlcklkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgc2V0RGlzYWJsZWQodHJ1ZSk7XG4gICAgICAgIGNsaWVudFxuICAgICAgICAgICAgLmtpY2socm9vbS5yb29tSWQsIHVzZXJJZClcbiAgICAgICAgICAgIC5jYXRjaChvbkVycm9yKVxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0RGlzYWJsZWQoZmFsc2UpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlT3BlblJvb21TZXR0aW5ncyA9ICgpOiB2b2lkID0+XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7IGFjdGlvbjogXCJvcGVuX3Jvb21fc2V0dGluZ3NcIiwgcm9vbV9pZDogcm9vbS5yb29tSWQsIGluaXRpYWxfdGFiX2lkOiBSb29tU2V0dGluZ3NUYWIuUGVvcGxlIH0pO1xuXG4gICAgbGV0IGJ1dHRvbnM6IFJlYWN0RWxlbWVudCA9IChcbiAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1Jvb21Lbm9ja3NCYXJfYWN0aW9uXCJcbiAgICAgICAgICAgIGtpbmQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5Sb29tU2V0dGluZ3N9XG4gICAgICAgICAgICB0aXRsZT17X3QoXCJhY3Rpb258dmlld1wiKX1cbiAgICAgICAgPlxuICAgICAgICAgICAge190KFwiYWN0aW9ufHZpZXdcIil9XG4gICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICApO1xuICAgIGxldCBuYW1lcyA9IGZvcm1hdExpc3QoXG4gICAgICAgIGtub2NrTWVtYmVycy5tYXAoKGtub2NrTWVtYmVyKSA9PiBrbm9ja01lbWJlci5uYW1lKSxcbiAgICAgICAgMyxcbiAgICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIGxldCBsaW5rOiBSZWFjdE5vZGUgPSBudWxsO1xuICAgIGlmIChrbm9ja01lbWJlcnNDb3VudCA9PT0gMSkge1xuICAgICAgICBidXR0b25zID0gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9Sb29tS25vY2tzQmFyX2FjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuS2ljayB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAga2luZD1cImljb25fcHJpbWFyeV9vdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGVueShrbm9ja01lbWJlcnNbMF0udXNlcklkKX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e190KFwiYWN0aW9ufGRlbnlcIil9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2xvc2VJY29uIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfUm9vbUtub2Nrc0Jhcl9hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhbkludml0ZSB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAga2luZD1cImljb25fcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFwcHJvdmUoa25vY2tNZW1iZXJzWzBdLnVzZXJJZCl9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtfdChcImFjdGlvbnxhcHByb3ZlXCIpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENoZWNrSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgICAgIG5hbWVzID0gYCR7a25vY2tNZW1iZXJzWzBdLm5hbWV9ICgke2tub2NrTWVtYmVyc1swXS51c2VySWR9KWA7XG4gICAgICAgIGxpbmsgPSBrbm9ja01lbWJlcnNbMF0uZXZlbnRzLm1lbWJlcj8uZ2V0Q29udGVudCgpLnJlYXNvbiAmJiAoXG4gICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1Jvb21Lbm9ja3NCYXJfbGlua1wiXG4gICAgICAgICAgICAgICAgZWxlbWVudD1cImFcIlxuICAgICAgICAgICAgICAgIGtpbmQ9XCJsaW5rX2lubGluZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlT3BlblJvb21TZXR0aW5nc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7X3QoXCJhY3Rpb258dmlld19tZXNzYWdlXCIpfVxuICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfUm9vbUtub2Nrc0JhclwiPlxuICAgICAgICAgICAge2tub2NrTWVtYmVycy5zbGljZSgwLCAyKS5tYXAoKGtub2NrTWVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgICAgPE1lbWJlckF2YXRhclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9Sb29tS25vY2tzQmFyX2F2YXRhclwiXG4gICAgICAgICAgICAgICAgICAgIGtleT17a25vY2tNZW1iZXIudXNlcklkfVxuICAgICAgICAgICAgICAgICAgICBtZW1iZXI9e2tub2NrTWVtYmVyfVxuICAgICAgICAgICAgICAgICAgICBzaXplPVwiMzJweFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tS25vY2tzQmFyX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8SGVhZGluZyBzaXplPVwiNFwiPntfdChcInJvb218aGVhZGVyfG5fcGVvcGxlX2Fza2luZ190b19qb2luXCIsIHsgY291bnQ6IGtub2NrTWVtYmVyc0NvdW50IH0pfTwvSGVhZGluZz5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJteF9Sb29tS25vY2tzQmFyX3BhcmFncmFwaFwiPlxuICAgICAgICAgICAgICAgICAgICB7bmFtZXN9XG4gICAgICAgICAgICAgICAgICAgIHtsaW5rfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge2J1dHRvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBRUEsSUFB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