matrix-react-sdk
Version:
SDK for matrix.org using React
140 lines (116 loc) • 19 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var sdk = _interopRequireWildcard(require("../../index"));
var _languageHandler = require("../../languageHandler");
var _SdkConfig = _interopRequireDefault(require("../../SdkConfig"));
var _dispatcher = _interopRequireDefault(require("../../dispatcher/dispatcher"));
var _AccessibleButton = _interopRequireDefault(require("../views/elements/AccessibleButton"));
var _MatrixClientContext = _interopRequireDefault(require("../../contexts/MatrixClientContext"));
var _AutoHideScrollbar = _interopRequireDefault(require("./AutoHideScrollbar"));
var _replaceableComponent = require("../../utils/replaceableComponent");
var _BetaCard = _interopRequireDefault(require("../views/beta/BetaCard"));
var _dec, _class, _class2, _temp;
let MyGroups = (_dec = (0, _replaceableComponent.replaceableComponent)("structures.MyGroups"), _dec(_class = (_temp = _class2 = class MyGroups extends _react.default.Component {
constructor(...args) {
super(...args);
(0, _defineProperty2.default)(this, "state", {
groups: null,
error: null
});
(0, _defineProperty2.default)(this, "_onCreateGroupClick", () => {
_dispatcher.default.dispatch({
action: 'view_create_group'
});
});
}
componentDidMount() {
this._fetch();
}
_fetch() {
this.context.getJoinedGroups().then(result => {
this.setState({
groups: result.groups,
error: null
});
}, err => {
if (err.errcode === 'M_GUEST_ACCESS_FORBIDDEN') {
// Indicate that the guest isn't in any groups (which should be true)
this.setState({
groups: [],
error: null
});
return;
}
this.setState({
groups: null,
error: err
});
});
}
render() {
const brand = _SdkConfig.default.get().brand;
const Loader = sdk.getComponent("elements.Spinner");
const SimpleRoomHeader = sdk.getComponent('rooms.SimpleRoomHeader');
const GroupTile = sdk.getComponent("groups.GroupTile");
let content;
let contentHeader;
if (this.state.groups) {
const groupNodes = [];
this.state.groups.forEach(g => {
groupNodes.push( /*#__PURE__*/_react.default.createElement(GroupTile, {
key: g,
groupId: g
}));
});
contentHeader = groupNodes.length > 0 ? /*#__PURE__*/_react.default.createElement("h3", null, (0, _languageHandler._t)('Your Communities')) : /*#__PURE__*/_react.default.createElement("div", null);
content = groupNodes.length > 0 ? /*#__PURE__*/_react.default.createElement(_AutoHideScrollbar.default, {
className: "mx_MyGroups_scrollable"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_microcopy"
}, /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("Did you know: you can use communities to filter your %(brand)s experience!", {
brand
})), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("To set up a filter, drag a community avatar over to the filter panel on " + "the far left hand side of the screen. You can click on an avatar in the " + "filter panel at any time to see only the rooms and people associated " + "with that community."))), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_joinedGroups"
}, groupNodes)) : /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_placeholder"
}, (0, _languageHandler._t)("You're not currently a member of any communities."));
} else if (this.state.error) {
content = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_error"
}, (0, _languageHandler._t)('Error whilst fetching joined communities'));
} else {
content = /*#__PURE__*/_react.default.createElement(Loader, null);
}
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups"
}, /*#__PURE__*/_react.default.createElement(SimpleRoomHeader, {
title: (0, _languageHandler._t)("Communities"),
icon: require("../../../res/img/icons-groups.svg")
}), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_header"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_headerCard"
}, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_MyGroups_headerCard_button",
onClick: this._onCreateGroupClick
}), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_headerCard_content"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_headerCard_header"
}, (0, _languageHandler._t)('Create a new community')), (0, _languageHandler._t)('Create a community to group together users and rooms! ' + 'Build a custom homepage to mark out your space in the Matrix universe.')))), /*#__PURE__*/_react.default.createElement(_BetaCard.default, {
featureId: "feature_spaces",
title: (0, _languageHandler._t)("Communities are changing to Spaces")
}), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MyGroups_content"
}, contentHeader, content));
}
}, (0, _defineProperty2.default)(_class2, "contextType", _MatrixClientContext.default), _temp)) || _class);
exports.default = MyGroups;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N0cnVjdHVyZXMvTXlHcm91cHMuanMiXSwibmFtZXMiOlsiTXlHcm91cHMiLCJSZWFjdCIsIkNvbXBvbmVudCIsImdyb3VwcyIsImVycm9yIiwiZGlzIiwiZGlzcGF0Y2giLCJhY3Rpb24iLCJjb21wb25lbnREaWRNb3VudCIsIl9mZXRjaCIsImNvbnRleHQiLCJnZXRKb2luZWRHcm91cHMiLCJ0aGVuIiwicmVzdWx0Iiwic2V0U3RhdGUiLCJlcnIiLCJlcnJjb2RlIiwicmVuZGVyIiwiYnJhbmQiLCJTZGtDb25maWciLCJnZXQiLCJMb2FkZXIiLCJzZGsiLCJnZXRDb21wb25lbnQiLCJTaW1wbGVSb29tSGVhZGVyIiwiR3JvdXBUaWxlIiwiY29udGVudCIsImNvbnRlbnRIZWFkZXIiLCJzdGF0ZSIsImdyb3VwTm9kZXMiLCJmb3JFYWNoIiwiZyIsInB1c2giLCJsZW5ndGgiLCJyZXF1aXJlIiwiX29uQ3JlYXRlR3JvdXBDbGljayIsIk1hdHJpeENsaWVudENvbnRleHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFrQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7SUFHcUJBLFEsV0FEcEIsZ0RBQXFCLHFCQUFyQixDLG1DQUFELE1BQ3FCQSxRQURyQixTQUNzQ0MsZUFBTUMsU0FENUMsQ0FDc0Q7QUFBQTtBQUFBO0FBQUEsaURBRzFDO0FBQ0pDLE1BQUFBLE1BQU0sRUFBRSxJQURKO0FBRUpDLE1BQUFBLEtBQUssRUFBRTtBQUZILEtBSDBDO0FBQUEsK0RBWTVCLE1BQU07QUFDeEJDLDBCQUFJQyxRQUFKLENBQWE7QUFBQ0MsUUFBQUEsTUFBTSxFQUFFO0FBQVQsT0FBYjtBQUNILEtBZGlEO0FBQUE7O0FBUWxEQyxFQUFBQSxpQkFBaUIsR0FBRztBQUNoQixTQUFLQyxNQUFMO0FBQ0g7O0FBTURBLEVBQUFBLE1BQU0sR0FBRztBQUNMLFNBQUtD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LHlCQUFEO0FBQWtCLE1BQUEsU0FBUyxFQUFDLCtCQUE1QjtBQUE0RCxNQUFBLE9BQU8sRUFBRSxLQUFLQztBQUExRSxNQURKLGVBR0k7QUFBSyxNQUFBLFNBQVMsRUFBQztBQUFmLG9CQUNJO0FBQUssTUFBQSxTQUFTLEVBQUM7QUFBZixPQUNNLHlCQUFHLHdCQUFILENBRE4sQ0FESixFQUlNLHlCQUNFLDJEQUNBLHdFQUZGLENBSk4sQ0FISixDQURKLENBRkcsZUFrQ0gsNkJBQUMsaUJBQUQ7QUFBVSxNQUFBLFNBQVMsRUFBQyxnQkFBcEI7QUFBcUMsTUFBQSxLQUFLLEVBQUUseUJBQUcsb0NBQUg7QUFBNUMsTUFsQ0csZUFtQ0g7QUFBSyxNQUFBLFNBQVMsRUFBQztBQUFmLE9BQ01SLGFBRE4sRUFFTUQsT0FGTixDQW5DRyxDQUFQO0FBd0NIOztBQXRIaUQsQyx3REFDN0JVLDRCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDE3IFZlY3RvciBDcmVhdGlvbnMgTHRkXG5Db3B5cmlnaHQgMjAxOSBNaWNoYWVsIFRlbGF0eW5za2kgPDd0M2NoZ3V5QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIHNkayBmcm9tICcuLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBfdCB9IGZyb20gJy4uLy4uL2xhbmd1YWdlSGFuZGxlcic7XG5pbXBvcnQgU2RrQ29uZmlnIGZyb20gJy4uLy4uL1Nka0NvbmZpZyc7XG5pbXBvcnQgZGlzIGZyb20gJy4uLy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tICcuLi92aWV3cy9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uJztcbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0IGZyb20gXCIuLi8uLi9jb250ZXh0cy9NYXRyaXhDbGllbnRDb250ZXh0XCI7XG5pbXBvcnQgQXV0b0hpZGVTY3JvbGxiYXIgZnJvbSBcIi4vQXV0b0hpZGVTY3JvbGxiYXJcIjtcbmltcG9ydCB7cmVwbGFjZWFibGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuaW1wb3J0IEJldGFDYXJkIGZyb20gXCIuLi92aWV3cy9iZXRhL0JldGFDYXJkXCI7XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInN0cnVjdHVyZXMuTXlHcm91cHNcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE15R3JvdXBzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBNYXRyaXhDbGllbnRDb250ZXh0O1xuXG4gICAgc3RhdGUgPSB7XG4gICAgICAgIGdyb3VwczogbnVsbCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgfTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLl9mZXRjaCgpO1xuICAgIH1cblxuICAgIF9vbkNyZWF0ZUdyb3VwQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7YWN0aW9uOiAndmlld19jcmVhdGVfZ3JvdXAnfSk7XG4gICAgfTtcblxuICAgIF9mZXRjaCgpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmdldEpvaW5lZEdyb3VwcygpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Z3JvdXBzOiByZXN1bHQuZ3JvdXBzLCBlcnJvcjogbnVsbH0pO1xuICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyLmVycmNvZGUgPT09ICdNX0dVRVNUX0FDQ0VTU19GT1JCSURERU4nKSB7XG4gICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgZ3Vlc3QgaXNuJ3QgaW4gYW55IGdyb3VwcyAod2hpY2ggc2hvdWxkIGJlIHRydWUpXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Z3JvdXBzOiBbXSwgZXJyb3I6IG51bGx9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtncm91cHM6IG51bGwsIGVycm9yOiBlcnJ9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBicmFuZCA9IFNka0NvbmZpZy5nZXQoKS5icmFuZDtcbiAgICAgICAgY29uc3QgTG9hZGVyID0gc2RrLmdldENvbXBvbmVudChcImVsZW1lbnRzLlNwaW5uZXJcIik7XG4gICAgICAgIGNvbnN0IFNpbXBsZVJvb21IZWFkZXIgPSBzZGsuZ2V0Q29tcG9uZW50KCdyb29tcy5TaW1wbGVSb29tSGVhZGVyJyk7XG4gICAgICAgIGNvbnN0IEdyb3VwVGlsZSA9IHNkay5nZXRDb21wb25lbnQoXCJncm91cHMuR3JvdXBUaWxlXCIpO1xuXG4gICAgICAgIGxldCBjb250ZW50O1xuICAgICAgICBsZXQgY29udGVudEhlYWRlcjtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cE5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmdyb3Vwcy5mb3JFYWNoKChnKSA9PiB7XG4gICAgICAgICAgICAgICAgZ3JvdXBOb2Rlcy5wdXNoKDxHcm91cFRpbGUga2V5PXtnfSBncm91cElkPXtnfSAvPik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnRlbnRIZWFkZXIgPSBncm91cE5vZGVzLmxlbmd0aCA+IDAgPyA8aDM+eyBfdCgnWW91ciBDb21tdW5pdGllcycpIH08L2gzPiA6IDxkaXYgLz47XG4gICAgICAgICAgICBjb250ZW50ID0gZ3JvdXBOb2Rlcy5sZW5ndGggPiAwID9cbiAgICAgICAgICAgICAgICA8QXV0b0hpZGVTY3JvbGxiYXIgY2xhc3NOYW1lPVwibXhfTXlHcm91cHNfc2Nyb2xsYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X015R3JvdXBzX21pY3JvY29weVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBfdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEaWQgeW91IGtub3c6IHlvdSBjYW4gdXNlIGNvbW11bml0aWVzIHRvIGZpbHRlciB5b3VyICUoYnJhbmQpcyBleHBlcmllbmNlIVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGJyYW5kIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IF90KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRvIHNldCB1cCBhIGZpbHRlciwgZHJhZyBhIGNvbW11bml0eSBhdmF0YXIgb3ZlciB0byB0aGUgZmlsdGVyIHBhbmVsIG9uIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGUgZmFyIGxlZnQgaGFuZCBzaWRlIG9mIHRoZSBzY3JlZW4uIFlvdSBjYW4gY2xpY2sgb24gYW4gYXZhdGFyIGluIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlsdGVyIHBhbmVsIGF0IGFueSB0aW1lIHRvIHNlZSBvbmx5IHRoZSByb29tcyBhbmQgcGVvcGxlIGFzc29jaWF0ZWQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndpdGggdGhhdCBjb21tdW5pdHkuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X015R3JvdXBzX2pvaW5lZEdyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgeyBncm91cE5vZGVzIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9BdXRvSGlkZVNjcm9sbGJhcj4gOlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfTXlHcm91cHNfcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgeyBfdChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiWW91J3JlIG5vdCBjdXJyZW50bHkgYSBtZW1iZXIgb2YgYW55IGNvbW11bml0aWVzLlwiLFxuICAgICAgICAgICAgICAgICAgICApIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgY29udGVudCA9IDxkaXYgY2xhc3NOYW1lPVwibXhfTXlHcm91cHNfZXJyb3JcIj5cbiAgICAgICAgICAgICAgICB7IF90KCdFcnJvciB3aGlsc3QgZmV0Y2hpbmcgam9pbmVkIGNvbW11bml0aWVzJykgfVxuICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudCA9IDxMb2FkZXIgLz47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJteF9NeUdyb3Vwc1wiPlxuICAgICAgICAgICAgPFNpbXBsZVJvb21IZWFkZXIgdGl0bGU9e190KFwiQ29tbXVuaXRpZXNcIil9IGljb249e3JlcXVpcmUoXCIuLi8uLi8uLi9yZXMvaW1nL2ljb25zLWdyb3Vwcy5zdmdcIil9IC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbXhfTXlHcm91cHNfaGVhZGVyJz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X015R3JvdXBzX2hlYWRlckNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gY2xhc3NOYW1lPSdteF9NeUdyb3Vwc19oZWFkZXJDYXJkX2J1dHRvbicgb25DbGljaz17dGhpcy5fb25DcmVhdGVHcm91cENsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X015R3JvdXBzX2hlYWRlckNhcmRfY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9NeUdyb3Vwc19oZWFkZXJDYXJkX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgX3QoJ0NyZWF0ZSBhIG5ldyBjb21tdW5pdHknKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgX3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NyZWF0ZSBhIGNvbW11bml0eSB0byBncm91cCB0b2dldGhlciB1c2VycyBhbmQgcm9vbXMhICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCdWlsZCBhIGN1c3RvbSBob21lcGFnZSB0byBtYXJrIG91dCB5b3VyIHNwYWNlIGluIHRoZSBNYXRyaXggdW5pdmVyc2UuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7Lyo8ZGl2IGNsYXNzTmFtZT1cIm14X015R3JvdXBzX2pvaW5Cb3ggbXhfTXlHcm91cHNfaGVhZGVyQ2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvbiBjbGFzc05hbWU9J214X015R3JvdXBzX2hlYWRlckNhcmRfYnV0dG9uJyBvbkNsaWNrPXt0aGlzLl9vbkpvaW5Hcm91cENsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUaW50YWJsZVN2ZyBzcmM9e3JlcXVpcmUoXCIuLi8uLi8uLi9yZXMvaW1nL2ljb25zLWNyZWF0ZS1yb29tLnN2Z1wiKX0gd2lkdGg9XCI1MFwiIGhlaWdodD1cIjUwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X015R3JvdXBzX2hlYWRlckNhcmRfY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9NeUdyb3Vwc19oZWFkZXJDYXJkX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgX3QoJ0pvaW4gYW4gZXhpc3RpbmcgY29tbXVuaXR5JykgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IF90KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUbyBqb2luIGFuIGV4aXN0aW5nIGNvbW11bml0eSB5b3VcXCdsbCBoYXZlIHRvICcrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tub3cgaXRzIGNvbW11bml0eSBpZGVudGlmaWVyOyB0aGlzIHdpbGwgbG9vayAnK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21ldGhpbmcgbGlrZSA8aT4rZXhhbXBsZTptYXRyaXgub3JnPC9pPi4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJ2knOiAoc3ViKSA9PiA8aT57IHN1YiB9PC9pPiB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4qL31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPEJldGFDYXJkIGZlYXR1cmVJZD1cImZlYXR1cmVfc3BhY2VzXCIgdGl0bGU9e190KFwiQ29tbXVuaXRpZXMgYXJlIGNoYW5naW5nIHRvIFNwYWNlc1wiKX0gLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfTXlHcm91cHNfY29udGVudFwiPlxuICAgICAgICAgICAgICAgIHsgY29udGVudEhlYWRlciB9XG4gICAgICAgICAgICAgICAgeyBjb250ZW50IH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj47XG4gICAgfVxufVxuIl19