matrix-react-sdk
Version:
SDK for matrix.org using React
168 lines (165 loc) • 30.9 kB
JavaScript
"use strict";
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 = _interopRequireWildcard(require("react"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _languageHandler = require("../../../languageHandler");
var _QRCode = _interopRequireDefault(require("../elements/QRCode"));
var _Permalinks = require("../../../utils/permalinks/Permalinks");
var _strings = require("../../../utils/strings");
var _StyledCheckbox = _interopRequireDefault(require("../elements/StyledCheckbox"));
var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore"));
var _UIFeature = require("../../../settings/UIFeature");
var _BaseDialog = _interopRequireDefault(require("./BaseDialog"));
var _CopyableText = _interopRequireDefault(require("../elements/CopyableText"));
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 The Matrix.org Foundation C.I.C.
Copyright 2018 New Vector Ltd
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
const socials = [{
name: "Facebook",
img: require("../../../../res/img/social/facebook.png"),
url: url => `https://www.facebook.com/sharer/sharer.php?u=${url}`
}, {
name: "Twitter",
img: require("../../../../res/img/social/twitter-2.png"),
url: url => `https://twitter.com/home?status=${url}`
},
/* // icon missing
name: 'Google Plus',
img: 'img/social/',
url: (url) => `https://plus.google.com/share?url=${url}`,
},*/
{
name: "LinkedIn",
img: require("../../../../res/img/social/linkedin.png"),
url: url => `https://www.linkedin.com/shareArticle?mini=true&url=${url}`
}, {
name: "Reddit",
img: require("../../../../res/img/social/reddit.png"),
url: url => `https://www.reddit.com/submit?url=${url}`
}, {
name: "email",
img: require("../../../../res/img/social/email-1.png"),
url: url => `mailto:?body=${url}`
}];
class ShareDialog extends React.PureComponent {
constructor(props) {
super(props);
(0, _defineProperty2.default)(this, "onLinkSpecificEventCheckboxClick", () => {
this.setState({
linkSpecificEvent: !this.state.linkSpecificEvent
});
});
let permalinkCreator = null;
if (props.target instanceof _matrix.Room) {
permalinkCreator = new _Permalinks.RoomPermalinkCreator(props.target);
permalinkCreator.load();
}
this.state = {
// MatrixEvent defaults to share linkSpecificEvent
linkSpecificEvent: this.props.target instanceof _matrix.MatrixEvent,
permalinkCreator
};
}
static onLinkClick(e) {
e.preventDefault();
(0, _strings.selectText)(e.currentTarget);
}
getUrl() {
if (this.props.target instanceof URL) {
return this.props.target.toString();
} else if (this.props.target instanceof _matrix.Room) {
if (this.state.linkSpecificEvent) {
const events = this.props.target.getLiveTimeline().getEvents();
return this.state.permalinkCreator.forEvent(events[events.length - 1].getId());
} else {
return this.state.permalinkCreator.forShareableRoom();
}
} else if (this.props.target instanceof _matrix.User || this.props.target instanceof _matrix.RoomMember) {
return (0, _Permalinks.makeUserPermalink)(this.props.target.userId);
} else if (this.state.linkSpecificEvent) {
return this.props.permalinkCreator.forEvent(this.props.target.getId());
} else {
return this.props.permalinkCreator.forShareableRoom();
}
}
render() {
let title;
let checkbox;
if (this.props.target instanceof URL) {
title = this.props.customTitle ?? (0, _languageHandler._t)("share|title_link");
} else if (this.props.target instanceof _matrix.Room) {
title = this.props.customTitle ?? (0, _languageHandler._t)("share|title_room");
const events = this.props.target.getLiveTimeline().getEvents();
if (events.length > 0) {
checkbox = /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_StyledCheckbox.default, {
checked: this.state.linkSpecificEvent,
onChange: this.onLinkSpecificEventCheckboxClick
}, (0, _languageHandler._t)("share|permalink_most_recent")));
}
} else if (this.props.target instanceof _matrix.User || this.props.target instanceof _matrix.RoomMember) {
title = this.props.customTitle ?? (0, _languageHandler._t)("share|title_user");
} else if (this.props.target instanceof _matrix.MatrixEvent) {
title = this.props.customTitle ?? (0, _languageHandler._t)("share|title_message");
checkbox = /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_StyledCheckbox.default, {
checked: this.state.linkSpecificEvent,
onChange: this.onLinkSpecificEventCheckboxClick
}, (0, _languageHandler._t)("share|permalink_message")));
}
const matrixToUrl = this.getUrl();
const encodedUrl = encodeURIComponent(matrixToUrl);
const showQrCode = _SettingsStore.default.getValue(_UIFeature.UIFeature.ShareQRCode);
const showSocials = _SettingsStore.default.getValue(_UIFeature.UIFeature.ShareSocial);
let qrSocialSection;
if (showQrCode || showSocials) {
qrSocialSection = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("div", {
className: "mx_ShareDialog_split"
}, showQrCode && /*#__PURE__*/React.createElement("div", {
className: "mx_ShareDialog_qrcode_container"
}, /*#__PURE__*/React.createElement(_QRCode.default, {
data: matrixToUrl,
width: 256
})), showSocials && /*#__PURE__*/React.createElement("div", {
className: "mx_ShareDialog_social_container"
}, socials.map(social => /*#__PURE__*/React.createElement("a", {
rel: "noreferrer noopener",
target: "_blank",
key: social.name,
title: social.name,
href: social.url(encodedUrl),
className: "mx_ShareDialog_social_icon"
}, /*#__PURE__*/React.createElement("img", {
src: social.img,
alt: social.name,
height: 64,
width: 64
}))))));
}
return /*#__PURE__*/React.createElement(_BaseDialog.default, {
title: title,
className: "mx_ShareDialog",
contentId: "mx_Dialog_content",
onFinished: this.props.onFinished
}, this.props.subtitle && /*#__PURE__*/React.createElement("p", null, this.props.subtitle), /*#__PURE__*/React.createElement("div", {
className: "mx_ShareDialog_content"
}, /*#__PURE__*/React.createElement(_CopyableText.default, {
getTextToCopy: () => matrixToUrl
}, /*#__PURE__*/React.createElement("a", {
title: (0, _languageHandler._t)("share|link_title"),
href: matrixToUrl,
onClick: ShareDialog.onLinkClick
}, matrixToUrl)), checkbox, qrSocialSection));
}
}
exports.default = ShareDialog;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9tYXRyaXgiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX1FSQ29kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfUGVybWFsaW5rcyIsIl9zdHJpbmdzIiwiX1N0eWxlZENoZWNrYm94IiwiX1NldHRpbmdzU3RvcmUiLCJfVUlGZWF0dXJlIiwiX0Jhc2VEaWFsb2ciLCJfQ29weWFibGVUZXh0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwic29jaWFscyIsIm5hbWUiLCJpbWciLCJ1cmwiLCJTaGFyZURpYWxvZyIsIlB1cmVDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsInNldFN0YXRlIiwibGlua1NwZWNpZmljRXZlbnQiLCJzdGF0ZSIsInBlcm1hbGlua0NyZWF0b3IiLCJ0YXJnZXQiLCJSb29tIiwiUm9vbVBlcm1hbGlua0NyZWF0b3IiLCJsb2FkIiwiTWF0cml4RXZlbnQiLCJvbkxpbmtDbGljayIsInByZXZlbnREZWZhdWx0Iiwic2VsZWN0VGV4dCIsImN1cnJlbnRUYXJnZXQiLCJnZXRVcmwiLCJVUkwiLCJ0b1N0cmluZyIsImV2ZW50cyIsImdldExpdmVUaW1lbGluZSIsImdldEV2ZW50cyIsImZvckV2ZW50IiwibGVuZ3RoIiwiZ2V0SWQiLCJmb3JTaGFyZWFibGVSb29tIiwiVXNlciIsIlJvb21NZW1iZXIiLCJtYWtlVXNlclBlcm1hbGluayIsInVzZXJJZCIsInJlbmRlciIsInRpdGxlIiwiY2hlY2tib3giLCJjdXN0b21UaXRsZSIsIl90IiwiY3JlYXRlRWxlbWVudCIsImNoZWNrZWQiLCJvbkNoYW5nZSIsIm9uTGlua1NwZWNpZmljRXZlbnRDaGVja2JveENsaWNrIiwibWF0cml4VG9VcmwiLCJlbmNvZGVkVXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2hvd1FyQ29kZSIsIlNldHRpbmdzU3RvcmUiLCJnZXRWYWx1ZSIsIlVJRmVhdHVyZSIsIlNoYXJlUVJDb2RlIiwic2hvd1NvY2lhbHMiLCJTaGFyZVNvY2lhbCIsInFyU29jaWFsU2VjdGlvbiIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwiZGF0YSIsIndpZHRoIiwibWFwIiwic29jaWFsIiwicmVsIiwia2V5IiwiaHJlZiIsInNyYyIsImFsdCIsImhlaWdodCIsImNvbnRlbnRJZCIsIm9uRmluaXNoZWQiLCJzdWJ0aXRsZSIsImdldFRleHRUb0NvcHkiLCJvbkNsaWNrIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvU2hhcmVEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5Db3B5cmlnaHQgMjAxOCBOZXcgVmVjdG9yIEx0ZFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJvb20sIFJvb21NZW1iZXIsIE1hdHJpeEV2ZW50LCBVc2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBRUkNvZGUgZnJvbSBcIi4uL2VsZW1lbnRzL1FSQ29kZVwiO1xuaW1wb3J0IHsgUm9vbVBlcm1hbGlua0NyZWF0b3IsIG1ha2VVc2VyUGVybWFsaW5rIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3Blcm1hbGlua3MvUGVybWFsaW5rc1wiO1xuaW1wb3J0IHsgc2VsZWN0VGV4dCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9zdHJpbmdzXCI7XG5pbXBvcnQgU3R5bGVkQ2hlY2tib3ggZnJvbSBcIi4uL2VsZW1lbnRzL1N0eWxlZENoZWNrYm94XCI7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3NTdG9yZVwiO1xuaW1wb3J0IHsgVUlGZWF0dXJlIH0gZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1VJRmVhdHVyZVwiO1xuaW1wb3J0IEJhc2VEaWFsb2cgZnJvbSBcIi4vQmFzZURpYWxvZ1wiO1xuaW1wb3J0IENvcHlhYmxlVGV4dCBmcm9tIFwiLi4vZWxlbWVudHMvQ29weWFibGVUZXh0XCI7XG5pbXBvcnQgeyBYT1IgfSBmcm9tIFwiLi4vLi4vLi4vQHR5cGVzL2NvbW1vblwiO1xuXG5jb25zdCBzb2NpYWxzID0gW1xuICAgIHtcbiAgICAgICAgbmFtZTogXCJGYWNlYm9va1wiLFxuICAgICAgICBpbWc6IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9yZXMvaW1nL3NvY2lhbC9mYWNlYm9vay5wbmdcIiksXG4gICAgICAgIHVybDogKHVybDogU3RyaW5nKSA9PiBgaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3NoYXJlci9zaGFyZXIucGhwP3U9JHt1cmx9YCxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogXCJUd2l0dGVyXCIsXG4gICAgICAgIGltZzogcmVxdWlyZShcIi4uLy4uLy4uLy4uL3Jlcy9pbWcvc29jaWFsL3R3aXR0ZXItMi5wbmdcIiksXG4gICAgICAgIHVybDogKHVybDogc3RyaW5nKSA9PiBgaHR0cHM6Ly90d2l0dGVyLmNvbS9ob21lP3N0YXR1cz0ke3VybH1gLFxuICAgIH0sXG4gICAgLyogLy8gaWNvbiBtaXNzaW5nXG4gICAgICAgIG5hbWU6ICdHb29nbGUgUGx1cycsXG4gICAgICAgIGltZzogJ2ltZy9zb2NpYWwvJyxcbiAgICAgICAgdXJsOiAodXJsKSA9PiBgaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vc2hhcmU/dXJsPSR7dXJsfWAsXG4gICAgfSwqLyB7XG4gICAgICAgIG5hbWU6IFwiTGlua2VkSW5cIixcbiAgICAgICAgaW1nOiByZXF1aXJlKFwiLi4vLi4vLi4vLi4vcmVzL2ltZy9zb2NpYWwvbGlua2VkaW4ucG5nXCIpLFxuICAgICAgICB1cmw6ICh1cmw6IHN0cmluZykgPT4gYGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9zaGFyZUFydGljbGU/bWluaT10cnVlJnVybD0ke3VybH1gLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcIlJlZGRpdFwiLFxuICAgICAgICBpbWc6IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9yZXMvaW1nL3NvY2lhbC9yZWRkaXQucG5nXCIpLFxuICAgICAgICB1cmw6ICh1cmw6IHN0cmluZykgPT4gYGh0dHBzOi8vd3d3LnJlZGRpdC5jb20vc3VibWl0P3VybD0ke3VybH1gLFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4gICAgICAgIGltZzogcmVxdWlyZShcIi4uLy4uLy4uLy4uL3Jlcy9pbWcvc29jaWFsL2VtYWlsLTEucG5nXCIpLFxuICAgICAgICB1cmw6ICh1cmw6IHN0cmluZykgPT4gYG1haWx0bzo/Ym9keT0ke3VybH1gLFxuICAgIH0sXG5dO1xuXG5pbnRlcmZhY2UgQmFzZVByb3BzIHtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGRpYWxvZyBpcyBkaXNtaXNzZWRcbiAgICAgKi9cbiAgICBvbkZpbmlzaGVkKCk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgc3RyaW5nIHRvIHVzZSBhcyB0aGUgZGlhbG9nIHRpdGxlLlxuICAgICAqIElmIG5vdCBwcm92aWRlZCwgYW4gYXBwcm9wcmlhdGUgdGl0bGUgZm9yIHRoZSB0YXJnZXQgdHlwZSB3aWxsIGJlIHVzZWQuXG4gICAgICovXG4gICAgY3VzdG9tVGl0bGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgc3RyaW5nIHRvIHVzZSBhcyB0aGUgZGlhbG9nIHN1YnRpdGxlXG4gICAgICovXG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQcm9wcyBleHRlbmRzIEJhc2VQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCB0byBsaW5rIHRvLlxuICAgICAqIFRoaXMgY2FuIGJlIGEgUm9vbSwgVXNlciwgUm9vbU1lbWJlciwgb3IgTWF0cml4RXZlbnQgb3IgYW4gYWxyZWFkeSBjb21wdXRlZCBVUkwuXG4gICAgICogQSA8dT5tYXRyaXgudG88L3U+IGxpbmsgd2lsbCBiZSBnZW5lcmF0ZWQgb3V0IG9mIGl0IGlmIGl0J3Mgbm90IGFscmVhZHkgYSB1cmwuXG4gICAgICovXG4gICAgdGFyZ2V0OiBSb29tIHwgVXNlciB8IFJvb21NZW1iZXIgfCBVUkw7XG4gICAgcGVybWFsaW5rQ3JlYXRvcj86IFJvb21QZXJtYWxpbmtDcmVhdG9yO1xufVxuXG5pbnRlcmZhY2UgRXZlbnRQcm9wcyBleHRlbmRzIEJhc2VQcm9wcyB7XG4gICAgdGFyZ2V0OiBNYXRyaXhFdmVudDtcbiAgICBwZXJtYWxpbmtDcmVhdG9yOiBSb29tUGVybWFsaW5rQ3JlYXRvcjtcbn1cblxuaW50ZXJmYWNlIElTdGF0ZSB7XG4gICAgbGlua1NwZWNpZmljRXZlbnQ6IGJvb2xlYW47XG4gICAgcGVybWFsaW5rQ3JlYXRvcjogUm9vbVBlcm1hbGlua0NyZWF0b3IgfCBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFyZURpYWxvZyBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8WE9SPFByb3BzLCBFdmVudFByb3BzPiwgSVN0YXRlPiB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBYT1I8UHJvcHMsIEV2ZW50UHJvcHM+KSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBsZXQgcGVybWFsaW5rQ3JlYXRvcjogUm9vbVBlcm1hbGlua0NyZWF0b3IgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKHByb3BzLnRhcmdldCBpbnN0YW5jZW9mIFJvb20pIHtcbiAgICAgICAgICAgIHBlcm1hbGlua0NyZWF0b3IgPSBuZXcgUm9vbVBlcm1hbGlua0NyZWF0b3IocHJvcHMudGFyZ2V0KTtcbiAgICAgICAgICAgIHBlcm1hbGlua0NyZWF0b3IubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIC8vIE1hdHJpeEV2ZW50IGRlZmF1bHRzIHRvIHNoYXJlIGxpbmtTcGVjaWZpY0V2ZW50XG4gICAgICAgICAgICBsaW5rU3BlY2lmaWNFdmVudDogdGhpcy5wcm9wcy50YXJnZXQgaW5zdGFuY2VvZiBNYXRyaXhFdmVudCxcbiAgICAgICAgICAgIHBlcm1hbGlua0NyZWF0b3IsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBvbkxpbmtDbGljayhlOiBSZWFjdC5Nb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2VsZWN0VGV4dChlLmN1cnJlbnRUYXJnZXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25MaW5rU3BlY2lmaWNFdmVudENoZWNrYm94Q2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbGlua1NwZWNpZmljRXZlbnQ6ICF0aGlzLnN0YXRlLmxpbmtTcGVjaWZpY0V2ZW50LFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXRVcmwoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudGFyZ2V0IGluc3RhbmNlb2YgVVJMKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50YXJnZXQudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnRhcmdldCBpbnN0YW5jZW9mIFJvb20pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLmxpbmtTcGVjaWZpY0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5wcm9wcy50YXJnZXQuZ2V0TGl2ZVRpbWVsaW5lKCkuZ2V0RXZlbnRzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucGVybWFsaW5rQ3JlYXRvciEuZm9yRXZlbnQoZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXS5nZXRJZCgpISk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnBlcm1hbGlua0NyZWF0b3IhLmZvclNoYXJlYWJsZVJvb20oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnRhcmdldCBpbnN0YW5jZW9mIFVzZXIgfHwgdGhpcy5wcm9wcy50YXJnZXQgaW5zdGFuY2VvZiBSb29tTWVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZVVzZXJQZXJtYWxpbmsodGhpcy5wcm9wcy50YXJnZXQudXNlcklkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmxpbmtTcGVjaWZpY0V2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wZXJtYWxpbmtDcmVhdG9yIS5mb3JFdmVudCh0aGlzLnByb3BzLnRhcmdldC5nZXRJZCgpISk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wZXJtYWxpbmtDcmVhdG9yIS5mb3JTaGFyZWFibGVSb29tKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIGxldCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY2hlY2tib3g6IEpTWC5FbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLnRhcmdldCBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLmN1c3RvbVRpdGxlID8/IF90KFwic2hhcmV8dGl0bGVfbGlua1wiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnRhcmdldCBpbnN0YW5jZW9mIFJvb20pIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5jdXN0b21UaXRsZSA/PyBfdChcInNoYXJlfHRpdGxlX3Jvb21cIik7XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMucHJvcHMudGFyZ2V0LmdldExpdmVUaW1lbGluZSgpLmdldEV2ZW50cygpO1xuICAgICAgICAgICAgaWYgKGV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tib3ggPSAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLnN0YXRlLmxpbmtTcGVjaWZpY0V2ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uTGlua1NwZWNpZmljRXZlbnRDaGVja2JveENsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInNoYXJlfHBlcm1hbGlua19tb3N0X3JlY2VudFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy50YXJnZXQgaW5zdGFuY2VvZiBVc2VyIHx8IHRoaXMucHJvcHMudGFyZ2V0IGluc3RhbmNlb2YgUm9vbU1lbWJlcikge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLmN1c3RvbVRpdGxlID8/IF90KFwic2hhcmV8dGl0bGVfdXNlclwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnRhcmdldCBpbnN0YW5jZW9mIE1hdHJpeEV2ZW50KSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMucHJvcHMuY3VzdG9tVGl0bGUgPz8gX3QoXCJzaGFyZXx0aXRsZV9tZXNzYWdlXCIpO1xuICAgICAgICAgICAgY2hlY2tib3ggPSAoXG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLnN0YXRlLmxpbmtTcGVjaWZpY0V2ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25MaW5rU3BlY2lmaWNFdmVudENoZWNrYm94Q2xpY2t9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInNoYXJlfHBlcm1hbGlua19tZXNzYWdlXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZENoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdHJpeFRvVXJsID0gdGhpcy5nZXRVcmwoKTtcbiAgICAgICAgY29uc3QgZW5jb2RlZFVybCA9IGVuY29kZVVSSUNvbXBvbmVudChtYXRyaXhUb1VybCk7XG5cbiAgICAgICAgY29uc3Qgc2hvd1FyQ29kZSA9IFNldHRpbmdzU3RvcmUuZ2V0VmFsdWUoVUlGZWF0dXJlLlNoYXJlUVJDb2RlKTtcbiAgICAgICAgY29uc3Qgc2hvd1NvY2lhbHMgPSBTZXR0aW5nc1N0b3JlLmdldFZhbHVlKFVJRmVhdHVyZS5TaGFyZVNvY2lhbCk7XG5cbiAgICAgICAgbGV0IHFyU29jaWFsU2VjdGlvbjtcbiAgICAgICAgaWYgKHNob3dRckNvZGUgfHwgc2hvd1NvY2lhbHMpIHtcbiAgICAgICAgICAgIHFyU29jaWFsU2VjdGlvbiA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9TaGFyZURpYWxvZ19zcGxpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dRckNvZGUgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfU2hhcmVEaWFsb2dfcXJjb2RlX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UVJDb2RlIGRhdGE9e21hdHJpeFRvVXJsfSB3aWR0aD17MjU2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzaG93U29jaWFscyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9TaGFyZURpYWxvZ19zb2NpYWxfY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzb2NpYWxzLm1hcCgoc29jaWFsKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXIgbm9vcGVuZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtzb2NpYWwubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17c29jaWFsLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17c29jaWFsLnVybChlbmNvZGVkVXJsKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TaGFyZURpYWxvZ19zb2NpYWxfaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e3NvY2lhbC5pbWd9IGFsdD17c29jaWFsLm5hbWV9IGhlaWdodD17NjR9IHdpZHRoPXs2NH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJhc2VEaWFsb2dcbiAgICAgICAgICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfU2hhcmVEaWFsb2dcIlxuICAgICAgICAgICAgICAgIGNvbnRlbnRJZD1cIm14X0RpYWxvZ19jb250ZW50XCJcbiAgICAgICAgICAgICAgICBvbkZpbmlzaGVkPXt0aGlzLnByb3BzLm9uRmluaXNoZWR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RoaXMucHJvcHMuc3VidGl0bGUgJiYgPHA+e3RoaXMucHJvcHMuc3VidGl0bGV9PC9wPn1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NoYXJlRGlhbG9nX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPENvcHlhYmxlVGV4dCBnZXRUZXh0VG9Db3B5PXsoKSA9PiBtYXRyaXhUb1VybH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT17X3QoXCJzaGFyZXxsaW5rX3RpdGxlXCIpfSBocmVmPXttYXRyaXhUb1VybH0gb25DbGljaz17U2hhcmVEaWFsb2cub25MaW5rQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttYXRyaXhUb1VybH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9Db3B5YWJsZVRleHQ+XG4gICAgICAgICAgICAgICAgICAgIHtjaGVja2JveH1cbiAgICAgICAgICAgICAgICAgICAge3FyU29jaWFsU2VjdGlvbn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQmFzZURpYWxvZz5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBU0EsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsZ0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQUgsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFRLGNBQUEsR0FBQUosc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFTLFVBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFdBQUEsR0FBQU4sc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFXLGFBQUEsR0FBQVAsc0JBQUEsQ0FBQUosT0FBQTtBQUFvRCxTQUFBWSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBZCx3QkFBQWMsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFLLE9BQUEsRUFBQUwsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLENBQUFILE9BQUEsR0FBQUwsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFwQnBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBZ0JBLE1BQU1XLE9BQU8sR0FBRyxDQUNaO0VBQ0lDLElBQUksRUFBRSxVQUFVO0VBQ2hCQyxHQUFHLEVBQUVsQyxPQUFPLENBQUMseUNBQXlDLENBQUM7RUFDdkRtQyxHQUFHLEVBQUdBLEdBQVcsSUFBSyxnREFBZ0RBLEdBQUc7QUFDN0UsQ0FBQyxFQUNEO0VBQ0lGLElBQUksRUFBRSxTQUFTO0VBQ2ZDLEdBQUcsRUFBRWxDLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQztFQUN4RG1DLEdBQUcsRUFBR0EsR0FBVyxJQUFLLG1DQUFtQ0EsR0FBRztBQUNoRSxDQUFDO0FBQ0Q7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUFTO0VBQ0RGLElBQUksRUFBRSxVQUFVO0VBQ2hCQyxHQUFHLEVBQUVsQyxPQUFPLENBQUMseUNBQXlDLENBQUM7RUFDdkRtQyxHQUFHLEVBQUdBLEdBQVcsSUFBSyx1REFBdURBLEdBQUc7QUFDcEYsQ0FBQyxFQUNEO0VBQ0lGLElBQUksRUFBRSxRQUFRO0VBQ2RDLEdBQUcsRUFBRWxDLE9BQU8sQ0FBQyx1Q0FBdUMsQ0FBQztFQUNyRG1DLEdBQUcsRUFBR0EsR0FBVyxJQUFLLHFDQUFxQ0EsR0FBRztBQUNsRSxDQUFDLEVBQ0Q7RUFDSUYsSUFBSSxFQUFFLE9BQU87RUFDYkMsR0FBRyxFQUFFbEMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDO0VBQ3REbUMsR0FBRyxFQUFHQSxHQUFXLElBQUssZ0JBQWdCQSxHQUFHO0FBQzdDLENBQUMsQ0FDSjtBQXNDYyxNQUFNQyxXQUFXLFNBQVN0QyxLQUFLLENBQUN1QyxhQUFhLENBQWlDO0VBQ2xGQyxXQUFXQSxDQUFDQyxLQUE2QixFQUFFO0lBQzlDLEtBQUssQ0FBQ0EsS0FBSyxDQUFDO0lBQUMsSUFBQUMsZ0JBQUEsQ0FBQXRCLE9BQUEsNENBb0IwQixNQUFZO01BQ25ELElBQUksQ0FBQ3VCLFFBQVEsQ0FBQztRQUNWQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDRDtNQUNuQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBdEJHLElBQUlFLGdCQUE2QyxHQUFHLElBQUk7SUFDeEQsSUFBSUwsS0FBSyxDQUFDTSxNQUFNLFlBQVlDLFlBQUksRUFBRTtNQUM5QkYsZ0JBQWdCLEdBQUcsSUFBSUcsZ0NBQW9CLENBQUNSLEtBQUssQ0FBQ00sTUFBTSxDQUFDO01BQ3pERCxnQkFBZ0IsQ0FBQ0ksSUFBSSxDQUFDLENBQUM7SUFDM0I7SUFFQSxJQUFJLENBQUNMLEtBQUssR0FBRztNQUNUO01BQ0FELGlCQUFpQixFQUFFLElBQUksQ0FBQ0gsS0FBSyxDQUFDTSxNQUFNLFlBQVlJLG1CQUFXO01BQzNETDtJQUNKLENBQUM7RUFDTDtFQUVBLE9BQWNNLFdBQVdBLENBQUNyQyxDQUFtQixFQUFRO0lBQ2pEQSxDQUFDLENBQUNzQyxjQUFjLENBQUMsQ0FBQztJQUNsQixJQUFBQyxtQkFBVSxFQUFDdkMsQ0FBQyxDQUFDd0MsYUFBYSxDQUFDO0VBQy9CO0VBUVFDLE1BQU1BLENBQUEsRUFBVztJQUNyQixJQUFJLElBQUksQ0FBQ2YsS0FBSyxDQUFDTSxNQUFNLFlBQVlVLEdBQUcsRUFBRTtNQUNsQyxPQUFPLElBQUksQ0FBQ2hCLEtBQUssQ0FBQ00sTUFBTSxDQUFDVyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNqQixLQUFLLENBQUNNLE1BQU0sWUFBWUMsWUFBSSxFQUFFO01BQzFDLElBQUksSUFBSSxDQUFDSCxLQUFLLENBQUNELGlCQUFpQixFQUFFO1FBQzlCLE1BQU1lLE1BQU0sR0FBRyxJQUFJLENBQUNsQixLQUFLLENBQUNNLE1BQU0sQ0FBQ2EsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUM7UUFDOUQsT0FBTyxJQUFJLENBQUNoQixLQUFLLENBQUNDLGdCQUFnQixDQUFFZ0IsUUFBUSxDQUFDSCxNQUFNLENBQUNBLE1BQU0sQ0FBQ0ksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBRSxDQUFDO01BQ3BGLENBQUMsTUFBTTtRQUNILE9BQU8sSUFBSSxDQUFDbkIsS0FBSyxDQUFDQyxnQkFBZ0IsQ0FBRW1CLGdCQUFnQixDQUFDLENBQUM7TUFDMUQ7SUFDSixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUN4QixLQUFLLENBQUNNLE1BQU0sWUFBWW1CLFlBQUksSUFBSSxJQUFJLENBQUN6QixLQUFLLENBQUNNLE1BQU0sWUFBWW9CLGtCQUFVLEVBQUU7TUFDckYsT0FBTyxJQUFBQyw2QkFBaUIsRUFBQyxJQUFJLENBQUMzQixLQUFLLENBQUNNLE1BQU0sQ0FBQ3NCLE1BQU0sQ0FBQztJQUN0RCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUN4QixLQUFLLENBQUNELGlCQUFpQixFQUFFO01BQ3JDLE9BQU8sSUFBSSxDQUFDSCxLQUFLLENBQUNLLGdCQUFnQixDQUFFZ0IsUUFBUSxDQUFDLElBQUksQ0FBQ3JCLEtBQUssQ0FBQ00sTUFBTSxDQUFDaUIsS0FBSyxDQUFDLENBQUUsQ0FBQztJQUM1RSxDQUFDLE1BQU07TUFDSCxPQUFPLElBQUksQ0FBQ3ZCLEtBQUssQ0FBQ0ssZ0JBQWdCLENBQUVtQixnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFEO0VBQ0o7RUFFT0ssTUFBTUEsQ0FBQSxFQUFvQjtJQUM3QixJQUFJQyxLQUF5QjtJQUM3QixJQUFJQyxRQUFpQztJQUVyQyxJQUFJLElBQUksQ0FBQy9CLEtBQUssQ0FBQ00sTUFBTSxZQUFZVSxHQUFHLEVBQUU7TUFDbENjLEtBQUssR0FBRyxJQUFJLENBQUM5QixLQUFLLENBQUNnQyxXQUFXLElBQUksSUFBQUMsbUJBQUUsRUFBQyxrQkFBa0IsQ0FBQztJQUM1RCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNqQyxLQUFLLENBQUNNLE1BQU0sWUFBWUMsWUFBSSxFQUFFO01BQzFDdUIsS0FBSyxHQUFHLElBQUksQ0FBQzlCLEtBQUssQ0FBQ2dDLFdBQVcsSUFBSSxJQUFBQyxtQkFBRSxFQUFDLGtCQUFrQixDQUFDO01BRXhELE1BQU1mLE1BQU0sR0FBRyxJQUFJLENBQUNsQixLQUFLLENBQUNNLE1BQU0sQ0FBQ2EsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUM7TUFDOUQsSUFBSUYsTUFBTSxDQUFDSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25CUyxRQUFRLGdCQUNKeEUsS0FBQSxDQUFBMkUsYUFBQSwyQkFDSTNFLEtBQUEsQ0FBQTJFLGFBQUEsQ0FBQ2xFLGVBQUEsQ0FBQVcsT0FBYztVQUNYd0QsT0FBTyxFQUFFLElBQUksQ0FBQy9CLEtBQUssQ0FBQ0QsaUJBQWtCO1VBQ3RDaUMsUUFBUSxFQUFFLElBQUksQ0FBQ0M7UUFBaUMsR0FFL0MsSUFBQUosbUJBQUUsRUFBQyw2QkFBNkIsQ0FDckIsQ0FDZixDQUNSO01BQ0w7SUFDSixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNqQyxLQUFLLENBQUNNLE1BQU0sWUFBWW1CLFlBQUksSUFBSSxJQUFJLENBQUN6QixLQUFLLENBQUNNLE1BQU0sWUFBWW9CLGtCQUFVLEVBQUU7TUFDckZJLEtBQUssR0FBRyxJQUFJLENBQUM5QixLQUFLLENBQUNnQyxXQUFXLElBQUksSUFBQUMsbUJBQUUsRUFBQyxrQkFBa0IsQ0FBQztJQUM1RCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNqQyxLQUFLLENBQUNNLE1BQU0sWUFBWUksbUJBQVcsRUFBRTtNQUNqRG9CLEtBQUssR0FBRyxJQUFJLENBQUM5QixLQUFLLENBQUNnQyxXQUFXLElBQUksSUFBQUMsbUJBQUUsRUFBQyxxQkFBcUIsQ0FBQztNQUMzREYsUUFBUSxnQkFDSnhFLEtBQUEsQ0FBQTJFLGFBQUEsMkJBQ0kzRSxLQUFBLENBQUEyRSxhQUFBLENBQUNsRSxlQUFBLENBQUFXLE9BQWM7UUFDWHdELE9BQU8sRUFBRSxJQUFJLENBQUMvQixLQUFLLENBQUNELGlCQUFrQjtRQUN0Q2lDLFFBQVEsRUFBRSxJQUFJLENBQUNDO01BQWlDLEdBRS9DLElBQUFKLG1CQUFFLEVBQUMseUJBQXlCLENBQ2pCLENBQ2YsQ0FDUjtJQUNMO0lBRUEsTUFBTUssV0FBVyxHQUFHLElBQUksQ0FBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLE1BQU13QixVQUFVLEdBQUdDLGtCQUFrQixDQUFDRixXQUFXLENBQUM7SUFFbEQsTUFBTUcsVUFBVSxHQUFHQyxzQkFBYSxDQUFDQyxRQUFRLENBQUNDLG9CQUFTLENBQUNDLFdBQVcsQ0FBQztJQUNoRSxNQUFNQyxXQUFXLEdBQUdKLHNCQUFhLENBQUNDLFFBQVEsQ0FBQ0Msb0JBQVMsQ0FBQ0csV0FBVyxDQUFDO0lBRWpFLElBQUlDLGVBQWU7SUFDbkIsSUFBSVAsVUFBVSxJQUFJSyxXQUFXLEVBQUU7TUFDM0JFLGVBQWUsZ0JBQ1h6RixLQUFBLENBQUEyRSxhQUFBLENBQUEzRSxLQUFBLENBQUEwRixRQUFBLHFCQUNJMUYsS0FBQSxDQUFBMkUsYUFBQSxXQUFLLENBQUMsZUFDTjNFLEtBQUEsQ0FBQTJFLGFBQUE7UUFBS2dCLFNBQVMsRUFBQztNQUFzQixHQUNoQ1QsVUFBVSxpQkFDUGxGLEtBQUEsQ0FBQTJFLGFBQUE7UUFBS2dCLFNBQVMsRUFBQztNQUFpQyxnQkFDNUMzRixLQUFBLENBQUEyRSxhQUFBLENBQUN0RSxPQUFBLENBQUFlLE9BQU07UUFBQ3dFLElBQUksRUFBRWIsV0FBWTtRQUFDYyxLQUFLLEVBQUU7TUFBSSxDQUFFLENBQ3ZDLENBQ1IsRUFDQU4sV0FBVyxpQkFDUnZGLEtBQUEsQ0FBQTJFLGFBQUE7UUFBS2dCLFNBQVMsRUFBQztNQUFpQyxHQUMzQ3pELE9BQU8sQ0FBQzRELEdBQUcsQ0FBRUMsTUFBTSxpQkFDaEIvRixLQUFBLENBQUEyRSxhQUFBO1FBQ0lxQixHQUFHLEVBQUMscUJBQXFCO1FBQ3pCakQsTUFBTSxFQUFDLFFBQVE7UUFDZmtELEdBQUcsRUFBRUYsTUFBTSxDQUFDNUQsSUFBSztRQUNqQm9DLEtBQUssRUFBRXdCLE1BQU0sQ0FBQzVELElBQUs7UUFDbkIrRCxJQUFJLEVBQUVILE1BQU0sQ0FBQzFELEdBQUcsQ0FBQzJDLFVBQVUsQ0FBRTtRQUM3QlcsU0FBUyxFQUFDO01BQTRCLGdCQUV0QzNGLEtBQUEsQ0FBQTJFLGFBQUE7UUFBS3dCLEdBQUcsRUFBRUosTUFBTSxDQUFDM0QsR0FBSTtRQUFDZ0UsR0FBRyxFQUFFTCxNQUFNLENBQUM1RCxJQUFLO1FBQUNrRSxNQUFNLEVBQUUsRUFBRztRQUFDUixLQUFLLEVBQUU7TUFBRyxDQUFFLENBQ2pFLENBQ04sQ0FDQSxDQUVSLENBQ1AsQ0FDTDtJQUNMO0lBRUEsb0JBQ0k3RixLQUFBLENBQUEyRSxhQUFBLENBQUMvRCxXQUFBLENBQUFRLE9BQVU7TUFDUG1ELEtBQUssRUFBRUEsS0FBTTtNQUNib0IsU0FBUyxFQUFDLGdCQUFnQjtNQUMxQlcsU0FBUyxFQUFDLG1CQUFtQjtNQUM3QkMsVUFBVSxFQUFFLElBQUksQ0FBQzlELEtBQUssQ0FBQzhEO0lBQVcsR0FFakMsSUFBSSxDQUFDOUQsS0FBSyxDQUFDK0QsUUFBUSxpQkFBSXhHLEtBQUEsQ0FBQTJFLGFBQUEsWUFBSSxJQUFJLENBQUNsQyxLQUFLLENBQUMrRCxRQUFZLENBQUMsZUFDcER4RyxLQUFBLENBQUEyRSxhQUFBO01BQUtnQixTQUFTLEVBQUM7SUFBd0IsZ0JBQ25DM0YsS0FBQSxDQUFBMkUsYUFBQSxDQUFDOUQsYUFBQSxDQUFBTyxPQUFZO01BQUNxRixhQUFhLEVBQUVBLENBQUEsS0FBTTFCO0lBQVksZ0JBQzNDL0UsS0FBQSxDQUFBMkUsYUFBQTtNQUFHSixLQUFLLEVBQUUsSUFBQUcsbUJBQUUsRUFBQyxrQkFBa0IsQ0FBRTtNQUFDd0IsSUFBSSxFQUFFbkIsV0FBWTtNQUFDMkIsT0FBTyxFQUFFcEUsV0FBVyxDQUFDYztJQUFZLEdBQ2pGMkIsV0FDRixDQUNPLENBQUMsRUFDZFAsUUFBUSxFQUNSaUIsZUFDQSxDQUNHLENBQUM7RUFFckI7QUFDSjtBQUFDa0IsT0FBQSxDQUFBdkYsT0FBQSxHQUFBa0IsV0FBQSIsImlnbm9yZUxpc3QiOltdfQ==