matrix-react-sdk
Version:
SDK for matrix.org using React
96 lines (93 loc) • 20.7 kB
JavaScript
;
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 = _interopRequireDefault(require("react"));
var _RoomContext = _interopRequireWildcard(require("../../../contexts/RoomContext"));
var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore"));
var _DateSeparator = _interopRequireDefault(require("../messages/DateSeparator"));
var _EventTile = _interopRequireDefault(require("./EventTile"));
var _MessagePanel = require("../../structures/MessagePanel");
var _DateUtils = require("../../../DateUtils");
var _LegacyCallEventGrouper = require("../../structures/LegacyCallEventGrouper");
var _EventTileFactory = require("../../../events/EventTileFactory");
var _MatrixClientPeg = require("../../../MatrixClientPeg");
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 2019-2023 The Matrix.org Foundation C.I.C.
Copyright 2015 OpenMarket Ltd
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
class SearchResultTile extends _react.default.Component {
constructor(props, context) {
super(props, context);
// A map of <callId, LegacyCallEventGrouper>
(0, _defineProperty2.default)(this, "callEventGroupers", new Map());
this.buildLegacyCallEventGroupers(this.props.timeline);
}
buildLegacyCallEventGroupers(events) {
this.callEventGroupers = (0, _LegacyCallEventGrouper.buildLegacyCallEventGroupers)(this.callEventGroupers, events);
}
render() {
const timeline = this.props.timeline;
const resultEvent = timeline[this.props.ourEventsIndexes[0]];
const eventId = resultEvent.getId();
const ts1 = resultEvent.getTs();
const ret = [/*#__PURE__*/_react.default.createElement(_DateSeparator.default, {
key: ts1 + "-search",
roomId: resultEvent.getRoomId(),
ts: ts1
})];
const layout = _SettingsStore.default.getValue("layout");
const isTwelveHour = _SettingsStore.default.getValue("showTwelveHourTimestamps");
const alwaysShowTimestamps = _SettingsStore.default.getValue("alwaysShowTimestamps");
const cli = _MatrixClientPeg.MatrixClientPeg.safeGet();
for (let j = 0; j < timeline.length; j++) {
const mxEv = timeline[j];
let highlights;
const contextual = !this.props.ourEventsIndexes.includes(j);
if (!contextual) {
highlights = this.props.searchHighlights;
}
if ((0, _EventTileFactory.haveRendererForEvent)(mxEv, cli, this.context?.showHiddenEvents)) {
// do we need a date separator since the last event?
const prevEv = timeline[j - 1];
// is this a continuation of the previous message?
const continuation = prevEv && !(0, _DateUtils.wantsDateSeparator)(prevEv.getDate() || undefined, mxEv.getDate() || undefined) && (0, _MessagePanel.shouldFormContinuation)(prevEv, mxEv, cli, this.context?.showHiddenEvents, _RoomContext.TimelineRenderingType.Search);
let lastInSection = true;
const nextEv = timeline[j + 1];
if (nextEv) {
const willWantDateSeparator = (0, _DateUtils.wantsDateSeparator)(mxEv.getDate() || undefined, nextEv.getDate() || undefined);
lastInSection = willWantDateSeparator || mxEv.getSender() !== nextEv.getSender() || !(0, _MessagePanel.shouldFormContinuation)(mxEv, nextEv, cli, this.context?.showHiddenEvents, _RoomContext.TimelineRenderingType.Search);
}
ret.push( /*#__PURE__*/_react.default.createElement(_EventTile.default, {
key: `${eventId}+${j}`,
mxEvent: mxEv,
layout: layout,
contextual: contextual,
highlights: highlights,
permalinkCreator: this.props.permalinkCreator,
highlightLink: this.props.resultLink,
onHeightChanged: this.props.onHeightChanged,
isTwelveHour: isTwelveHour,
alwaysShowTimestamps: alwaysShowTimestamps,
lastInSection: lastInSection,
continuation: continuation,
callEventGrouper: this.callEventGroupers.get(mxEv.getContent().call_id)
}));
}
}
return /*#__PURE__*/_react.default.createElement("li", {
"data-scroll-tokens": eventId
}, /*#__PURE__*/_react.default.createElement("ol", null, ret));
}
}
exports.default = SearchResultTile;
(0, _defineProperty2.default)(SearchResultTile, "contextType", _RoomContext.default);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9Sb29tQ29udGV4dCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1NldHRpbmdzU3RvcmUiLCJfRGF0ZVNlcGFyYXRvciIsIl9FdmVudFRpbGUiLCJfTWVzc2FnZVBhbmVsIiwiX0RhdGVVdGlscyIsIl9MZWdhY3lDYWxsRXZlbnRHcm91cGVyIiwiX0V2ZW50VGlsZUZhY3RvcnkiLCJfTWF0cml4Q2xpZW50UGVnIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU2VhcmNoUmVzdWx0VGlsZSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImNvbnRleHQiLCJfZGVmaW5lUHJvcGVydHkyIiwiTWFwIiwiYnVpbGRMZWdhY3lDYWxsRXZlbnRHcm91cGVycyIsInRpbWVsaW5lIiwiZXZlbnRzIiwiY2FsbEV2ZW50R3JvdXBlcnMiLCJyZW5kZXIiLCJyZXN1bHRFdmVudCIsIm91ckV2ZW50c0luZGV4ZXMiLCJldmVudElkIiwiZ2V0SWQiLCJ0czEiLCJnZXRUcyIsInJldCIsImNyZWF0ZUVsZW1lbnQiLCJrZXkiLCJyb29tSWQiLCJnZXRSb29tSWQiLCJ0cyIsImxheW91dCIsIlNldHRpbmdzU3RvcmUiLCJnZXRWYWx1ZSIsImlzVHdlbHZlSG91ciIsImFsd2F5c1Nob3dUaW1lc3RhbXBzIiwiY2xpIiwiTWF0cml4Q2xpZW50UGVnIiwic2FmZUdldCIsImoiLCJsZW5ndGgiLCJteEV2IiwiaGlnaGxpZ2h0cyIsImNvbnRleHR1YWwiLCJpbmNsdWRlcyIsInNlYXJjaEhpZ2hsaWdodHMiLCJoYXZlUmVuZGVyZXJGb3JFdmVudCIsInNob3dIaWRkZW5FdmVudHMiLCJwcmV2RXYiLCJjb250aW51YXRpb24iLCJ3YW50c0RhdGVTZXBhcmF0b3IiLCJnZXREYXRlIiwidW5kZWZpbmVkIiwic2hvdWxkRm9ybUNvbnRpbnVhdGlvbiIsIlRpbWVsaW5lUmVuZGVyaW5nVHlwZSIsIlNlYXJjaCIsImxhc3RJblNlY3Rpb24iLCJuZXh0RXYiLCJ3aWxsV2FudERhdGVTZXBhcmF0b3IiLCJnZXRTZW5kZXIiLCJwdXNoIiwibXhFdmVudCIsInBlcm1hbGlua0NyZWF0b3IiLCJoaWdobGlnaHRMaW5rIiwicmVzdWx0TGluayIsIm9uSGVpZ2h0Q2hhbmdlZCIsImNhbGxFdmVudEdyb3VwZXIiLCJnZXRDb250ZW50IiwiY2FsbF9pZCIsImV4cG9ydHMiLCJSb29tQ29udGV4dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL1NlYXJjaFJlc3VsdFRpbGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE5LTIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDE1IE9wZW5NYXJrZXQgTHRkXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE1hdHJpeEV2ZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgUm9vbUNvbnRleHQsIHsgVGltZWxpbmVSZW5kZXJpbmdUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL1Jvb21Db250ZXh0XCI7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3NTdG9yZVwiO1xuaW1wb3J0IHsgUm9vbVBlcm1hbGlua0NyZWF0b3IgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGVybWFsaW5rcy9QZXJtYWxpbmtzXCI7XG5pbXBvcnQgRGF0ZVNlcGFyYXRvciBmcm9tIFwiLi4vbWVzc2FnZXMvRGF0ZVNlcGFyYXRvclwiO1xuaW1wb3J0IEV2ZW50VGlsZSBmcm9tIFwiLi9FdmVudFRpbGVcIjtcbmltcG9ydCB7IHNob3VsZEZvcm1Db250aW51YXRpb24gfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlcy9NZXNzYWdlUGFuZWxcIjtcbmltcG9ydCB7IHdhbnRzRGF0ZVNlcGFyYXRvciB9IGZyb20gXCIuLi8uLi8uLi9EYXRlVXRpbHNcIjtcbmltcG9ydCBMZWdhY3lDYWxsRXZlbnRHcm91cGVyLCB7IGJ1aWxkTGVnYWN5Q2FsbEV2ZW50R3JvdXBlcnMgfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlcy9MZWdhY3lDYWxsRXZlbnRHcm91cGVyXCI7XG5pbXBvcnQgeyBoYXZlUmVuZGVyZXJGb3JFdmVudCB9IGZyb20gXCIuLi8uLi8uLi9ldmVudHMvRXZlbnRUaWxlRmFjdG9yeVwiO1xuaW1wb3J0IHsgTWF0cml4Q2xpZW50UGVnIH0gZnJvbSBcIi4uLy4uLy4uL01hdHJpeENsaWVudFBlZ1wiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICAvLyBhIGxpc3Qgb2Ygc3RyaW5ncyB0byBiZSBoaWdobGlnaHRlZCBpbiB0aGUgcmVzdWx0c1xuICAgIHNlYXJjaEhpZ2hsaWdodHM/OiBzdHJpbmdbXTtcbiAgICAvLyBocmVmIGZvciB0aGUgaGlnaGxpZ2h0cyBpbiB0aGlzIHJlc3VsdFxuICAgIHJlc3VsdExpbms/OiBzdHJpbmc7XG4gICAgLy8gdGltZWxpbmUgb2YgdGhlIHNlYXJjaCByZXN1bHRcbiAgICB0aW1lbGluZTogTWF0cml4RXZlbnRbXTtcbiAgICAvLyBpbmRleGVzIG9mIHRoZSBtYXRjaGluZyBldmVudHMgKG5vdCBjb250ZXh0dWFsIG9uZXMpXG4gICAgb3VyRXZlbnRzSW5kZXhlczogbnVtYmVyW107XG4gICAgb25IZWlnaHRDaGFuZ2VkPzogKCkgPT4gdm9pZDtcbiAgICBwZXJtYWxpbmtDcmVhdG9yPzogUm9vbVBlcm1hbGlua0NyZWF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaFJlc3VsdFRpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SVByb3BzPiB7XG4gICAgcHVibGljIHN0YXRpYyBjb250ZXh0VHlwZSA9IFJvb21Db250ZXh0O1xuICAgIHB1YmxpYyBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBSb29tQ29udGV4dD47XG5cbiAgICAvLyBBIG1hcCBvZiA8Y2FsbElkLCBMZWdhY3lDYWxsRXZlbnRHcm91cGVyPlxuICAgIHByaXZhdGUgY2FsbEV2ZW50R3JvdXBlcnMgPSBuZXcgTWFwPHN0cmluZywgTGVnYWN5Q2FsbEV2ZW50R3JvdXBlcj4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzLCBjb250ZXh0OiBSZWFjdC5Db250ZXh0VHlwZTx0eXBlb2YgUm9vbUNvbnRleHQ+KSB7XG4gICAgICAgIHN1cGVyKHByb3BzLCBjb250ZXh0KTtcblxuICAgICAgICB0aGlzLmJ1aWxkTGVnYWN5Q2FsbEV2ZW50R3JvdXBlcnModGhpcy5wcm9wcy50aW1lbGluZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZExlZ2FjeUNhbGxFdmVudEdyb3VwZXJzKGV2ZW50cz86IE1hdHJpeEV2ZW50W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWxsRXZlbnRHcm91cGVycyA9IGJ1aWxkTGVnYWN5Q2FsbEV2ZW50R3JvdXBlcnModGhpcy5jYWxsRXZlbnRHcm91cGVycywgZXZlbnRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lID0gdGhpcy5wcm9wcy50aW1lbGluZTtcbiAgICAgICAgY29uc3QgcmVzdWx0RXZlbnQgPSB0aW1lbGluZVt0aGlzLnByb3BzLm91ckV2ZW50c0luZGV4ZXNbMF1dO1xuICAgICAgICBjb25zdCBldmVudElkID0gcmVzdWx0RXZlbnQuZ2V0SWQoKTtcblxuICAgICAgICBjb25zdCB0czEgPSByZXN1bHRFdmVudC5nZXRUcygpO1xuICAgICAgICBjb25zdCByZXQgPSBbPERhdGVTZXBhcmF0b3Iga2V5PXt0czEgKyBcIi1zZWFyY2hcIn0gcm9vbUlkPXtyZXN1bHRFdmVudC5nZXRSb29tSWQoKSF9IHRzPXt0czF9IC8+XTtcbiAgICAgICAgY29uc3QgbGF5b3V0ID0gU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZShcImxheW91dFwiKTtcbiAgICAgICAgY29uc3QgaXNUd2VsdmVIb3VyID0gU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZShcInNob3dUd2VsdmVIb3VyVGltZXN0YW1wc1wiKTtcbiAgICAgICAgY29uc3QgYWx3YXlzU2hvd1RpbWVzdGFtcHMgPSBTZXR0aW5nc1N0b3JlLmdldFZhbHVlKFwiYWx3YXlzU2hvd1RpbWVzdGFtcHNcIik7XG5cbiAgICAgICAgY29uc3QgY2xpID0gTWF0cml4Q2xpZW50UGVnLnNhZmVHZXQoKTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aW1lbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgbXhFdiA9IHRpbWVsaW5lW2pdO1xuICAgICAgICAgICAgbGV0IGhpZ2hsaWdodHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dHVhbCA9ICF0aGlzLnByb3BzLm91ckV2ZW50c0luZGV4ZXMuaW5jbHVkZXMoaik7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHR1YWwpIHtcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRzID0gdGhpcy5wcm9wcy5zZWFyY2hIaWdobGlnaHRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGF2ZVJlbmRlcmVyRm9yRXZlbnQobXhFdiwgY2xpLCB0aGlzLmNvbnRleHQ/LnNob3dIaWRkZW5FdmVudHMpKSB7XG4gICAgICAgICAgICAgICAgLy8gZG8gd2UgbmVlZCBhIGRhdGUgc2VwYXJhdG9yIHNpbmNlIHRoZSBsYXN0IGV2ZW50P1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZFdiA9IHRpbWVsaW5lW2ogLSAxXTtcbiAgICAgICAgICAgICAgICAvLyBpcyB0aGlzIGEgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBtZXNzYWdlP1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRpbnVhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIHByZXZFdiAmJlxuICAgICAgICAgICAgICAgICAgICAhd2FudHNEYXRlU2VwYXJhdG9yKHByZXZFdi5nZXREYXRlKCkgfHwgdW5kZWZpbmVkLCBteEV2LmdldERhdGUoKSB8fCB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZEZvcm1Db250aW51YXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2RXYsXG4gICAgICAgICAgICAgICAgICAgICAgICBteEV2LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0Py5zaG93SGlkZGVuRXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgVGltZWxpbmVSZW5kZXJpbmdUeXBlLlNlYXJjaCxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGxldCBsYXN0SW5TZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RXYgPSB0aW1lbGluZVtqICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKG5leHRFdikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWxsV2FudERhdGVTZXBhcmF0b3IgPSB3YW50c0RhdGVTZXBhcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBteEV2LmdldERhdGUoKSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXYuZ2V0RGF0ZSgpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEluU2VjdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWxsV2FudERhdGVTZXBhcmF0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG14RXYuZ2V0U2VuZGVyKCkgIT09IG5leHRFdi5nZXRTZW5kZXIoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXNob3VsZEZvcm1Db250aW51YXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXhFdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dD8uc2hvd0hpZGRlbkV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lbGluZVJlbmRlcmluZ1R5cGUuU2VhcmNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPEV2ZW50VGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtldmVudElkfSske2p9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG14RXZlbnQ9e214RXZ9XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQ9e2xheW91dH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHR1YWw9e2NvbnRleHR1YWx9XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRzPXtoaWdobGlnaHRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGVybWFsaW5rQ3JlYXRvcj17dGhpcy5wcm9wcy5wZXJtYWxpbmtDcmVhdG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0TGluaz17dGhpcy5wcm9wcy5yZXN1bHRMaW5rfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25IZWlnaHRDaGFuZ2VkPXt0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVHdlbHZlSG91cj17aXNUd2VsdmVIb3VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWx3YXlzU2hvd1RpbWVzdGFtcHM9e2Fsd2F5c1Nob3dUaW1lc3RhbXBzfVxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEluU2VjdGlvbj17bGFzdEluU2VjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbj17Y29udGludWF0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEV2ZW50R3JvdXBlcj17dGhpcy5jYWxsRXZlbnRHcm91cGVycy5nZXQobXhFdi5nZXRDb250ZW50KCkuY2FsbF9pZCl9XG4gICAgICAgICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGxpIGRhdGEtc2Nyb2xsLXRva2Vucz17ZXZlbnRJZH0+XG4gICAgICAgICAgICAgICAgPG9sPntyZXR9PC9vbD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLFlBQUEsR0FBQUMsdUJBQUEsQ0FB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