UNPKG

matrix-react-sdk

Version:
131 lines (127 loc) 19.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.LocationBodyFallbackContent = exports.LocationBodyContent = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _randomstring = require("matrix-js-sdk/src/randomstring"); var _compoundWeb = require("@vector-im/compound-web"); var _languageHandler = require("../../../languageHandler"); var _Modal = _interopRequireDefault(require("../../../Modal")); var _location = require("../../../utils/location"); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _location2 = require("../location"); var _connection = require("../../../utils/connection"); /* Copyright 2024 New Vector Ltd. Copyright 2021 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 MLocationBody extends _react.default.Component { constructor(props, context) { super(props, context); // multiple instances of same map might be in document // eg thread and main timeline, reply (0, _defineProperty2.default)(this, "unmounted", false); (0, _defineProperty2.default)(this, "mapId", void 0); (0, _defineProperty2.default)(this, "reconnectedListener", void 0); (0, _defineProperty2.default)(this, "onClick", () => { _Modal.default.createDialog(_location2.LocationViewDialog, { matrixClient: this.context, mxEvent: this.props.mxEvent }, "mx_LocationViewDialog_wrapper", false, // isPriority true // isStatic ); }); (0, _defineProperty2.default)(this, "clearError", () => { this.context.off(_matrix.ClientEvent.Sync, this.reconnectedListener); this.setState({ error: undefined }); }); (0, _defineProperty2.default)(this, "onError", error => { if (this.unmounted) return; this.setState({ error }); // Unregister first in case we already had it registered this.context.off(_matrix.ClientEvent.Sync, this.reconnectedListener); this.context.on(_matrix.ClientEvent.Sync, this.reconnectedListener); }); const idSuffix = `${props.mxEvent.getId()}_${(0, _randomstring.randomString)(8)}`; this.mapId = `mx_MLocationBody_${idSuffix}`; this.reconnectedListener = (0, _connection.createReconnectedListener)(this.clearError); this.state = {}; } componentWillUnmount() { this.unmounted = true; this.context.off(_matrix.ClientEvent.Sync, this.reconnectedListener); } render() { return this.state.error ? /*#__PURE__*/_react.default.createElement(LocationBodyFallbackContent, { error: this.state.error, event: this.props.mxEvent }) : /*#__PURE__*/_react.default.createElement(LocationBodyContent, { mxEvent: this.props.mxEvent, mapId: this.mapId, onError: this.onError, tooltip: (0, _languageHandler._t)("location_sharing|expand_map"), onClick: this.onClick }); } } exports.default = MLocationBody; (0, _defineProperty2.default)(MLocationBody, "contextType", _MatrixClientContext.default); const LocationBodyFallbackContent = ({ error, event }) => { const errorType = error?.message; const message = `${(0, _languageHandler._t)("location_sharing|failed_load_map")}: ${(0, _location.getLocationShareErrorMessage)(errorType)}`; const locationFallback = (0, _location.isSelfLocation)(event.getContent()) ? (0, _languageHandler._t)("timeline|m.location|self_location") + event.getContent()?.body : (0, _languageHandler._t)("timeline|m.location|location") + event.getContent()?.body; return /*#__PURE__*/_react.default.createElement("div", { className: "mx_EventTile_body mx_MLocationBody" }, /*#__PURE__*/_react.default.createElement("span", { className: errorType !== _location.LocationShareError.MapStyleUrlNotConfigured ? "mx_EventTile_tileError" : "" }, message), /*#__PURE__*/_react.default.createElement("br", null), locationFallback); }; exports.LocationBodyFallbackContent = LocationBodyFallbackContent; const LocationBodyContent = ({ mxEvent, mapId, tooltip, onError, onClick }) => { // only pass member to marker when should render avatar marker const markerRoomMember = (0, _location.isSelfLocation)(mxEvent.getContent()) ? mxEvent.sender : undefined; const geoUri = (0, _location.locationEventGeoUri)(mxEvent); const mapElement = /*#__PURE__*/_react.default.createElement(_location2.Map, { id: mapId, centerGeoUri: geoUri, onClick: onClick, onError: onError, className: "mx_MLocationBody_map" }, ({ map }) => /*#__PURE__*/_react.default.createElement(_location2.SmartMarker, { map: map, id: `${mapId}-marker`, geoUri: geoUri, roomMember: markerRoomMember ?? undefined })); return /*#__PURE__*/_react.default.createElement("div", { className: "mx_MLocationBody" }, /*#__PURE__*/_react.default.createElement(_compoundWeb.Tooltip, { label: tooltip }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_MLocationBody_map" }, mapElement))); }; exports.LocationBodyContent = LocationBodyContent; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9tYXRyaXgiLCJfcmFuZG9tc3RyaW5nIiwiX2NvbXBvdW5kV2ViIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9Nb2RhbCIsIl9sb2NhdGlvbiIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX2xvY2F0aW9uMiIsIl9jb25uZWN0aW9uIiwiTUxvY2F0aW9uQm9keSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImNvbnRleHQiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nIiwiTG9jYXRpb25WaWV3RGlhbG9nIiwibWF0cml4Q2xpZW50IiwibXhFdmVudCIsIm9mZiIsIkNsaWVudEV2ZW50IiwiU3luYyIsInJlY29ubmVjdGVkTGlzdGVuZXIiLCJzZXRTdGF0ZSIsImVycm9yIiwidW5kZWZpbmVkIiwidW5tb3VudGVkIiwib24iLCJpZFN1ZmZpeCIsImdldElkIiwicmFuZG9tU3RyaW5nIiwibWFwSWQiLCJjcmVhdGVSZWNvbm5lY3RlZExpc3RlbmVyIiwiY2xlYXJFcnJvciIsInN0YXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiTG9jYXRpb25Cb2R5RmFsbGJhY2tDb250ZW50IiwiZXZlbnQiLCJMb2NhdGlvbkJvZHlDb250ZW50Iiwib25FcnJvciIsInRvb2x0aXAiLCJfdCIsIm9uQ2xpY2siLCJleHBvcnRzIiwiTWF0cml4Q2xpZW50Q29udGV4dCIsImVycm9yVHlwZSIsIm1lc3NhZ2UiLCJnZXRMb2NhdGlvblNoYXJlRXJyb3JNZXNzYWdlIiwibG9jYXRpb25GYWxsYmFjayIsImlzU2VsZkxvY2F0aW9uIiwiZ2V0Q29udGVudCIsImJvZHkiLCJjbGFzc05hbWUiLCJMb2NhdGlvblNoYXJlRXJyb3IiLCJNYXBTdHlsZVVybE5vdENvbmZpZ3VyZWQiLCJtYXJrZXJSb29tTWVtYmVyIiwic2VuZGVyIiwiZ2VvVXJpIiwibG9jYXRpb25FdmVudEdlb1VyaSIsIm1hcEVsZW1lbnQiLCJNYXAiLCJpZCIsImNlbnRlckdlb1VyaSIsIm1hcCIsIlNtYXJ0TWFya2VyIiwicm9vbU1lbWJlciIsIlRvb2x0aXAiLCJsYWJlbCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL21lc3NhZ2VzL01Mb2NhdGlvbkJvZHkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE1hdHJpeEV2ZW50LCBDbGllbnRFdmVudCwgQ2xpZW50RXZlbnRIYW5kbGVyTWFwIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL3JhbmRvbXN0cmluZ1wiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vLi4vTW9kYWxcIjtcbmltcG9ydCB7XG4gICAgbG9jYXRpb25FdmVudEdlb1VyaSxcbiAgICBnZXRMb2NhdGlvblNoYXJlRXJyb3JNZXNzYWdlLFxuICAgIExvY2F0aW9uU2hhcmVFcnJvcixcbiAgICBpc1NlbGZMb2NhdGlvbixcbn0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvY2F0aW9uXCI7XG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgU21hcnRNYXJrZXIsIE1hcCwgTG9jYXRpb25WaWV3RGlhbG9nIH0gZnJvbSBcIi4uL2xvY2F0aW9uXCI7XG5pbXBvcnQgeyBJQm9keVByb3BzIH0gZnJvbSBcIi4vSUJvZHlQcm9wc1wiO1xuaW1wb3J0IHsgY3JlYXRlUmVjb25uZWN0ZWRMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9jb25uZWN0aW9uXCI7XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIGVycm9yPzogRXJyb3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1Mb2NhdGlvbkJvZHkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUJvZHlQcm9wcywgSVN0YXRlPiB7XG4gICAgcHVibGljIHN0YXRpYyBjb250ZXh0VHlwZSA9IE1hdHJpeENsaWVudENvbnRleHQ7XG4gICAgcHVibGljIGRlY2xhcmUgY29udGV4dDogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE1hdHJpeENsaWVudENvbnRleHQ+O1xuXG4gICAgcHJpdmF0ZSB1bm1vdW50ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIG1hcElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWNvbm5lY3RlZExpc3RlbmVyOiBDbGllbnRFdmVudEhhbmRsZXJNYXBbQ2xpZW50RXZlbnQuU3luY107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IElCb2R5UHJvcHMsIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNYXRyaXhDbGllbnRDb250ZXh0Pikge1xuICAgICAgICBzdXBlcihwcm9wcywgY29udGV4dCk7XG5cbiAgICAgICAgLy8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHNhbWUgbWFwIG1pZ2h0IGJlIGluIGRvY3VtZW50XG4gICAgICAgIC8vIGVnIHRocmVhZCBhbmQgbWFpbiB0aW1lbGluZSwgcmVwbHlcbiAgICAgICAgY29uc3QgaWRTdWZmaXggPSBgJHtwcm9wcy5teEV2ZW50LmdldElkKCl9XyR7cmFuZG9tU3RyaW5nKDgpfWA7XG4gICAgICAgIHRoaXMubWFwSWQgPSBgbXhfTUxvY2F0aW9uQm9keV8ke2lkU3VmZml4fWA7XG5cbiAgICAgICAgdGhpcy5yZWNvbm5lY3RlZExpc3RlbmVyID0gY3JlYXRlUmVjb25uZWN0ZWRMaXN0ZW5lcih0aGlzLmNsZWFyRXJyb3IpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhcbiAgICAgICAgICAgIExvY2F0aW9uVmlld0RpYWxvZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhDbGllbnQ6IHRoaXMuY29udGV4dCxcbiAgICAgICAgICAgICAgICBteEV2ZW50OiB0aGlzLnByb3BzLm14RXZlbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJteF9Mb2NhdGlvblZpZXdEaWFsb2dfd3JhcHBlclwiLFxuICAgICAgICAgICAgZmFsc2UsIC8vIGlzUHJpb3JpdHlcbiAgICAgICAgICAgIHRydWUsIC8vIGlzU3RhdGljXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY2xlYXJFcnJvciA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9mZihDbGllbnRFdmVudC5TeW5jLCB0aGlzLnJlY29ubmVjdGVkTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IHVuZGVmaW5lZCB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkVycm9yID0gKGVycm9yOiBFcnJvcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy51bm1vdW50ZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yIH0pO1xuICAgICAgICAvLyBVbnJlZ2lzdGVyIGZpcnN0IGluIGNhc2Ugd2UgYWxyZWFkeSBoYWQgaXQgcmVnaXN0ZXJlZFxuICAgICAgICB0aGlzLmNvbnRleHQub2ZmKENsaWVudEV2ZW50LlN5bmMsIHRoaXMucmVjb25uZWN0ZWRMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuY29udGV4dC5vbihDbGllbnRFdmVudC5TeW5jLCB0aGlzLnJlY29ubmVjdGVkTGlzdGVuZXIpO1xuICAgIH07XG5cbiAgICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9mZihDbGllbnRFdmVudC5TeW5jLCB0aGlzLnJlY29ubmVjdGVkTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3RFbGVtZW50PEhUTUxEaXZFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmVycm9yID8gKFxuICAgICAgICAgICAgPExvY2F0aW9uQm9keUZhbGxiYWNrQ29udGVudCBlcnJvcj17dGhpcy5zdGF0ZS5lcnJvcn0gZXZlbnQ9e3RoaXMucHJvcHMubXhFdmVudH0gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxMb2NhdGlvbkJvZHlDb250ZW50XG4gICAgICAgICAgICAgICAgbXhFdmVudD17dGhpcy5wcm9wcy5teEV2ZW50fVxuICAgICAgICAgICAgICAgIG1hcElkPXt0aGlzLm1hcElkfVxuICAgICAgICAgICAgICAgIG9uRXJyb3I9e3RoaXMub25FcnJvcn1cbiAgICAgICAgICAgICAgICB0b29sdGlwPXtfdChcImxvY2F0aW9uX3NoYXJpbmd8ZXhwYW5kX21hcFwiKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IExvY2F0aW9uQm9keUZhbGxiYWNrQ29udGVudDogUmVhY3QuRkM8eyBldmVudDogTWF0cml4RXZlbnQ7IGVycm9yOiBFcnJvciB9PiA9ICh7IGVycm9yLCBldmVudCB9KSA9PiB7XG4gICAgY29uc3QgZXJyb3JUeXBlID0gZXJyb3I/Lm1lc3NhZ2UgYXMgTG9jYXRpb25TaGFyZUVycm9yO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtfdChcImxvY2F0aW9uX3NoYXJpbmd8ZmFpbGVkX2xvYWRfbWFwXCIpfTogJHtnZXRMb2NhdGlvblNoYXJlRXJyb3JNZXNzYWdlKGVycm9yVHlwZSl9YDtcblxuICAgIGNvbnN0IGxvY2F0aW9uRmFsbGJhY2sgPSBpc1NlbGZMb2NhdGlvbihldmVudC5nZXRDb250ZW50KCkpXG4gICAgICAgID8gX3QoXCJ0aW1lbGluZXxtLmxvY2F0aW9ufHNlbGZfbG9jYXRpb25cIikgKyBldmVudC5nZXRDb250ZW50KCk/LmJvZHlcbiAgICAgICAgOiBfdChcInRpbWVsaW5lfG0ubG9jYXRpb258bG9jYXRpb25cIikgKyBldmVudC5nZXRDb250ZW50KCk/LmJvZHk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0V2ZW50VGlsZV9ib2R5IG14X01Mb2NhdGlvbkJvZHlcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17ZXJyb3JUeXBlICE9PSBMb2NhdGlvblNoYXJlRXJyb3IuTWFwU3R5bGVVcmxOb3RDb25maWd1cmVkID8gXCJteF9FdmVudFRpbGVfdGlsZUVycm9yXCIgOiBcIlwifT5cbiAgICAgICAgICAgICAgICB7bWVzc2FnZX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAge2xvY2F0aW9uRmFsbGJhY2t9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuXG5pbnRlcmZhY2UgTG9jYXRpb25Cb2R5Q29udGVudFByb3BzIHtcbiAgICBteEV2ZW50OiBNYXRyaXhFdmVudDtcbiAgICBtYXBJZDogc3RyaW5nO1xuICAgIHRvb2x0aXA6IHN0cmluZztcbiAgICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICAgIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufVxuZXhwb3J0IGNvbnN0IExvY2F0aW9uQm9keUNvbnRlbnQ6IFJlYWN0LkZDPExvY2F0aW9uQm9keUNvbnRlbnRQcm9wcz4gPSAoe1xuICAgIG14RXZlbnQsXG4gICAgbWFwSWQsXG4gICAgdG9vbHRpcCxcbiAgICBvbkVycm9yLFxuICAgIG9uQ2xpY2ssXG59KSA9PiB7XG4gICAgLy8gb25seSBwYXNzIG1lbWJlciB0byBtYXJrZXIgd2hlbiBzaG91bGQgcmVuZGVyIGF2YXRhciBtYXJrZXJcbiAgICBjb25zdCBtYXJrZXJSb29tTWVtYmVyID0gaXNTZWxmTG9jYXRpb24obXhFdmVudC5nZXRDb250ZW50KCkpID8gbXhFdmVudC5zZW5kZXIgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZ2VvVXJpID0gbG9jYXRpb25FdmVudEdlb1VyaShteEV2ZW50KTtcblxuICAgIGNvbnN0IG1hcEVsZW1lbnQgPSAoXG4gICAgICAgIDxNYXAgaWQ9e21hcElkfSBjZW50ZXJHZW9Vcmk9e2dlb1VyaX0gb25DbGljaz17b25DbGlja30gb25FcnJvcj17b25FcnJvcn0gY2xhc3NOYW1lPVwibXhfTUxvY2F0aW9uQm9keV9tYXBcIj5cbiAgICAgICAgICAgIHsoeyBtYXAgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxTbWFydE1hcmtlclxuICAgICAgICAgICAgICAgICAgICBtYXA9e21hcH1cbiAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake21hcElkfS1tYXJrZXJgfVxuICAgICAgICAgICAgICAgICAgICBnZW9Vcmk9e2dlb1VyaX1cbiAgICAgICAgICAgICAgICAgICAgcm9vbU1lbWJlcj17bWFya2VyUm9vbU1lbWJlciA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvTWFwPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01Mb2NhdGlvbkJvZHlcIj5cbiAgICAgICAgICAgIDxUb29sdGlwIGxhYmVsPXt0b29sdGlwfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01Mb2NhdGlvbkJvZHlfbWFwXCI+e21hcEVsZW1lbnR9PC9kaXY+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFNQSxJQUFBTyxvQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBUixPQUFBO0FBRUEsSUFBQVMsV0FBQSxHQUFBVCxPQUFBO0FBeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQXdCZSxNQUFNVSxhQUFhLFNBQVNDLGNBQUssQ0FBQ0MsU0FBUyxDQUFxQjtFQVFwRUMsV0FBV0EsQ0FBQ0MsS0FBaUIsRUFBRUMsT0FBc0QsRUFBRTtJQUMxRixLQUFLLENBQUNELEtBQUssRUFBRUMsT0FBTyxDQUFDOztJQUVyQjtJQUNBO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSxxQkFSZ0IsS0FBSztJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUE7SUFBQSxJQUFBRCxnQkFBQSxDQUFBQyxPQUFBO0lBQUEsSUFBQUQsZ0JB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