UNPKG

matrix-react-sdk

Version:
140 lines (116 loc) 19 kB
"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