matrix-react-sdk
Version:
SDK for matrix.org using React
82 lines (77 loc) • 14.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.monitorSyncedPushRules = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _pushprocessor = require("matrix-js-sdk/src/pushprocessor");
var _logger = require("matrix-js-sdk/src/logger");
var _notifications = require("../../notifications");
var _updatePushRuleActions = require("./updatePushRuleActions");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /*
Copyright 2024 New Vector Ltd.
Copyright 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.
*/
const pushRuleAndKindToAnnotated = ruleAndKind => ruleAndKind ? _objectSpread(_objectSpread({}, ruleAndKind.rule), {}, {
kind: ruleAndKind.kind
}) : undefined;
/**
* Checks that any synced rules that exist a given rule are in sync
* And updates any that are out of sync
* Ignores ruleIds that do not exist for the user
* @param matrixClient - cli
* @param pushProcessor - processor used to retrieve current state of rules
* @param ruleId - primary rule
* @param definition - VectorPushRuleDefinition of the primary rule
*/
const monitorSyncedRule = async (matrixClient, pushProcessor, ruleId, definition) => {
const primaryRule = pushRuleAndKindToAnnotated(pushProcessor.getPushRuleAndKindById(ruleId));
if (!primaryRule) {
return;
}
const syncedRules = definition.syncedRuleIds?.map(ruleId => pushRuleAndKindToAnnotated(pushProcessor.getPushRuleAndKindById(ruleId))).filter(n => Boolean(n));
// no synced rules to manage
if (!syncedRules?.length) {
return;
}
const primaryRuleVectorState = definition.ruleToVectorState(primaryRule);
const outOfSyncRules = syncedRules.filter(syncedRule => syncedRule.enabled !== primaryRule.enabled || definition.ruleToVectorState(syncedRule) !== primaryRuleVectorState);
if (outOfSyncRules.length) {
await (0, _updatePushRuleActions.updateExistingPushRulesWithActions)(matrixClient,
// eslint-disable-next-line camelcase, @typescript-eslint/naming-convention
outOfSyncRules.map(({
rule_id
}) => rule_id), primaryRule.enabled ? primaryRule.actions : undefined);
}
};
/**
* On changes to m.push_rules account data,
* check that synced push rules are in sync with their primary rule,
* and update any out of sync rules.
* synced rules are defined in VectorPushRulesDefinitions
* If updating a rule fails for any reason,
* the error is caught and handled silently
* @param accountDataEvent - MatrixEvent
* @param matrixClient - cli
* @returns Resolves when updates are complete
*/
const monitorSyncedPushRules = async (accountDataEvent, matrixClient) => {
if (accountDataEvent?.getType() !== _matrix.EventType.PushRules) {
return;
}
const pushProcessor = new _pushprocessor.PushProcessor(matrixClient);
Object.entries(_notifications.VectorPushRulesDefinitions).forEach(async ([ruleId, definition]) => {
try {
await monitorSyncedRule(matrixClient, pushProcessor, ruleId, definition);
} catch (error) {
_logger.logger.error(`Failed to fully synchronise push rules for ${ruleId}`, error);
}
});
};
exports.monitorSyncedPushRules = monitorSyncedPushRules;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9wdXNocHJvY2Vzc29yIiwiX2xvZ2dlciIsIl9ub3RpZmljYXRpb25zIiwiX3VwZGF0ZVB1c2hSdWxlQWN0aW9ucyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsInB1c2hSdWxlQW5kS2luZFRvQW5ub3RhdGVkIiwicnVsZUFuZEtpbmQiLCJydWxlIiwia2luZCIsInVuZGVmaW5lZCIsIm1vbml0b3JTeW5jZWRSdWxlIiwibWF0cml4Q2xpZW50IiwicHVzaFByb2Nlc3NvciIsInJ1bGVJZCIsImRlZmluaXRpb24iLCJwcmltYXJ5UnVsZSIsImdldFB1c2hSdWxlQW5kS2luZEJ5SWQiLCJzeW5jZWRSdWxlcyIsInN5bmNlZFJ1bGVJZHMiLCJtYXAiLCJuIiwiQm9vbGVhbiIsInByaW1hcnlSdWxlVmVjdG9yU3RhdGUiLCJydWxlVG9WZWN0b3JTdGF0ZSIsIm91dE9mU3luY1J1bGVzIiwic3luY2VkUnVsZSIsImVuYWJsZWQiLCJ1cGRhdGVFeGlzdGluZ1B1c2hSdWxlc1dpdGhBY3Rpb25zIiwicnVsZV9pZCIsImFjdGlvbnMiLCJtb25pdG9yU3luY2VkUHVzaFJ1bGVzIiwiYWNjb3VudERhdGFFdmVudCIsImdldFR5cGUiLCJFdmVudFR5cGUiLCJQdXNoUnVsZXMiLCJQdXNoUHJvY2Vzc29yIiwiZW50cmllcyIsIlZlY3RvclB1c2hSdWxlc0RlZmluaXRpb25zIiwiZXJyb3IiLCJsb2dnZXIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3B1c2hSdWxlcy9tb25pdG9yU3luY2VkUHVzaFJ1bGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IE1hdHJpeENsaWVudCwgTWF0cml4RXZlbnQsIEV2ZW50VHlwZSwgUnVsZUlkLCBJQW5ub3RhdGVkUHVzaFJ1bGUgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBQdXNoUHJvY2Vzc29yIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL3B1c2hwcm9jZXNzb3JcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcblxuaW1wb3J0IHsgVmVjdG9yUHVzaFJ1bGVzRGVmaW5pdGlvbnMsIFZlY3RvclB1c2hSdWxlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi9ub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyB1cGRhdGVFeGlzdGluZ1B1c2hSdWxlc1dpdGhBY3Rpb25zIH0gZnJvbSBcIi4vdXBkYXRlUHVzaFJ1bGVBY3Rpb25zXCI7XG5cbmNvbnN0IHB1c2hSdWxlQW5kS2luZFRvQW5ub3RhdGVkID0gKFxuICAgIHJ1bGVBbmRLaW5kOiBSZXR1cm5UeXBlPFB1c2hQcm9jZXNzb3JbXCJnZXRQdXNoUnVsZUFuZEtpbmRCeUlkXCJdPixcbik6IElBbm5vdGF0ZWRQdXNoUnVsZSB8IHVuZGVmaW5lZCA9PlxuICAgIHJ1bGVBbmRLaW5kXG4gICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5ydWxlQW5kS2luZC5ydWxlLFxuICAgICAgICAgICAgICBraW5kOiBydWxlQW5kS2luZC5raW5kLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgYW55IHN5bmNlZCBydWxlcyB0aGF0IGV4aXN0IGEgZ2l2ZW4gcnVsZSBhcmUgaW4gc3luY1xuICogQW5kIHVwZGF0ZXMgYW55IHRoYXQgYXJlIG91dCBvZiBzeW5jXG4gKiBJZ25vcmVzIHJ1bGVJZHMgdGhhdCBkbyBub3QgZXhpc3QgZm9yIHRoZSB1c2VyXG4gKiBAcGFyYW0gbWF0cml4Q2xpZW50IC0gY2xpXG4gKiBAcGFyYW0gcHVzaFByb2Nlc3NvciAtIHByb2Nlc3NvciB1c2VkIHRvIHJldHJpZXZlIGN1cnJlbnQgc3RhdGUgb2YgcnVsZXNcbiAqIEBwYXJhbSBydWxlSWQgLSBwcmltYXJ5IHJ1bGVcbiAqIEBwYXJhbSBkZWZpbml0aW9uIC0gVmVjdG9yUHVzaFJ1bGVEZWZpbml0aW9uIG9mIHRoZSBwcmltYXJ5IHJ1bGVcbiAqL1xuY29uc3QgbW9uaXRvclN5bmNlZFJ1bGUgPSBhc3luYyAoXG4gICAgbWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnQsXG4gICAgcHVzaFByb2Nlc3NvcjogUHVzaFByb2Nlc3NvcixcbiAgICBydWxlSWQ6IFJ1bGVJZCB8IHN0cmluZyxcbiAgICBkZWZpbml0aW9uOiBWZWN0b3JQdXNoUnVsZURlZmluaXRpb24sXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBwcmltYXJ5UnVsZSA9IHB1c2hSdWxlQW5kS2luZFRvQW5ub3RhdGVkKHB1c2hQcm9jZXNzb3IuZ2V0UHVzaFJ1bGVBbmRLaW5kQnlJZChydWxlSWQpKTtcblxuICAgIGlmICghcHJpbWFyeVJ1bGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzeW5jZWRSdWxlczogSUFubm90YXRlZFB1c2hSdWxlW10gfCB1bmRlZmluZWQgPSBkZWZpbml0aW9uLnN5bmNlZFJ1bGVJZHNcbiAgICAgICAgPy5tYXAoKHJ1bGVJZCkgPT4gcHVzaFJ1bGVBbmRLaW5kVG9Bbm5vdGF0ZWQocHVzaFByb2Nlc3Nvci5nZXRQdXNoUnVsZUFuZEtpbmRCeUlkKHJ1bGVJZCkpKVxuICAgICAgICAuZmlsdGVyKChuPzogSUFubm90YXRlZFB1c2hSdWxlKTogbiBpcyBJQW5ub3RhdGVkUHVzaFJ1bGUgPT4gQm9vbGVhbihuKSk7XG5cbiAgICAvLyBubyBzeW5jZWQgcnVsZXMgdG8gbWFuYWdlXG4gICAgaWYgKCFzeW5jZWRSdWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmltYXJ5UnVsZVZlY3RvclN0YXRlID0gZGVmaW5pdGlvbi5ydWxlVG9WZWN0b3JTdGF0ZShwcmltYXJ5UnVsZSk7XG5cbiAgICBjb25zdCBvdXRPZlN5bmNSdWxlcyA9IHN5bmNlZFJ1bGVzLmZpbHRlcihcbiAgICAgICAgKHN5bmNlZFJ1bGUpID0+XG4gICAgICAgICAgICBzeW5jZWRSdWxlLmVuYWJsZWQgIT09IHByaW1hcnlSdWxlLmVuYWJsZWQgfHxcbiAgICAgICAgICAgIGRlZmluaXRpb24ucnVsZVRvVmVjdG9yU3RhdGUoc3luY2VkUnVsZSkgIT09IHByaW1hcnlSdWxlVmVjdG9yU3RhdGUsXG4gICAgKTtcblxuICAgIGlmIChvdXRPZlN5bmNSdWxlcy5sZW5ndGgpIHtcbiAgICAgICAgYXdhaXQgdXBkYXRlRXhpc3RpbmdQdXNoUnVsZXNXaXRoQWN0aW9ucyhcbiAgICAgICAgICAgIG1hdHJpeENsaWVudCxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UsIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgICAgICAgb3V0T2ZTeW5jUnVsZXMubWFwKCh7IHJ1bGVfaWQgfSkgPT4gcnVsZV9pZCksXG4gICAgICAgICAgICBwcmltYXJ5UnVsZS5lbmFibGVkID8gcHJpbWFyeVJ1bGUuYWN0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIE9uIGNoYW5nZXMgdG8gbS5wdXNoX3J1bGVzIGFjY291bnQgZGF0YSxcbiAqIGNoZWNrIHRoYXQgc3luY2VkIHB1c2ggcnVsZXMgYXJlIGluIHN5bmMgd2l0aCB0aGVpciBwcmltYXJ5IHJ1bGUsXG4gKiBhbmQgdXBkYXRlIGFueSBvdXQgb2Ygc3luYyBydWxlcy5cbiAqIHN5bmNlZCBydWxlcyBhcmUgZGVmaW5lZCBpbiBWZWN0b3JQdXNoUnVsZXNEZWZpbml0aW9uc1xuICogSWYgdXBkYXRpbmcgYSBydWxlIGZhaWxzIGZvciBhbnkgcmVhc29uLFxuICogdGhlIGVycm9yIGlzIGNhdWdodCBhbmQgaGFuZGxlZCBzaWxlbnRseVxuICogQHBhcmFtIGFjY291bnREYXRhRXZlbnQgLSBNYXRyaXhFdmVudFxuICogQHBhcmFtIG1hdHJpeENsaWVudCAtIGNsaVxuICogQHJldHVybnMgUmVzb2x2ZXMgd2hlbiB1cGRhdGVzIGFyZSBjb21wbGV0ZVxuICovXG5leHBvcnQgY29uc3QgbW9uaXRvclN5bmNlZFB1c2hSdWxlcyA9IGFzeW5jIChcbiAgICBhY2NvdW50RGF0YUV2ZW50OiBNYXRyaXhFdmVudCB8IHVuZGVmaW5lZCxcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChhY2NvdW50RGF0YUV2ZW50Py5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5QdXNoUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwdXNoUHJvY2Vzc29yID0gbmV3IFB1c2hQcm9jZXNzb3IobWF0cml4Q2xpZW50KTtcblxuICAgIE9iamVjdC5lbnRyaWVzKFZlY3RvclB1c2hSdWxlc0RlZmluaXRpb25zKS5mb3JFYWNoKGFzeW5jIChbcnVsZUlkLCBkZWZpbml0aW9uXSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgbW9uaXRvclN5bmNlZFJ1bGUobWF0cml4Q2xpZW50LCBwdXNoUHJvY2Vzc29yLCBydWxlSWQsIGRlZmluaXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZnVsbHkgc3luY2hyb25pc2UgcHVzaCBydWxlcyBmb3IgJHtydWxlSWR9YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLGNBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHNCQUFBLEdBQUFKLE9BQUE7QUFBNkUsU0FBQUssUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxDQUFBQyxPQUFBLEVBQUFqQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWUseUJBQUEsR0FBQWYsTUFBQSxDQUFBZ0IsZ0JBQUEsQ0FBQW5CLENBQUEsRUFBQUcsTUFBQSxDQUFBZSx5QkFBQSxDQUFBaEIsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBaUIsY0FBQSxDQUFBcEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBLElBYjdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0EsTUFBTXFCLDBCQUEwQixHQUM1QkMsV0FBZ0UsSUFFaEVBLFdBQVcsR0FBQVYsYUFBQSxDQUFBQSxhQUFBLEtBRUVVLFdBQVcsQ0FBQ0MsSUFBSTtFQUNuQkMsSUFBSSxFQUFFRixXQUFXLENBQUNFO0FBQUksS0FFMUJDLFNBQVM7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLE1BQUFBLENBQ3RCQyxZQUEwQixFQUMxQkMsYUFBNEIsRUFDNUJDLE1BQXVCLEVBQ3ZCQyxVQUFvQyxLQUNwQjtFQUNoQixNQUFNQyxXQUFXLEdBQUdWLDBCQUEwQixDQUFDTyxhQUFhLENBQUNJLHNCQUFzQixDQUFDSCxNQUFNLENBQUMsQ0FBQztFQUU1RixJQUFJLENBQUNFLFdBQVcsRUFBRTtJQUNkO0VBQ0o7RUFDQSxNQUFNRSxXQUE2QyxHQUFHSCxVQUFVLENBQUNJLGFBQWEsRUFDeEVDLEdBQUcsQ0FBRU4sTUFBTSxJQUFLUiwwQkFBMEIsQ0FBQ08sYUFBYSxDQUFDSSxzQkFBc0IsQ0FBQ0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUMxRnRCLE1BQU0sQ0FBRTZCLENBQXNCLElBQThCQyxPQUFPLENBQUNELENBQUMsQ0FBQyxDQUFDOztFQUU1RTtFQUNBLElBQUksQ0FBQ0gsV0FBVyxFQUFFbkIsTUFBTSxFQUFFO0lBQ3RCO0VBQ0o7RUFFQSxNQUFNd0Isc0JBQXNCLEdBQUdSLFVBQVUsQ0FBQ1MsaUJBQWlCLENBQUNSLFdBQVcsQ0FBQztFQUV4RSxNQUFNUyxjQUFjLEdBQUdQLFdBQVcsQ0FBQzFCLE1BQU0sQ0FDcENrQyxVQUFVLElBQ1BBLFVBQVUsQ0FBQ0MsT0FBTyxLQUFLWCxXQUFXLENBQUNXLE9BQU8sSUFDMUNaLFVBQVUsQ0FBQ1MsaUJBQWlCLENBQUNFLFVBQVUsQ0FBQyxLQUFLSCxzQkFDckQsQ0FBQztFQUVELElBQUlFLGNBQWMsQ0FBQzFCLE1BQU0sRUFBRTtJQUN2QixNQUFNLElBQUE2Qix5REFBa0MsRUFDcENoQixZQUFZO0lBQ1o7SUFDQWEsY0FBYyxDQUFDTCxHQUFHLENBQUMsQ0FBQztNQUFFUztJQUFRLENBQUMsS0FBS0EsT0FBTyxDQUFDLEVBQzVDYixXQUFXLENBQUNXLE9BQU8sR0FBR1gsV0FBVyxDQUFDYyxPQUFPLEdBQUdwQixTQUNoRCxDQUFDO0VBQ0w7QUFDSixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNcUIsc0JBQXNCLEdBQUcsTUFBQUEsQ0FDbENDLGdCQUF5QyxFQUN6Q3BCLFlBQTBCLEtBQ1Y7RUFDaEIsSUFBSW9CLGdCQUFnQixFQUFFQyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxpQkFBUyxDQUFDQyxTQUFTLEVBQUU7SUFDckQ7RUFDSjtFQUNBLE1BQU10QixhQUFhLEdBQUcsSUFBSXVCLDRCQUFhLENBQUN4QixZQUFZLENBQUM7RUFFckR4QixNQUFNLENBQUNpRCxPQUFPLENBQUNDLHlDQUEwQixDQUFDLENBQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDYyxNQUFNLEVBQUVDLFVBQVUsQ0FBQyxLQUFLO0lBQy9FLElBQUk7TUFDQSxNQUFNSixpQkFBaUIsQ0FBQ0MsWUFBWSxFQUFFQyxhQUFhLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxDQUFDO0lBQzVFLENBQUMsQ0FBQyxPQUFPd0IsS0FBSyxFQUFFO01BQ1pDLGNBQU0sQ0FBQ0QsS0FBSyxDQUFDLDhDQUE4Q3pCLE1BQU0sRUFBRSxFQUFFeUIsS0FBSyxDQUFDO0lBQy9FO0VBQ0osQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUFDRSxPQUFBLENBQUFWLHNCQUFBLEdBQUFBLHNCQUFBIiwiaWdub3JlTGlzdCI6W119