matrix-react-sdk
Version:
SDK for matrix.org using React
109 lines (104 loc) • 21.2 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RoomNotificationState = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _types = require("matrix-js-sdk/src/types");
var _MatrixClientPeg = require("../../MatrixClientPeg");
var _readReceipts = require("../../utils/read-receipts");
var RoomNotifs = _interopRequireWildcard(require("../../RoomNotifs"));
var _NotificationState = require("./NotificationState");
var _SettingsStore = _interopRequireDefault(require("../../settings/SettingsStore"));
var _notifications = require("../../utils/notifications");
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 2020-2023 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
class RoomNotificationState extends _NotificationState.NotificationState {
constructor(_room, includeThreads) {
super();
(0, _defineProperty2.default)(this, "handleLocalEchoUpdated", () => {
this.updateNotificationState();
});
(0, _defineProperty2.default)(this, "handleReadReceipt", (event, room) => {
if (!(0, _readReceipts.readReceiptChangeIsFor)(event, _MatrixClientPeg.MatrixClientPeg.safeGet())) return; // not our own - ignore
if (room.roomId !== this.room.roomId) return; // not for us - ignore
this.updateNotificationState();
});
(0, _defineProperty2.default)(this, "handleMembershipUpdate", () => {
this.updateNotificationState();
});
(0, _defineProperty2.default)(this, "handleNotificationCountUpdate", () => {
this.updateNotificationState();
});
(0, _defineProperty2.default)(this, "onEventDecrypted", event => {
if (event.getRoomId() !== this.room.roomId) return; // ignore - not for us or notifications timeline
this.updateNotificationState();
});
(0, _defineProperty2.default)(this, "handleRoomEventUpdate", event => {
if (event?.getRoomId() !== this.room.roomId) return; // ignore - not for us or notifications timeline
this.updateNotificationState();
});
(0, _defineProperty2.default)(this, "handleAccountDataUpdate", ev => {
if (ev.getType() === "m.push_rules") {
this.updateNotificationState();
}
});
(0, _defineProperty2.default)(this, "handleRoomAccountDataUpdate", ev => {
if ([_notifications.MARKED_UNREAD_TYPE_STABLE, _notifications.MARKED_UNREAD_TYPE_UNSTABLE].includes(ev.getType())) {
this.updateNotificationState();
}
});
this.room = _room;
this.includeThreads = includeThreads;
const cli = this.room.client;
this.room.on(_matrix.RoomEvent.Receipt, this.handleReadReceipt);
this.room.on(_matrix.RoomEvent.MyMembership, this.handleMembershipUpdate);
this.room.on(_matrix.RoomEvent.LocalEchoUpdated, this.handleLocalEchoUpdated);
this.room.on(_matrix.RoomEvent.Timeline, this.handleRoomEventUpdate);
this.room.on(_matrix.RoomEvent.Redaction, this.handleRoomEventUpdate);
this.room.on(_matrix.RoomEvent.AccountData, this.handleRoomAccountDataUpdate);
this.room.on(_matrix.RoomEvent.UnreadNotifications, this.handleNotificationCountUpdate); // for server-sent counts
cli.on(_matrix.MatrixEventEvent.Decrypted, this.onEventDecrypted);
cli.on(_matrix.ClientEvent.AccountData, this.handleAccountDataUpdate);
this.updateNotificationState();
}
destroy() {
super.destroy();
const cli = this.room.client;
this.room.removeListener(_matrix.RoomEvent.Receipt, this.handleReadReceipt);
this.room.removeListener(_matrix.RoomEvent.MyMembership, this.handleMembershipUpdate);
this.room.removeListener(_matrix.RoomEvent.LocalEchoUpdated, this.handleLocalEchoUpdated);
this.room.removeListener(_matrix.RoomEvent.Timeline, this.handleRoomEventUpdate);
this.room.removeListener(_matrix.RoomEvent.Redaction, this.handleRoomEventUpdate);
this.room.removeListener(_matrix.RoomEvent.AccountData, this.handleRoomAccountDataUpdate);
cli.removeListener(_matrix.MatrixEventEvent.Decrypted, this.onEventDecrypted);
cli.removeListener(_matrix.ClientEvent.AccountData, this.handleAccountDataUpdate);
}
updateNotificationState() {
const snapshot = this.snapshot();
const {
level,
symbol,
count
} = RoomNotifs.determineUnreadState(this.room, undefined, this.includeThreads);
const muted = RoomNotifs.getRoomNotifsState(this.room.client, this.room.roomId) === RoomNotifs.RoomNotifState.Mute;
const knocked = _SettingsStore.default.getValue("feature_ask_to_join") && this.room.getMyMembership() === _types.KnownMembership.Knock;
this._level = level;
this._symbol = symbol;
this._count = count;
this._muted = muted;
this._knocked = knocked;
// finally, publish an update if needed
this.emitIfUpdated(snapshot);
}
}
exports.RoomNotificationState = RoomNotificationState;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl90eXBlcyIsIl9NYXRyaXhDbGllbnRQZWciLCJfcmVhZFJlY2VpcHRzIiwiUm9vbU5vdGlmcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX05vdGlmaWNhdGlvblN0YXRlIiwiX1NldHRpbmdzU3RvcmUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX25vdGlmaWNhdGlvbnMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJSb29tTm90aWZpY2F0aW9uU3RhdGUiLCJOb3RpZmljYXRpb25TdGF0ZSIsImNvbnN0cnVjdG9yIiwicm9vbSIsImluY2x1ZGVUaHJlYWRzIiwiX2RlZmluZVByb3BlcnR5MiIsInVwZGF0ZU5vdGlmaWNhdGlvblN0YXRlIiwiZXZlbnQiLCJyZWFkUmVjZWlwdENoYW5nZUlzRm9yIiwiTWF0cml4Q2xpZW50UGVnIiwic2FmZUdldCIsInJvb21JZCIsImdldFJvb21JZCIsImV2IiwiZ2V0VHlwZSIsIk1BUktFRF9VTlJFQURfVFlQRV9TVEFCTEUiLCJNQVJLRURfVU5SRUFEX1RZUEVfVU5TVEFCTEUiLCJpbmNsdWRlcyIsImNsaSIsImNsaWVudCIsIm9uIiwiUm9vbUV2ZW50IiwiUmVjZWlwdCIsImhhbmRsZVJlYWRSZWNlaXB0IiwiTXlNZW1iZXJzaGlwIiwiaGFuZGxlTWVtYmVyc2hpcFVwZGF0ZSIsIkxvY2FsRWNob1VwZGF0ZWQiLCJoYW5kbGVMb2NhbEVjaG9VcGRhdGVkIiwiVGltZWxpbmUiLCJoYW5kbGVSb29tRXZlbnRVcGRhdGUiLCJSZWRhY3Rpb24iLCJBY2NvdW50RGF0YSIsImhhbmRsZVJvb21BY2NvdW50RGF0YVVwZGF0ZSIsIlVucmVhZE5vdGlmaWNhdGlvbnMiLCJoYW5kbGVOb3RpZmljYXRpb25Db3VudFVwZGF0ZSIsIk1hdHJpeEV2ZW50RXZlbnQiLCJEZWNyeXB0ZWQiLCJvbkV2ZW50RGVjcnlwdGVkIiwiQ2xpZW50RXZlbnQiLCJoYW5kbGVBY2NvdW50RGF0YVVwZGF0ZSIsImRlc3Ryb3kiLCJyZW1vdmVMaXN0ZW5lciIsInNuYXBzaG90IiwibGV2ZWwiLCJzeW1ib2wiLCJjb3VudCIsImRldGVybWluZVVucmVhZFN0YXRlIiwidW5kZWZpbmVkIiwibXV0ZWQiLCJnZXRSb29tTm90aWZzU3RhdGUiLCJSb29tTm90aWZTdGF0ZSIsIk11dGUiLCJrbm9ja2VkIiwiU2V0dGluZ3NTdG9yZSIsImdldFZhbHVlIiwiZ2V0TXlNZW1iZXJzaGlwIiwiS25vd25NZW1iZXJzaGlwIiwiS25vY2siLCJfbGV2ZWwiLCJfc3ltYm9sIiwiX2NvdW50IiwiX211dGVkIiwiX2tub2NrZWQiLCJlbWl0SWZVcGRhdGVkIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yZXMvbm90aWZpY2F0aW9ucy9Sb29tTm90aWZpY2F0aW9uU3RhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjAtMjAyMyBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBNYXRyaXhFdmVudEV2ZW50LCBSb29tRXZlbnQsIENsaWVudEV2ZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgS25vd25NZW1iZXJzaGlwIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL3R5cGVzXCI7XG5cbmltcG9ydCB0eXBlIHsgUm9vbSwgTWF0cml4RXZlbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgdHlwZSB7IElEZXN0cm95YWJsZSB9IGZyb20gXCIuLi8uLi91dGlscy9JRGVzdHJveWFibGVcIjtcbmltcG9ydCB7IE1hdHJpeENsaWVudFBlZyB9IGZyb20gXCIuLi8uLi9NYXRyaXhDbGllbnRQZWdcIjtcbmltcG9ydCB7IHJlYWRSZWNlaXB0Q2hhbmdlSXNGb3IgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcmVhZC1yZWNlaXB0c1wiO1xuaW1wb3J0ICogYXMgUm9vbU5vdGlmcyBmcm9tIFwiLi4vLi4vUm9vbU5vdGlmc1wiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU3RhdGUgfSBmcm9tIFwiLi9Ob3RpZmljYXRpb25TdGF0ZVwiO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSBcIi4uLy4uL3NldHRpbmdzL1NldHRpbmdzU3RvcmVcIjtcbmltcG9ydCB7IE1BUktFRF9VTlJFQURfVFlQRV9TVEFCTEUsIE1BUktFRF9VTlJFQURfVFlQRV9VTlNUQUJMRSB9IGZyb20gXCIuLi8uLi91dGlscy9ub3RpZmljYXRpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBSb29tTm90aWZpY2F0aW9uU3RhdGUgZXh0ZW5kcyBOb3RpZmljYXRpb25TdGF0ZSBpbXBsZW1lbnRzIElEZXN0cm95YWJsZSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcm9vbTogUm9vbSxcbiAgICAgICAgcHJpdmF0ZSBpbmNsdWRlVGhyZWFkczogYm9vbGVhbixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgY29uc3QgY2xpID0gdGhpcy5yb29tLmNsaWVudDtcbiAgICAgICAgdGhpcy5yb29tLm9uKFJvb21FdmVudC5SZWNlaXB0LCB0aGlzLmhhbmRsZVJlYWRSZWNlaXB0KTtcbiAgICAgICAgdGhpcy5yb29tLm9uKFJvb21FdmVudC5NeU1lbWJlcnNoaXAsIHRoaXMuaGFuZGxlTWVtYmVyc2hpcFVwZGF0ZSk7XG4gICAgICAgIHRoaXMucm9vbS5vbihSb29tRXZlbnQuTG9jYWxFY2hvVXBkYXRlZCwgdGhpcy5oYW5kbGVMb2NhbEVjaG9VcGRhdGVkKTtcbiAgICAgICAgdGhpcy5yb29tLm9uKFJvb21FdmVudC5UaW1lbGluZSwgdGhpcy5oYW5kbGVSb29tRXZlbnRVcGRhdGUpO1xuICAgICAgICB0aGlzLnJvb20ub24oUm9vbUV2ZW50LlJlZGFjdGlvbiwgdGhpcy5oYW5kbGVSb29tRXZlbnRVcGRhdGUpO1xuICAgICAgICB0aGlzLnJvb20ub24oUm9vbUV2ZW50LkFjY291bnREYXRhLCB0aGlzLmhhbmRsZVJvb21BY2NvdW50RGF0YVVwZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5yb29tLm9uKFJvb21FdmVudC5VbnJlYWROb3RpZmljYXRpb25zLCB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkNvdW50VXBkYXRlKTsgLy8gZm9yIHNlcnZlci1zZW50IGNvdW50c1xuICAgICAgICBjbGkub24oTWF0cml4RXZlbnRFdmVudC5EZWNyeXB0ZWQsIHRoaXMub25FdmVudERlY3J5cHRlZCk7XG4gICAgICAgIGNsaS5vbihDbGllbnRFdmVudC5BY2NvdW50RGF0YSwgdGhpcy5oYW5kbGVBY2NvdW50RGF0YVVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlTm90aWZpY2F0aW9uU3RhdGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBjbGkgPSB0aGlzLnJvb20uY2xpZW50O1xuICAgICAgICB0aGlzLnJvb20ucmVtb3ZlTGlzdGVuZXIoUm9vbUV2ZW50LlJlY2VpcHQsIHRoaXMuaGFuZGxlUmVhZFJlY2VpcHQpO1xuICAgICAgICB0aGlzLnJvb20ucmVtb3ZlTGlzdGVuZXIoUm9vbUV2ZW50Lk15TWVtYmVyc2hpcCwgdGhpcy5oYW5kbGVNZW1iZXJzaGlwVXBkYXRlKTtcbiAgICAgICAgdGhpcy5yb29tLnJlbW92ZUxpc3RlbmVyKFJvb21FdmVudC5Mb2NhbEVjaG9VcGRhdGVkLCB0aGlzLmhhbmRsZUxvY2FsRWNob1VwZGF0ZWQpO1xuICAgICAgICB0aGlzLnJvb20ucmVtb3ZlTGlzdGVuZXIoUm9vbUV2ZW50LlRpbWVsaW5lLCB0aGlzLmhhbmRsZVJvb21FdmVudFVwZGF0ZSk7XG4gICAgICAgIHRoaXMucm9vbS5yZW1vdmVMaXN0ZW5lcihSb29tRXZlbnQuUmVkYWN0aW9uLCB0aGlzLmhhbmRsZVJvb21FdmVudFVwZGF0ZSk7XG4gICAgICAgIHRoaXMucm9vbS5yZW1vdmVMaXN0ZW5lcihSb29tRXZlbnQuQWNjb3VudERhdGEsIHRoaXMuaGFuZGxlUm9vbUFjY291bnREYXRhVXBkYXRlKTtcbiAgICAgICAgY2xpLnJlbW92ZUxpc3RlbmVyKE1hdHJpeEV2ZW50RXZlbnQuRGVjcnlwdGVkLCB0aGlzLm9uRXZlbnREZWNyeXB0ZWQpO1xuICAgICAgICBjbGkucmVtb3ZlTGlzdGVuZXIoQ2xpZW50RXZlbnQuQWNjb3VudERhdGEsIHRoaXMuaGFuZGxlQWNjb3VudERhdGFVcGRhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTG9jYWxFY2hvVXBkYXRlZCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVOb3RpZmljYXRpb25TdGF0ZSgpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZVJlYWRSZWNlaXB0ID0gKGV2ZW50OiBNYXRyaXhFdmVudCwgcm9vbTogUm9vbSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXJlYWRSZWNlaXB0Q2hhbmdlSXNGb3IoZXZlbnQsIE1hdHJpeENsaWVudFBlZy5zYWZlR2V0KCkpKSByZXR1cm47IC8vIG5vdCBvdXIgb3duIC0gaWdub3JlXG4gICAgICAgIGlmIChyb29tLnJvb21JZCAhPT0gdGhpcy5yb29tLnJvb21JZCkgcmV0dXJuOyAvLyBub3QgZm9yIHVzIC0gaWdub3JlXG4gICAgICAgIHRoaXMudXBkYXRlTm90aWZpY2F0aW9uU3RhdGUoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVNZW1iZXJzaGlwVXBkYXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZU5vdGlmaWNhdGlvblN0YXRlKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlTm90aWZpY2F0aW9uQ291bnRVcGRhdGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlTm90aWZpY2F0aW9uU3RhdGUoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkV2ZW50RGVjcnlwdGVkID0gKGV2ZW50OiBNYXRyaXhFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuZ2V0Um9vbUlkKCkgIT09IHRoaXMucm9vbS5yb29tSWQpIHJldHVybjsgLy8gaWdub3JlIC0gbm90IGZvciB1cyBvciBub3RpZmljYXRpb25zIHRpbWVsaW5lXG5cbiAgICAgICAgdGhpcy51cGRhdGVOb3RpZmljYXRpb25TdGF0ZSgpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZVJvb21FdmVudFVwZGF0ZSA9IChldmVudDogTWF0cml4RXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Py5nZXRSb29tSWQoKSAhPT0gdGhpcy5yb29tLnJvb21JZCkgcmV0dXJuOyAvLyBpZ25vcmUgLSBub3QgZm9yIHVzIG9yIG5vdGlmaWNhdGlvbnMgdGltZWxpbmVcbiAgICAgICAgdGhpcy51cGRhdGVOb3RpZmljYXRpb25TdGF0ZSgpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZUFjY291bnREYXRhVXBkYXRlID0gKGV2OiBNYXRyaXhFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoZXYuZ2V0VHlwZSgpID09PSBcIm0ucHVzaF9ydWxlc1wiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vdGlmaWNhdGlvblN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVSb29tQWNjb3VudERhdGFVcGRhdGUgPSAoZXY6IE1hdHJpeEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChbTUFSS0VEX1VOUkVBRF9UWVBFX1NUQUJMRSwgTUFSS0VEX1VOUkVBRF9UWVBFX1VOU1RBQkxFXS5pbmNsdWRlcyhldi5nZXRUeXBlKCkpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vdGlmaWNhdGlvblN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB1cGRhdGVOb3RpZmljYXRpb25TdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnNuYXBzaG90KCk7XG5cbiAgICAgICAgY29uc3QgeyBsZXZlbCwgc3ltYm9sLCBjb3VudCB9ID0gUm9vbU5vdGlmcy5kZXRlcm1pbmVVbnJlYWRTdGF0ZSh0aGlzLnJvb20sIHVuZGVmaW5lZCwgdGhpcy5pbmNsdWRlVGhyZWFkcyk7XG4gICAgICAgIGNvbnN0IG11dGVkID1cbiAgICAgICAgICAgIFJvb21Ob3RpZnMuZ2V0Um9vbU5vdGlmc1N0YXRlKHRoaXMucm9vbS5jbGllbnQsIHRoaXMucm9vbS5yb29tSWQpID09PSBSb29tTm90aWZzLlJvb21Ob3RpZlN0YXRlLk11dGU7XG4gICAgICAgIGNvbnN0IGtub2NrZWQgPVxuICAgICAgICAgICAgU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZShcImZlYXR1cmVfYXNrX3RvX2pvaW5cIikgJiYgdGhpcy5yb29tLmdldE15TWVtYmVyc2hpcCgpID09PSBLbm93bk1lbWJlcnNoaXAuS25vY2s7XG4gICAgICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XG4gICAgICAgIHRoaXMuX3N5bWJvbCA9IHN5bWJvbDtcbiAgICAgICAgdGhpcy5fY291bnQgPSBjb3VudDtcbiAgICAgICAgdGhpcy5fbXV0ZWQgPSBtdXRlZDtcbiAgICAgICAgdGhpcy5fa25vY2tlZCA9IGtub2NrZWQ7XG5cbiAgICAgICAgLy8gZmluYWxseSwgcHVibGlzaCBhbiB1cGRhdGUgaWYgbmVlZGVkXG4gICAgICAgIHRoaXMuZW1pdElmVXBkYXRlZChzbmFwc2hvdCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUlBLElBQUFFLGdCQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxrQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sY0FBQSxHQUFBQyxzQkFBQSxDQUFBUixPQUFBO0FBQ0EsSUFBQVMsY0FBQSxHQUFBVCxPQUFBO0FBQW1HLFNBQUFVLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFOLHdCQUFBTSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsV0FBQUssT0FBQSxFQUFBTCxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEs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