UNPKG

matrix-react-sdk

Version:
75 lines (72 loc) 14.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useParticipatingMembers = exports.useParticipants = exports.useParticipantCount = exports.useJoinCallButtonDisabledTooltip = exports.useFull = exports.useConnectionState = exports.useCallForWidget = exports.useCall = void 0; var _react = require("react"); var _Call = require("../models/Call"); var _useEventEmitter = require("./useEventEmitter"); var _CallStore = require("../stores/CallStore"); var _SdkConfig = _interopRequireWildcard(require("../SdkConfig")); var _languageHandler = require("../languageHandler"); 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 2022 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. */ const useCall = roomId => { const [call, setCall] = (0, _react.useState)(() => _CallStore.CallStore.instance.getCall(roomId)); (0, _useEventEmitter.useEventEmitter)(_CallStore.CallStore.instance, _CallStore.CallStoreEvent.Call, (call, forRoomId) => { if (forRoomId === roomId) setCall(call); }); return call; }; exports.useCall = useCall; const useCallForWidget = (widgetId, roomId) => { const call = useCall(roomId); return call?.widget.id === widgetId ? call : null; }; exports.useCallForWidget = useCallForWidget; const useConnectionState = call => (0, _useEventEmitter.useTypedEventEmitterState)(call ?? undefined, _Call.CallEvent.ConnectionState, (0, _react.useCallback)(state => state ?? call?.connectionState ?? _Call.ConnectionState.Disconnected, [call])); exports.useConnectionState = useConnectionState; const useParticipants = call => { return (0, _useEventEmitter.useTypedEventEmitterState)(call ?? undefined, _Call.CallEvent.Participants, (0, _react.useCallback)(state => state ?? call?.participants ?? [], [call])); }; exports.useParticipants = useParticipants; const useParticipantCount = call => { const participants = useParticipants(call); return (0, _react.useMemo)(() => { let count = 0; for (const devices of participants.values()) count += devices.size; return count; }, [participants]); }; exports.useParticipantCount = useParticipantCount; const useParticipatingMembers = call => { const participants = useParticipants(call); return (0, _react.useMemo)(() => { const members = []; for (const [member, devices] of participants) { // Repeat the member for as many devices as they're using for (let i = 0; i < devices.size; i++) members.push(member); } return members; }, [participants]); }; exports.useParticipatingMembers = useParticipatingMembers; const useFull = call => { return useParticipantCount(call) >= (_SdkConfig.default.get("element_call").participant_limit ?? _SdkConfig.DEFAULTS.element_call.participant_limit); }; exports.useFull = useFull; const useJoinCallButtonDisabledTooltip = call => { const isFull = useFull(call); const state = useConnectionState(call); if (state === _Call.ConnectionState.Connecting) return (0, _languageHandler._t)("voip|join_button_tooltip_connecting"); if (isFull) return (0, _languageHandler._t)("voip|join_button_tooltip_call_full"); return null; }; exports.useJoinCallButtonDisabledTooltip = useJoinCallButtonDisabledTooltip; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX0NhbGwiLCJfdXNlRXZlbnRFbWl0dGVyIiwiX0NhbGxTdG9yZSIsIl9TZGtDb25maWciLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJ1c2VDYWxsIiwicm9vbUlkIiwic2V0Q2FsbCIsInVzZVN0YXRlIiwiQ2FsbFN0b3JlIiwiaW5zdGFuY2UiLCJnZXRDYWxsIiwidXNlRXZlbnRFbWl0dGVyIiwiQ2FsbFN0b3JlRXZlbnQiLCJDYWxsIiwiZm9yUm9vbUlkIiwiZXhwb3J0cyIsInVzZUNhbGxGb3JXaWRnZXQiLCJ3aWRnZXRJZCIsIndpZGdldCIsImlkIiwidXNlQ29ubmVjdGlvblN0YXRlIiwidXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZSIsInVuZGVmaW5lZCIsIkNhbGxFdmVudCIsIkNvbm5lY3Rpb25TdGF0ZSIsInVzZUNhbGxiYWNrIiwic3RhdGUiLCJjb25uZWN0aW9uU3RhdGUiLCJEaXNjb25uZWN0ZWQiLCJ1c2VQYXJ0aWNpcGFudHMiLCJQYXJ0aWNpcGFudHMiLCJwYXJ0aWNpcGFudHMiLCJ1c2VQYXJ0aWNpcGFudENvdW50IiwidXNlTWVtbyIsImNvdW50IiwiZGV2aWNlcyIsInZhbHVlcyIsInNpemUiLCJ1c2VQYXJ0aWNpcGF0aW5nTWVtYmVycyIsIm1lbWJlcnMiLCJtZW1iZXIiLCJwdXNoIiwidXNlRnVsbCIsIlNka0NvbmZpZyIsInBhcnRpY2lwYW50X2xpbWl0IiwiREVGQVVMVFMiLCJlbGVtZW50X2NhbGwiLCJ1c2VKb2luQ2FsbEJ1dHRvbkRpc2FibGVkVG9vbHRpcCIsImlzRnVsbCIsIkNvbm5lY3RpbmciLCJfdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDYWxsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgdHlwZSB7IFJvb21NZW1iZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBDYWxsLCBDb25uZWN0aW9uU3RhdGUsIENhbGxFdmVudCB9IGZyb20gXCIuLi9tb2RlbHMvQ2FsbFwiO1xuaW1wb3J0IHsgdXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZSwgdXNlRXZlbnRFbWl0dGVyIH0gZnJvbSBcIi4vdXNlRXZlbnRFbWl0dGVyXCI7XG5pbXBvcnQgeyBDYWxsU3RvcmUsIENhbGxTdG9yZUV2ZW50IH0gZnJvbSBcIi4uL3N0b3Jlcy9DYWxsU3RvcmVcIjtcbmltcG9ydCBTZGtDb25maWcsIHsgREVGQVVMVFMgfSBmcm9tIFwiLi4vU2RrQ29uZmlnXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi9sYW5ndWFnZUhhbmRsZXJcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGwgPSAocm9vbUlkOiBzdHJpbmcpOiBDYWxsIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgW2NhbGwsIHNldENhbGxdID0gdXNlU3RhdGUoKCkgPT4gQ2FsbFN0b3JlLmluc3RhbmNlLmdldENhbGwocm9vbUlkKSk7XG4gICAgdXNlRXZlbnRFbWl0dGVyKENhbGxTdG9yZS5pbnN0YW5jZSwgQ2FsbFN0b3JlRXZlbnQuQ2FsbCwgKGNhbGw6IENhbGwgfCBudWxsLCBmb3JSb29tSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoZm9yUm9vbUlkID09PSByb29tSWQpIHNldENhbGwoY2FsbCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNhbGw7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlQ2FsbEZvcldpZGdldCA9ICh3aWRnZXRJZDogc3RyaW5nLCByb29tSWQ6IHN0cmluZyk6IENhbGwgfCBudWxsID0+IHtcbiAgICBjb25zdCBjYWxsID0gdXNlQ2FsbChyb29tSWQpO1xuICAgIHJldHVybiBjYWxsPy53aWRnZXQuaWQgPT09IHdpZGdldElkID8gY2FsbCA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlQ29ubmVjdGlvblN0YXRlID0gKGNhbGw6IENhbGwgfCBudWxsKTogQ29ubmVjdGlvblN0YXRlID0+XG4gICAgdXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZShcbiAgICAgICAgY2FsbCA/PyB1bmRlZmluZWQsXG4gICAgICAgIENhbGxFdmVudC5Db25uZWN0aW9uU3RhdGUsXG4gICAgICAgIHVzZUNhbGxiYWNrKChzdGF0ZSkgPT4gc3RhdGUgPz8gY2FsbD8uY29ubmVjdGlvblN0YXRlID8/IENvbm5lY3Rpb25TdGF0ZS5EaXNjb25uZWN0ZWQsIFtjYWxsXSksXG4gICAgKTtcblxuZXhwb3J0IGNvbnN0IHVzZVBhcnRpY2lwYW50cyA9IChjYWxsOiBDYWxsIHwgbnVsbCk6IE1hcDxSb29tTWVtYmVyLCBTZXQ8c3RyaW5nPj4gPT4ge1xuICAgIHJldHVybiB1c2VUeXBlZEV2ZW50RW1pdHRlclN0YXRlKFxuICAgICAgICBjYWxsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgQ2FsbEV2ZW50LlBhcnRpY2lwYW50cyxcbiAgICAgICAgdXNlQ2FsbGJhY2soKHN0YXRlKSA9PiBzdGF0ZSA/PyBjYWxsPy5wYXJ0aWNpcGFudHMgPz8gW10sIFtjYWxsXSksXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VQYXJ0aWNpcGFudENvdW50ID0gKGNhbGw6IENhbGwgfCBudWxsKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBwYXJ0aWNpcGFudHMgPSB1c2VQYXJ0aWNpcGFudHMoY2FsbCk7XG5cbiAgICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgZGV2aWNlcyBvZiBwYXJ0aWNpcGFudHMudmFsdWVzKCkpIGNvdW50ICs9IGRldmljZXMuc2l6ZTtcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH0sIFtwYXJ0aWNpcGFudHNdKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VQYXJ0aWNpcGF0aW5nTWVtYmVycyA9IChjYWxsOiBDYWxsKTogUm9vbU1lbWJlcltdID0+IHtcbiAgICBjb25zdCBwYXJ0aWNpcGFudHMgPSB1c2VQYXJ0aWNpcGFudHMoY2FsbCk7XG5cbiAgICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbWJlcnM6IFJvb21NZW1iZXJbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFttZW1iZXIsIGRldmljZXNdIG9mIHBhcnRpY2lwYW50cykge1xuICAgICAgICAgICAgLy8gUmVwZWF0IHRoZSBtZW1iZXIgZm9yIGFzIG1hbnkgZGV2aWNlcyBhcyB0aGV5J3JlIHVzaW5nXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRldmljZXMuc2l6ZTsgaSsrKSBtZW1iZXJzLnB1c2gobWVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVtYmVycztcbiAgICB9LCBbcGFydGljaXBhbnRzXSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRnVsbCA9IChjYWxsOiBDYWxsIHwgbnVsbCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIHVzZVBhcnRpY2lwYW50Q291bnQoY2FsbCkgPj1cbiAgICAgICAgKFNka0NvbmZpZy5nZXQoXCJlbGVtZW50X2NhbGxcIikucGFydGljaXBhbnRfbGltaXQgPz8gREVGQVVMVFMuZWxlbWVudF9jYWxsLnBhcnRpY2lwYW50X2xpbWl0ISlcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUpvaW5DYWxsQnV0dG9uRGlzYWJsZWRUb29sdGlwID0gKGNhbGw6IENhbGwgfCBudWxsKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgaXNGdWxsID0gdXNlRnVsbChjYWxsKTtcbiAgICBjb25zdCBzdGF0ZSA9IHVzZUNvbm5lY3Rpb25TdGF0ZShjYWxsKTtcblxuICAgIGlmIChzdGF0ZSA9PT0gQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RpbmcpIHJldHVybiBfdChcInZvaXB8am9pbl9idXR0b25fdG9vbHRpcF9jb25uZWN0aW5nXCIpO1xuICAgIGlmIChpc0Z1bGwpIHJldHVybiBfdChcInZvaXB8am9pbl9idXR0b25fdG9vbHRpcF9jYWxsX2Z1bGxcIik7XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFHQSxJQUFBQyxLQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxnQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBQyx1QkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQU4sT0FBQTtBQUF3QyxTQUFBTyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBSCx3QkFBQUcsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFLLE9BQUEsRUFBQUwsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLENBQUFILE9BQUEsR0FBQUwsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFmeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBV08sTUFBTVcsT0FBTyxHQUFJQyxNQUFjLElBQWtCO0VBQ3BELE1BQU0sQ0FBQ0osSUFBSSxFQUFFSyxPQUFPLENBQUMsR0FBRyxJQUFBQyxlQUFRLEVBQUMsTUFBTUMsb0JBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxPQUFPLENBQUNMLE1BQU0sQ0FBQyxDQUFDO0VBQzFFLElBQUFNLGdDQUFlLEVBQUNILG9CQUFTLENBQUNDLFFBQVEsRUFBRUcseUJBQWMsQ0FBQ0MsSUFBSSxFQUFFLENBQUNaLElBQWlCLEVBQUVhLFNBQWlCLEtBQUs7SUFDL0YsSUFBSUEsU0FBUyxLQUFLVCxNQUFNLEVBQUVDLE9BQU8sQ0FBQ0wsSUFBSSxDQUFDO0VBQzNDLENBQUMsQ0FBQztFQUNGLE9BQU9BLElBQUk7QUFDZixDQUFDO0FBQUNjLE9BQUEsQ0FBQVgsT0FBQSxHQUFBQSxPQUFBO0FBRUssTUFBTVksZ0JBQWdCLEdBQUdBLENBQUNDLFFBQWdCLEVBQUVaLE1BQWMsS0FBa0I7RUFDL0UsTUFBTUosSUFBSSxHQUFHRyxPQUFPLENBQUNDLE1BQU0sQ0FBQztFQUM1QixPQUFPSixJQUFJLEVBQUVpQixNQUFNLENBQUNDLEVBQUUsS0FBS0YsUUFBUSxHQUFHaEIsSUFBSSxHQUFHLElBQUk7QUFDckQsQ0FBQztBQUFDYyxPQUFBLENBQUFDLGdCQUFBLEdBQUFBLGdCQUFBO0FBRUssTUFBTUksa0JBQWtCLEdBQUluQixJQUFpQixJQUNoRCxJQUFBb0IsMENBQXlCLEVBQ3JCcEIsSUFBSSxJQUFJcUIsU0FBUyxFQUNqQkMsZUFBUyxDQUFDQyxlQUFlLEVBQ3pCLElBQUFDLGtCQUFXLEVBQUVDLEtBQUssSUFBS0EsS0FBSyxJQUFJekIsSUFBSSxFQUFFMEIsZUFBZSxJQUFJSCxxQkFBZSxDQUFDSSxZQUFZLEVBQUUsQ0FBQzNCLElBQUksQ0FBQyxDQUNqRyxDQUFDO0FBQUNjLE9BQUEsQ0FBQUssa0JBQUEsR0FBQUEsa0JBQUE7QUFFQyxNQUFNUyxlQUFlLEdBQUk1QixJQUFpQixJQUFtQztFQUNoRixPQUFPLElBQUFvQiwwQ0FBeUIsRUFDNUJwQixJQUFJLElBQUlxQixTQUFTLEVBQ2pCQyxlQUFTLENBQUNPLFlBQVksRUFDdEIsSUFBQUwsa0JBQVcsRUFBRUMsS0FBSyxJQUFLQSxLQUFLLElBQUl6QixJQUFJLEVBQUU4QixZQUFZLElBQUksRUFBRSxFQUFFLENBQUM5QixJQUFJLENBQUMsQ0FDcEUsQ0FBQztBQUNMLENBQUM7QUFBQ2MsT0FBQSxDQUFBYyxlQUFBLEdBQUFBLGVBQUE7QUFFSyxNQUFNRyxtQkFBbUIsR0FBSS9CLElBQWlCLElBQWE7RUFDOUQsTUFBTThCLFlBQVksR0FBR0YsZUFBZSxDQUFDNUIsSUFBSSxDQUFDO0VBRTFDLE9BQU8sSUFBQWdDLGNBQU8sRUFBQyxNQUFNO0lBQ2pCLElBQUlDLEtBQUssR0FBRyxDQUFDO0lBQ2IsS0FBSyxNQUFNQyxPQUFPLElBQUlKLFlBQVksQ0FBQ0ssTUFBTSxDQUFDLENBQUMsRUFBRUYsS0FBSyxJQUFJQyxPQUFPLENBQUNFLElBQUk7SUFDbEUsT0FBT0gsS0FBSztFQUNoQixDQUFDLEVBQUUsQ0FBQ0gsWUFBWSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUFDaEIsT0FBQSxDQUFBaUIsbUJBQUEsR0FBQUEsbUJBQUE7QUFFSyxNQUFNTSx1QkFBdUIsR0FBSXJDLElBQVUsSUFBbUI7RUFDakUsTUFBTThCLFlBQVksR0FBR0YsZUFBZSxDQUFDNUIsSUFBSSxDQUFDO0VBRTFDLE9BQU8sSUFBQWdDLGNBQU8sRUFBQyxNQUFNO0lBQ2pCLE1BQU1NLE9BQXFCLEdBQUcsRUFBRTtJQUNoQyxLQUFLLE1BQU0sQ0FBQ0MsTUFBTSxFQUFFTCxPQUFPLENBQUMsSUFBSUosWUFBWSxFQUFFO01BQzFDO01BQ0EsS0FBSyxJQUFJN0IsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHaUMsT0FBTyxDQUFDRSxJQUFJLEVBQUVuQyxDQUFDLEVBQUUsRUFBRXFDLE9BQU8sQ0FBQ0UsSUFBSSxDQUFDRCxNQUFNLENBQUM7SUFDL0Q7SUFDQSxPQUFPRCxPQUFPO0VBQ2xCLENBQUMsRUFBRSxDQUFDUixZQUFZLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBQUNoQixPQUFBLENBQUF1Qix1QkFBQSxHQUFBQSx1QkFBQTtBQUVLLE1BQU1JLE9BQU8sR0FBSXpDLElBQWlCLElBQWM7RUFDbkQsT0FDSStCLG1CQUFtQixDQUFDL0IsSUFBSSxDQUFDLEtBQ3hCMEMsa0JBQVMsQ0FBQ25ELEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQ29ELGlCQUFpQixJQUFJQyxtQkFBUSxDQUFDQyxZQUFZLENBQUNGLGlCQUFrQixDQUFDO0FBRXJHLENBQUM7QUFBQzdCLE9BQUEsQ0FBQTJCLE9BQUEsR0FBQUEsT0FBQTtBQUVLLE1BQU1LLGdDQUFnQyxHQUFJOUMsSUFBaUIsSUFBb0I7RUFDbEYsTUFBTStDLE1BQU0sR0FBR04sT0FBTyxDQUFDekMsSUFBSSxDQUFDO0VBQzVCLE1BQU15QixLQUFLLEdBQUdOLGtCQUFrQixDQUFDbkIsSUFBSSxDQUFDO0VBRXRDLElBQUl5QixLQUFLLEtBQUtGLHFCQUFlLENBQUN5QixVQUFVLEVBQUUsT0FBTyxJQUFBQyxtQkFBRSxFQUFDLHFDQUFxQyxDQUFDO0VBQzFGLElBQUlGLE1BQU0sRUFBRSxPQUFPLElBQUFFLG1CQUFFLEVBQUMsb0NBQW9DLENBQUM7RUFDM0QsT0FBTyxJQUFJO0FBQ2YsQ0FBQztBQUFDbkMsT0FBQSxDQUFBZ0MsZ0NBQUEsR0FBQUEsZ0NBQUEiLCJpZ25vcmVMaXN0IjpbXX0=