UNPKG

matrix-react-sdk

Version:
134 lines (113 loc) 15.5 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _replaceableComponent = require("../../../utils/replaceableComponent"); var _dec, _class; let Slider = (_dec = (0, _replaceableComponent.replaceableComponent)("views.elements.Slider"), _dec(_class = class Slider extends React.Component /*:: <IProps>*/ { // offset is a terrible inverse approximation. // if the values represents some function f(x) = y where x is the // index of the array and y = values[x] then offset(f, y) = x // s.t f(x) = y. // it assumes a monotonic function and interpolates linearly between // y values. // Offset is used for finding the location of a value on a // non linear slider. offset(values /*: number[]*/ , value /*: number*/ ) /*: number*/ { // the index of the first number greater than value. const closest = values.reduce((prev, curr) => { return value > curr ? prev + 1 : prev; }, 0); // Off the left if (closest === 0) { return 0; } // Off the right if (closest === values.length) { return 100; } // Now const closestLessValue = values[closest - 1]; const closestGreaterValue = values[closest]; const intervalWidth = 1 / (values.length - 1); const linearInterpolation = (value - closestLessValue) / (closestGreaterValue - closestLessValue); return 100 * (closest - 1 + linearInterpolation) * intervalWidth; } render() /*: React.ReactNode*/ { const dots = this.props.values.map(v => /*#__PURE__*/React.createElement(Dot, { active: v <= this.props.value, label: this.props.displayFunc(v), onClick: this.props.disabled ? () => {} : () => this.props.onSelectionChange(v), key: v, disabled: this.props.disabled })); let selection = null; if (!this.props.disabled) { const offset = this.offset(this.props.values, this.props.value); selection = /*#__PURE__*/React.createElement("div", { className: "mx_Slider_selection" }, /*#__PURE__*/React.createElement("div", { className: "mx_Slider_selectionDot", style: { left: "calc(-0.55em + " + offset + "%)" } }), /*#__PURE__*/React.createElement("hr", { style: { width: offset + "%" } })); } return /*#__PURE__*/React.createElement("div", { className: "mx_Slider" }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", { className: "mx_Slider_bar" }, /*#__PURE__*/React.createElement("hr", { onClick: this.props.disabled ? () => {} : this.onClick.bind(this) }), selection), /*#__PURE__*/React.createElement("div", { className: "mx_Slider_dotContainer" }, dots))); } onClick(event /*: React.MouseEvent*/ ) { const width = event.target.clientWidth; // nativeEvent is safe to use because https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/offsetX // is supported by all modern browsers const relativeClick = event.nativeEvent.offsetX / width; const nearestValue = this.props.values[Math.round(relativeClick * (this.props.values.length - 1))]; this.props.onSelectionChange(nearestValue); } }) || _class); exports.default = Slider; class Dot extends React.PureComponent /*:: <IDotProps>*/ { render() /*: React.ReactNode*/ { let className = "mx_Slider_dot"; if (!this.props.disabled && this.props.active) { className += " mx_Slider_dotActive"; } return /*#__PURE__*/React.createElement("span", { onClick: this.props.onClick, className: "mx_Slider_dotValue" }, /*#__PURE__*/React.createElement("div", { className: className }), /*#__PURE__*/React.createElement("div", { className: "mx_Slider_labelContainer" }, /*#__PURE__*/React.createElement("div", { className: "mx_Slider_label" }, this.props.label))); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2VsZW1lbnRzL1NsaWRlci50c3giXSwibmFtZXMiOlsiU2xpZGVyIiwiUmVhY3QiLCJDb21wb25lbnQiLCJvZmZzZXQiLCJ2YWx1ZXMiLCJ2YWx1ZSIsImNsb3Nlc3QiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsImxlbmd0aCIsImNsb3Nlc3RMZXNzVmFsdWUiLCJjbG9zZXN0R3JlYXRlclZhbHVlIiwiaW50ZXJ2YWxXaWR0aCIsImxpbmVhckludGVycG9sYXRpb24iLCJyZW5kZXIiLCJkb3RzIiwicHJvcHMiLCJtYXAiLCJ2IiwiZGlzcGxheUZ1bmMiLCJkaXNhYmxlZCIsIm9uU2VsZWN0aW9uQ2hhbmdlIiwic2VsZWN0aW9uIiwibGVmdCIsIndpZHRoIiwib25DbGljayIsImJpbmQiLCJldmVudCIsInRhcmdldCIsImNsaWVudFdpZHRoIiwicmVsYXRpdmVDbGljayIsIm5hdGl2ZUV2ZW50Iiwib2Zmc2V0WCIsIm5lYXJlc3RWYWx1ZSIsIk1hdGgiLCJyb3VuZCIsIkRvdCIsIlB1cmVDb21wb25lbnQiLCJjbGFzc05hbWUiLCJhY3RpdmUiLCJsYWJlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBZ0JBOztBQUNBOzs7O0lBcUJxQkEsTSxXQURwQixnREFBcUIsdUJBQXJCLEMsZ0JBQUQsTUFDcUJBLE1BRHJCLFNBQ29DQyxLQUFLLENBQUNDO0FBRDFDO0FBQzREO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDUUMsRUFBQUEsTUFBUixDQUFlQztBQUFmO0FBQUEsSUFBaUNDO0FBQWpDO0FBQUE7QUFBQTtBQUF3RDtBQUNwRDtBQUNBLFVBQU1DLE9BQU8sR0FBR0YsTUFBTSxDQUFDRyxNQUFQLENBQWMsQ0FBQ0MsSUFBRCxFQUFPQyxJQUFQLEtBQWdCO0FBQzFDLGFBQVFKLEtBQUssR0FBR0ksSUFBUixHQUFlRCxJQUFJLEdBQUcsQ0FBdEIsR0FBMEJBLElBQWxDO0FBQ0gsS0FGZSxFQUViLENBRmEsQ0FBaEIsQ0FGb0QsQ0FNcEQ7O0FBQ0EsUUFBSUYsT0FBTyxLQUFLLENBQWhCLEVBQW1CO0FBQ2YsYUFBTyxDQUFQO0FBQ0gsS0FUbUQsQ0FXcEQ7OztBQUNBLFFBQUlBLE9BQU8sS0FBS0YsTUFBTSxDQUFDTSxNQUF2QixFQUErQjtBQUMzQixhQUFPLEdBQVA7QUFDSCxLQWRtRCxDQWdCcEQ7OztBQUNBLFVBQU1DLGdCQUFnQixHQUFHUCxNQUFNLENBQUNFLE9BQU8sR0FBRyxDQUFYLENBQS9CO0FBQ0EsVUFBTU0sbUJBQW1CLEdBQUdSLE1BQU0sQ0FBQ0UsT0FBRCxDQUFsQztBQUVBLFVBQU1PLGFBQWEsR0FBRyxLQUFLVCxNQUFNLENBQUNNLE1BQVAsR0FBZ0IsQ0FBckIsQ0FBdEI7QUFFQSxVQUFNSSxtQkFBbUIsR0FBRyxDQUFDVCxLQUFLLEdBQUdNLGdCQUFULEtBQThCQyxtQkFBbUIsR0FBR0QsZ0JBQXBELENBQTVCO0FBRUEsV0FBTyxPQUFPTCxPQUFPLEdBQUcsQ0FBVixHQUFjUSxtQkFBckIsSUFBNENELGFBQW5EO0FBQ0g7O0FBRURFLEVBQUFBLE1BQU07QUFBQTtBQUFvQjtBQUN0QixVQUFNQyxJQUFJLEdBQUcsS0FBS0MsS0FBTCxDQUFXYixNQUFYLENBQWtCYyxHQUFsQixDQUFzQkMsQ0FBQyxpQkFBSSxvQkFBQyxHQUFEO0FBQ3BDLE1BQUEsTUFBTSxFQUFFQSxDQUFDLElBQUksS0FBS0YsS0FBTCxDQUFXWixLQURZO0FBRXBDLE1BQUEsS0FBSyxFQUFFLEtBQUtZLEtBQUwsQ0FBV0csV0FBWCxDQUF1QkQsQ0FBdkIsQ0FGNkI7QUFHcEMsTUFBQSxPQUFPLEVBQUUsS0FBS0YsS0FBTCxDQUFXSSxRQUFYLEdBQXNCLE1BQU0sQ0FBRSxDQUE5QixHQUFpQyxNQUFNLEtBQUtKLEtBQUwsQ0FBV0ssaUJBQVgsQ0FBNkJILENBQTdCLENBSFo7QUFJcEMsTUFBQSxHQUFHLEVBQUVBLENBSitCO0FBS3BDLE1BQUEsUUFBUSxFQUFFLEtBQUtGLEtBQUwsQ0FBV0k7QUFMZSxNQUEzQixDQUFiO0FBUUEsUUFBSUUsU0FBUyxHQUFHLElBQWhCOztBQUVBLFFBQUksQ0FBQyxLQUFLTixLQUFMLENBQVdJLFFBQWhCLEVBQTBCO0FBQ3RCLFlBQU1sQixNQUFNLEdBQUcsS0FBS0EsTUFBTCxDQUFZLEtBQUtjLEtBQUwsQ0FBV2IsTUFBdkIsRUFBK0IsS0FBS2EsS0FBTCxDQUFXWixLQUExQyxDQUFmO0FBQ0FrQixNQUFBQSxTQUFTLGdCQUFHO0FBQUssUUFBQSxTQUFTLEVBQUM7QUFBZixzQkFDUjtBQUFLLFFBQUEsU0FBUyxFQUFDLHdCQUFmO0FBQXdDLFFBQUEsS0FBSyxFQUFFO0FBQUNDLFVBQUFBLElBQUksRUFBRSxvQkFBb0JyQixNQUFwQixHQUE2QjtBQUFwQztBQUEvQyxRQURRLGVBRVI7QUFBSSxRQUFBLEtBQUssRUFBRTtBQUFDc0IsVUFBQUEsS0FBSyxFQUFFdEIsTUFBTSxHQUFHO0FBQWpCO0FBQVgsUUFGUSxDQUFaO0FBSUg7O0FBRUQsd0JBQU87QUFBSyxNQUFBLFNBQVMsRUFBQztBQUFmLG9CQUNILDhDQUNJO0FBQUssTUFBQSxTQUFTLEVBQUM7QUFBZixvQkFDSTtBQUFJLE1BQUEsT0FBTyxFQUFFLEtBQUtjLEtBQUwsQ0FBV0ksUUFBWCxHQUFzQixNQUFNLENBQUUsQ0FBOUIsR0FBaUMsS0FBS0ssT0FBTCxDQUFhQyxJQUFiLENBQWtCLElBQWxCO0FBQTlDLE1BREosRUFFTUosU0FGTixDQURKLGVBS0k7QUFBSyxNQUFBLFNBQVMsRUFBQztBQUFmLE9BQ0tQLElBREwsQ0FMSixDQURHLENBQVA7QUFXSDs7QUFFRFUsRUFBQUEsT0FBTyxDQUFDRTtBQUFEO0FBQUEsSUFBMEI7QUFDN0IsVUFBTUgsS0FBSyxHQUFJRyxLQUFLLENBQUNDLE1BQVAsQ0FBOEJDLFdBQTVDLENBRDZCLENBRTdCO0FBQ0E7O0FBQ0EsVUFBTUMsYUFBYSxHQUFJSCxLQUFLLENBQUNJLFdBQU4sQ0FBa0JDLE9BQWxCLEdBQTRCUixLQUFuRDtBQUNBLFVBQU1TLFlBQVksR0FBRyxLQUFLakIsS0FBTCxDQUFXYixNQUFYLENBQWtCK0IsSUFBSSxDQUFDQyxLQUFMLENBQVdMLGFBQWEsSUFBSSxLQUFLZCxLQUFMLENBQVdiLE1BQVgsQ0FBa0JNLE1BQWxCLEdBQTJCLENBQS9CLENBQXhCLENBQWxCLENBQXJCO0FBQ0EsU0FBS08sS0FBTCxDQUFXSyxpQkFBWCxDQUE2QlksWUFBN0I7QUFDSDs7QUEzRXVELEM7OztBQTRGNUQsTUFBTUcsR0FBTixTQUFrQnBDLEtBQUssQ0FBQ3FDO0FBQXhCO0FBQWlEO0FBQzdDdkIsRUFBQUEsTUFBTTtBQUFBO0FBQW9CO0FBQ3RCLFFBQUl3QixTQUFTLEdBQUcsZUFBaEI7O0FBQ0EsUUFBSSxDQUFDLEtBQUt0QixLQUFMLENBQVdJLFFBQVosSUFBd0IsS0FBS0osS0FBTCxDQUFXdUIsTUFBdkMsRUFBK0M7QUFDM0NELE1BQUFBLFNBQVMsSUFBSSxzQkFBYjtBQUNIOztBQUVELHdCQUFPO0FBQU0sTUFBQSxPQUFPLEVBQUUsS0FBS3RCLEtBQUwsQ0FBV1MsT0FBMUI7QUFBbUMsTUFBQSxTQUFTLEVBQUM7QUFBN0Msb0JBQ0g7QUFBSyxNQUFBLFNBQVMsRUFBRWE7QUFBaEIsTUFERyxlQUVIO0FBQUssTUFBQSxTQUFTLEVBQUM7QUFBZixvQkFDSTtBQUFLLE1BQUEsU0FBUyxFQUFDO0FBQWYsT0FDSyxLQUFLdEIsS0FBTCxDQUFXd0IsS0FEaEIsQ0FESixDQUZHLENBQVA7QUFRSDs7QUFmNEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3JlcGxhY2VhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVwbGFjZWFibGVDb21wb25lbnRcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgLy8gQSBjYWxsYmFjayBmb3IgdGhlIHNlbGVjdGVkIHZhbHVlXG4gICAgb25TZWxlY3Rpb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkO1xuXG4gICAgLy8gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNsaWRlclxuICAgIHZhbHVlOiBudW1iZXI7XG5cbiAgICAvLyBUaGUgcmFuZ2UgYW5kIHZhbHVlcyBvZiB0aGUgc2xpZGVyXG4gICAgLy8gQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYW4gYXNjZW5kaW5nLCBjb25zdGFudCBpbnRlcnZhbCByYW5nZVxuICAgIHZhbHVlczogbnVtYmVyW107XG5cbiAgICAvLyBBIGZ1bmN0aW9uIGZvciBmb3JtYXR0aW5nIHRoZSB0aGUgdmFsdWVzXG4gICAgZGlzcGxheUZ1bmM6ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG5cbiAgICAvLyBXaGV0aGVyIHRoZSBzbGlkZXIgaXMgZGlzYWJsZWRcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuQHJlcGxhY2VhYmxlQ29tcG9uZW50KFwidmlld3MuZWxlbWVudHMuU2xpZGVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTbGlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SVByb3BzPiB7XG4gICAgLy8gb2Zmc2V0IGlzIGEgdGVycmlibGUgaW52ZXJzZSBhcHByb3hpbWF0aW9uLlxuICAgIC8vIGlmIHRoZSB2YWx1ZXMgcmVwcmVzZW50cyBzb21lIGZ1bmN0aW9uIGYoeCkgPSB5IHdoZXJlIHggaXMgdGhlXG4gICAgLy8gaW5kZXggb2YgdGhlIGFycmF5IGFuZCB5ID0gdmFsdWVzW3hdIHRoZW4gb2Zmc2V0KGYsIHkpID0geFxuICAgIC8vIHMudCBmKHgpID0geS5cbiAgICAvLyBpdCBhc3N1bWVzIGEgbW9ub3RvbmljIGZ1bmN0aW9uIGFuZCBpbnRlcnBvbGF0ZXMgbGluZWFybHkgYmV0d2VlblxuICAgIC8vIHkgdmFsdWVzLlxuICAgIC8vIE9mZnNldCBpcyB1c2VkIGZvciBmaW5kaW5nIHRoZSBsb2NhdGlvbiBvZiBhIHZhbHVlIG9uIGFcbiAgICAvLyBub24gbGluZWFyIHNsaWRlci5cbiAgICBwcml2YXRlIG9mZnNldCh2YWx1ZXM6IG51bWJlcltdLCB2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBudW1iZXIgZ3JlYXRlciB0aGFuIHZhbHVlLlxuICAgICAgICBjb25zdCBjbG9zZXN0ID0gdmFsdWVzLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA+IGN1cnIgPyBwcmV2ICsgMSA6IHByZXYpO1xuICAgICAgICB9LCAwKTtcblxuICAgICAgICAvLyBPZmYgdGhlIGxlZnRcbiAgICAgICAgaWYgKGNsb3Nlc3QgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2ZmIHRoZSByaWdodFxuICAgICAgICBpZiAoY2xvc2VzdCA9PT0gdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vd1xuICAgICAgICBjb25zdCBjbG9zZXN0TGVzc1ZhbHVlID0gdmFsdWVzW2Nsb3Nlc3QgLSAxXTtcbiAgICAgICAgY29uc3QgY2xvc2VzdEdyZWF0ZXJWYWx1ZSA9IHZhbHVlc1tjbG9zZXN0XTtcblxuICAgICAgICBjb25zdCBpbnRlcnZhbFdpZHRoID0gMSAvICh2YWx1ZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgY29uc3QgbGluZWFySW50ZXJwb2xhdGlvbiA9ICh2YWx1ZSAtIGNsb3Nlc3RMZXNzVmFsdWUpIC8gKGNsb3Nlc3RHcmVhdGVyVmFsdWUgLSBjbG9zZXN0TGVzc1ZhbHVlKTtcblxuICAgICAgICByZXR1cm4gMTAwICogKGNsb3Nlc3QgLSAxICsgbGluZWFySW50ZXJwb2xhdGlvbikgKiBpbnRlcnZhbFdpZHRoO1xuICAgIH1cblxuICAgIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgICAgICBjb25zdCBkb3RzID0gdGhpcy5wcm9wcy52YWx1ZXMubWFwKHYgPT4gPERvdFxuICAgICAgICAgICAgYWN0aXZlPXt2IDw9IHRoaXMucHJvcHMudmFsdWV9XG4gICAgICAgICAgICBsYWJlbD17dGhpcy5wcm9wcy5kaXNwbGF5RnVuYyh2KX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuZGlzYWJsZWQgPyAoKSA9PiB7fSA6ICgpID0+IHRoaXMucHJvcHMub25TZWxlY3Rpb25DaGFuZ2Uodil9XG4gICAgICAgICAgICBrZXk9e3Z9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgLz4pO1xuXG4gICAgICAgIGxldCBzZWxlY3Rpb24gPSBudWxsO1xuXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5vZmZzZXQodGhpcy5wcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWUpO1xuICAgICAgICAgICAgc2VsZWN0aW9uID0gPGRpdiBjbGFzc05hbWU9XCJteF9TbGlkZXJfc2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9TbGlkZXJfc2VsZWN0aW9uRG90XCIgc3R5bGU9e3tsZWZ0OiBcImNhbGMoLTAuNTVlbSArIFwiICsgb2Zmc2V0ICsgXCIlKVwifX0gLz5cbiAgICAgICAgICAgICAgICA8aHIgc3R5bGU9e3t3aWR0aDogb2Zmc2V0ICsgXCIlXCJ9fSAvPlxuICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibXhfU2xpZGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfU2xpZGVyX2JhclwiPlxuICAgICAgICAgICAgICAgICAgICA8aHIgb25DbGljaz17dGhpcy5wcm9wcy5kaXNhYmxlZCA/ICgpID0+IHt9IDogdGhpcy5vbkNsaWNrLmJpbmQodGhpcyl9IC8+XG4gICAgICAgICAgICAgICAgICAgIHsgc2VsZWN0aW9uIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NsaWRlcl9kb3RDb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAge2RvdHN9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+O1xuICAgIH1cblxuICAgIG9uQ2xpY2soZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGllbnRXaWR0aDtcbiAgICAgICAgLy8gbmF0aXZlRXZlbnQgaXMgc2FmZSB0byB1c2UgYmVjYXVzZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTW91c2VFdmVudC9vZmZzZXRYXG4gICAgICAgIC8vIGlzIHN1cHBvcnRlZCBieSBhbGwgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlQ2xpY2sgPSAoZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WCAvIHdpZHRoKTtcbiAgICAgICAgY29uc3QgbmVhcmVzdFZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZXNbTWF0aC5yb3VuZChyZWxhdGl2ZUNsaWNrICogKHRoaXMucHJvcHMudmFsdWVzLmxlbmd0aCAtIDEpKV07XG4gICAgICAgIHRoaXMucHJvcHMub25TZWxlY3Rpb25DaGFuZ2UobmVhcmVzdFZhbHVlKTtcbiAgICB9XG59XG5cbmludGVyZmFjZSBJRG90UHJvcHMge1xuICAgIC8vIENhbGxiYWNrIGZvciBiZWhhdmlvciBvbmNsaWNrXG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcblxuICAgIC8vIFdoZXRoZXIgdGhlIGRvdCBzaG91bGQgYXBwZWFyIGFjdGl2ZVxuICAgIGFjdGl2ZTogYm9vbGVhbjtcblxuICAgIC8vIFRoZSBsYWJlbCBvbiB0aGUgZG90XG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8vIFdoZXRoZXIgdGhlIHNsaWRlciBpcyBkaXNhYmxlZFxuICAgIGRpc2FibGVkOiBib29sZWFuO1xufVxuXG5jbGFzcyBEb3QgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PElEb3RQcm9wcz4ge1xuICAgIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJteF9TbGlkZXJfZG90XCI7XG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5kaXNhYmxlZCAmJiB0aGlzLnByb3BzLmFjdGl2ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIG14X1NsaWRlcl9kb3RBY3RpdmVcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiA8c3BhbiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9IGNsYXNzTmFtZT1cIm14X1NsaWRlcl9kb3RWYWx1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfU2xpZGVyX2xhYmVsQ29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9TbGlkZXJfbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPjtcbiAgICB9XG59XG4iXX0=