heartbeat-monitor/.next/static/webpack/app/page.591979329fc83864.hot-update.js
OpenClaw Bot 08f1ff6af8 Simplify UI with clean card grid layout
- Redesigned with simpler card-based grid layout
- Added grid/list view toggle
- Cleaner status badges (ONLINE/OFFLINE)
- Simplified stats display (2 stats per card)
- Removed complex animations and effects
- Easier to read and scan quickly
- Consistent spacing and typography
2026-02-18 13:39:41 -06:00

62 lines
231 KiB
JavaScript

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
self["webpackHotUpdate_N_E"]("app/page",{
/***/ "(app-pages-browser)/./node_modules/recharts/es6/cartesian/Line.js":
/*!*****************************************************!*\
!*** ./node_modules/recharts/es6/cartesian/Line.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Line: () => (/* binding */ Line)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_smooth__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-smooth */ \"(app-pages-browser)/./node_modules/react-smooth/es6/index.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isFunction */ \"(app-pages-browser)/./node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lodash_isNil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/isNil */ \"(app-pages-browser)/./node_modules/lodash/isNil.js\");\n/* harmony import */ var lodash_isNil__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_isNil__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lodash_isEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/isEqual */ \"(app-pages-browser)/./node_modules/lodash/isEqual.js\");\n/* harmony import */ var lodash_isEqual__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_isEqual__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"(app-pages-browser)/./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var _shape_Curve__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../shape/Curve */ \"(app-pages-browser)/./node_modules/recharts/es6/shape/Curve.js\");\n/* harmony import */ var _shape_Dot__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../shape/Dot */ \"(app-pages-browser)/./node_modules/recharts/es6/shape/Dot.js\");\n/* harmony import */ var _container_Layer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../container/Layer */ \"(app-pages-browser)/./node_modules/recharts/es6/container/Layer.js\");\n/* harmony import */ var _component_LabelList__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../component/LabelList */ \"(app-pages-browser)/./node_modules/recharts/es6/component/LabelList.js\");\n/* harmony import */ var _ErrorBar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ErrorBar */ \"(app-pages-browser)/./node_modules/recharts/es6/cartesian/ErrorBar.js\");\n/* harmony import */ var _util_DataUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/DataUtils */ \"(app-pages-browser)/./node_modules/recharts/es6/util/DataUtils.js\");\n/* harmony import */ var _util_ReactUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/ReactUtils */ \"(app-pages-browser)/./node_modules/recharts/es6/util/ReactUtils.js\");\n/* harmony import */ var _util_Global__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../util/Global */ \"(app-pages-browser)/./node_modules/recharts/es6/util/Global.js\");\n/* harmony import */ var _util_ChartUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../util/ChartUtils */ \"(app-pages-browser)/./node_modules/recharts/es6/util/ChartUtils.js\");\nvar _excluded = [\n \"type\",\n \"layout\",\n \"connectNulls\",\n \"ref\"\n], _excluded2 = [\n \"key\"\n];\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o) {\n return typeof o;\n } : function(o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for(i = 0; i < sourceSymbolKeys.length; i++){\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n for(var key in source){\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i];\n for(var key in source){\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function(r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread(e) {\n for(var r = 1; r < arguments.length; r++){\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function(r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _callSuper(t, o, e) {\n return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));\n}\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return _assertThisInitialized(self);\n}\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nfunction _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n })();\n}\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\n/**\n * @fileOverview Line\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Line = /*#__PURE__*/ function(_PureComponent) {\n function Line() {\n var _this;\n _classCallCheck(this, Line);\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Line, [].concat(args));\n _defineProperty(_this, \"state\", {\n isAnimationFinished: true,\n totalLength: 0\n });\n _defineProperty(_this, \"generateSimpleStrokeDasharray\", function(totalLength, length) {\n return \"\".concat(length, \"px \").concat(totalLength - length, \"px\");\n });\n _defineProperty(_this, \"getStrokeDasharray\", function(length, totalLength, lines) {\n var lineLength = lines.reduce(function(pre, next) {\n return pre + next;\n });\n // if lineLength is 0 return the default when no strokeDasharray is provided\n if (!lineLength) {\n return _this.generateSimpleStrokeDasharray(totalLength, length);\n }\n var count = Math.floor(length / lineLength);\n var remainLength = length % lineLength;\n var restLength = totalLength - length;\n var remainLines = [];\n for(var i = 0, sum = 0; i < lines.length; sum += lines[i], ++i){\n if (sum + lines[i] > remainLength) {\n remainLines = [].concat(_toConsumableArray(lines.slice(0, i)), [\n remainLength - sum\n ]);\n break;\n }\n }\n var emptyLines = remainLines.length % 2 === 0 ? [\n 0,\n restLength\n ] : [\n restLength\n ];\n return [].concat(_toConsumableArray(Line.repeat(lines, count)), _toConsumableArray(remainLines), emptyLines).map(function(line) {\n return \"\".concat(line, \"px\");\n }).join(', ');\n });\n _defineProperty(_this, \"id\", (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_5__.uniqueId)('recharts-line-'));\n _defineProperty(_this, \"pathRef\", function(node) {\n _this.mainCurve = node;\n });\n _defineProperty(_this, \"handleAnimationEnd\", function() {\n _this.setState({\n isAnimationFinished: true\n });\n if (_this.props.onAnimationEnd) {\n _this.props.onAnimationEnd();\n }\n });\n _defineProperty(_this, \"handleAnimationStart\", function() {\n _this.setState({\n isAnimationFinished: false\n });\n if (_this.props.onAnimationStart) {\n _this.props.onAnimationStart();\n }\n });\n return _this;\n }\n _inherits(Line, _PureComponent);\n return _createClass(Line, [\n {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!this.props.isAnimationActive) {\n return;\n }\n var totalLength = this.getTotalLength();\n this.setState({\n totalLength: totalLength\n });\n }\n },\n {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (!this.props.isAnimationActive) {\n return;\n }\n var totalLength = this.getTotalLength();\n if (totalLength !== this.state.totalLength) {\n this.setState({\n totalLength: totalLength\n });\n }\n }\n },\n {\n key: \"getTotalLength\",\n value: function getTotalLength() {\n var curveDom = this.mainCurve;\n try {\n return curveDom && curveDom.getTotalLength && curveDom.getTotalLength() || 0;\n } catch (err) {\n return 0;\n }\n }\n },\n {\n key: \"renderErrorBar\",\n value: function renderErrorBar(needClip, clipPathId) {\n if (this.props.isAnimationActive && !this.state.isAnimationFinished) {\n return null;\n }\n var _this$props = this.props, points = _this$props.points, xAxis = _this$props.xAxis, yAxis = _this$props.yAxis, layout = _this$props.layout, children = _this$props.children;\n var errorBarItems = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_6__.findAllByType)(children, _ErrorBar__WEBPACK_IMPORTED_MODULE_7__.ErrorBar);\n if (!errorBarItems) {\n return null;\n }\n var dataPointFormatter = function dataPointFormatter(dataPoint, dataKey) {\n return {\n x: dataPoint.x,\n y: dataPoint.y,\n value: dataPoint.value,\n errorVal: (0,_util_ChartUtils__WEBPACK_IMPORTED_MODULE_8__.getValueByDataKey)(dataPoint.payload, dataKey)\n };\n };\n var errorBarProps = {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null\n };\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_container_Layer__WEBPACK_IMPORTED_MODULE_9__.Layer, errorBarProps, errorBarItems.map(function(item) {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(item, {\n key: \"bar-\".concat(item.props.dataKey),\n data: points,\n xAxis: xAxis,\n yAxis: yAxis,\n layout: layout,\n dataPointFormatter: dataPointFormatter\n });\n }));\n }\n },\n {\n key: \"renderDots\",\n value: function renderDots(needClip, clipDot, clipPathId) {\n var isAnimationActive = this.props.isAnimationActive;\n if (isAnimationActive && !this.state.isAnimationFinished) {\n return null;\n }\n var _this$props2 = this.props, dot = _this$props2.dot, points = _this$props2.points, dataKey = _this$props2.dataKey;\n var lineProps = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_6__.filterProps)(this.props, false);\n var customDotProps = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_6__.filterProps)(dot, true);\n var dots = points.map(function(entry, i) {\n var dotProps = _objectSpread(_objectSpread(_objectSpread({\n key: \"dot-\".concat(i),\n r: 3\n }, lineProps), customDotProps), {}, {\n index: i,\n cx: entry.x,\n cy: entry.y,\n value: entry.value,\n dataKey: dataKey,\n payload: entry.payload,\n points: points\n });\n return Line.renderDotItem(dot, dotProps);\n });\n var dotsProps = {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipDot ? '' : 'dots-').concat(clipPathId, \")\") : null\n };\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_container_Layer__WEBPACK_IMPORTED_MODULE_9__.Layer, _extends({\n className: \"recharts-line-dots\",\n key: \"dots\"\n }, dotsProps), dots);\n }\n },\n {\n key: \"renderCurveStatically\",\n value: function renderCurveStatically(points, needClip, clipPathId, props) {\n var _this$props3 = this.props, type = _this$props3.type, layout = _this$props3.layout, connectNulls = _this$props3.connectNulls, ref = _this$props3.ref, others = _objectWithoutProperties(_this$props3, _excluded);\n var curveProps = _objectSpread(_objectSpread(_objectSpread({}, (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_6__.filterProps)(others, true)), {}, {\n fill: 'none',\n className: 'recharts-line-curve',\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null,\n points: points\n }, props), {}, {\n type: type,\n layout: layout,\n connectNulls: connectNulls\n });\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_shape_Curve__WEBPACK_IMPORTED_MODULE_10__.Curve, _extends({}, curveProps, {\n pathRef: this.pathRef\n }));\n }\n },\n {\n key: \"renderCurveWithAnimation\",\n value: function renderCurveWithAnimation(needClip, clipPathId) {\n var _this2 = this;\n var _this$props4 = this.props, points = _this$props4.points, strokeDasharray = _this$props4.strokeDasharray, isAnimationActive = _this$props4.isAnimationActive, animationBegin = _this$props4.animationBegin, animationDuration = _this$props4.animationDuration, animationEasing = _this$props4.animationEasing, animationId = _this$props4.animationId, animateNewValues = _this$props4.animateNewValues, width = _this$props4.width, height = _this$props4.height;\n var _this$state = this.state, prevPoints = _this$state.prevPoints, totalLength = _this$state.totalLength;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_smooth__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing,\n from: {\n t: 0\n },\n to: {\n t: 1\n },\n key: \"line-\".concat(animationId),\n onAnimationEnd: this.handleAnimationEnd,\n onAnimationStart: this.handleAnimationStart\n }, function(_ref) {\n var t = _ref.t;\n if (prevPoints) {\n var prevPointsDiffFactor = prevPoints.length / points.length;\n var stepData = points.map(function(entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n if (prevPoints[prevPointIndex]) {\n var prev = prevPoints[prevPointIndex];\n var interpolatorX = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_5__.interpolateNumber)(prev.x, entry.x);\n var interpolatorY = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_5__.interpolateNumber)(prev.y, entry.y);\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n // magic number of faking previous x and y location\n if (animateNewValues) {\n var _interpolatorX = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_5__.interpolateNumber)(width * 2, entry.x);\n var _interpolatorY = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_5__.interpolateNumber)(height / 2, entry.y);\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: _interpolatorX(t),\n y: _interpolatorY(t)\n });\n }\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: entry.x,\n y: entry.y\n });\n });\n return _this2.renderCurveStatically(stepData, needClip, clipPathId);\n }\n var interpolator = (0,_util_DataUtils__WEBPACK_IMPORTED_MODULE_5__.interpolateNumber)(0, totalLength);\n var curLength = interpolator(t);\n var currentStrokeDasharray;\n if (strokeDasharray) {\n var lines = \"\".concat(strokeDasharray).split(/[,\\s]+/gim).map(function(num) {\n return parseFloat(num);\n });\n currentStrokeDasharray = _this2.getStrokeDasharray(curLength, totalLength, lines);\n } else {\n currentStrokeDasharray = _this2.generateSimpleStrokeDasharray(totalLength, curLength);\n }\n return _this2.renderCurveStatically(points, needClip, clipPathId, {\n strokeDasharray: currentStrokeDasharray\n });\n });\n }\n },\n {\n key: \"renderCurve\",\n value: function renderCurve(needClip, clipPathId) {\n var _this$props5 = this.props, points = _this$props5.points, isAnimationActive = _this$props5.isAnimationActive;\n var _this$state2 = this.state, prevPoints = _this$state2.prevPoints, totalLength = _this$state2.totalLength;\n if (isAnimationActive && points && points.length && (!prevPoints && totalLength > 0 || !lodash_isEqual__WEBPACK_IMPORTED_MODULE_3___default()(prevPoints, points))) {\n return this.renderCurveWithAnimation(needClip, clipPathId);\n }\n return this.renderCurveStatically(points, needClip, clipPathId);\n }\n },\n {\n key: \"render\",\n value: function render() {\n var _filterProps;\n var _this$props6 = this.props, hide = _this$props6.hide, dot = _this$props6.dot, points = _this$props6.points, className = _this$props6.className, xAxis = _this$props6.xAxis, yAxis = _this$props6.yAxis, top = _this$props6.top, left = _this$props6.left, width = _this$props6.width, height = _this$props6.height, isAnimationActive = _this$props6.isAnimationActive, id = _this$props6.id;\n if (hide || !points || !points.length) {\n return null;\n }\n var isAnimationFinished = this.state.isAnimationFinished;\n var hasSinglePoint = points.length === 1;\n var layerClass = (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('recharts-line', className);\n var needClipX = xAxis && xAxis.allowDataOverflow;\n var needClipY = yAxis && yAxis.allowDataOverflow;\n var needClip = needClipX || needClipY;\n var clipPathId = lodash_isNil__WEBPACK_IMPORTED_MODULE_2___default()(id) ? this.id : id;\n var _ref2 = (_filterProps = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_6__.filterProps)(dot, false)) !== null && _filterProps !== void 0 ? _filterProps : {\n r: 3,\n strokeWidth: 2\n }, _ref2$r = _ref2.r, r = _ref2$r === void 0 ? 3 : _ref2$r, _ref2$strokeWidth = _ref2.strokeWidth, strokeWidth = _ref2$strokeWidth === void 0 ? 2 : _ref2$strokeWidth;\n var _ref3 = (0,_util_ReactUtils__WEBPACK_IMPORTED_MODULE_6__.hasClipDot)(dot) ? dot : {}, _ref3$clipDot = _ref3.clipDot, clipDot = _ref3$clipDot === void 0 ? true : _ref3$clipDot;\n var dotSize = r * 2 + strokeWidth;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_container_Layer__WEBPACK_IMPORTED_MODULE_9__.Layer, {\n className: layerClass\n }, needClipX || needClipY ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"defs\", null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"clipPath\", {\n id: \"clipPath-\".concat(clipPathId)\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n x: needClipX ? left : left - width / 2,\n y: needClipY ? top : top - height / 2,\n width: needClipX ? width : width * 2,\n height: needClipY ? height : height * 2\n })), !clipDot && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"clipPath\", {\n id: \"clipPath-dots-\".concat(clipPathId)\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n x: left - dotSize / 2,\n y: top - dotSize / 2,\n width: width + dotSize,\n height: height + dotSize\n }))) : null, !hasSinglePoint && this.renderCurve(needClip, clipPathId), this.renderErrorBar(needClip, clipPathId), (hasSinglePoint || dot) && this.renderDots(needClip, clipDot, clipPathId), (!isAnimationActive || isAnimationFinished) && _component_LabelList__WEBPACK_IMPORTED_MODULE_12__.LabelList.renderCallByParent(this.props, points));\n }\n }\n ], [\n {\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.animationId !== prevState.prevAnimationId) {\n return {\n prevAnimationId: nextProps.animationId,\n curPoints: nextProps.points,\n prevPoints: prevState.curPoints\n };\n }\n if (nextProps.points !== prevState.curPoints) {\n return {\n curPoints: nextProps.points\n };\n }\n return null;\n }\n },\n {\n key: \"repeat\",\n value: function repeat(lines, count) {\n var linesUnit = lines.length % 2 !== 0 ? [].concat(_toConsumableArray(lines), [\n 0\n ]) : lines;\n var result = [];\n for(var i = 0; i < count; ++i){\n result = [].concat(_toConsumableArray(result), _toConsumableArray(linesUnit));\n }\n return result;\n }\n },\n {\n key: \"renderDotItem\",\n value: function renderDotItem(option, props) {\n var dotItem;\n if (/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(option)) {\n dotItem = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(option, props);\n } else if (lodash_isFunction__WEBPACK_IMPORTED_MODULE_1___default()(option)) {\n dotItem = option(props);\n } else {\n var key = props.key, dotProps = _objectWithoutProperties(props, _excluded2);\n var className = (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])('recharts-line-dot', typeof option !== 'boolean' ? option.className : '');\n dotItem = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_shape_Dot__WEBPACK_IMPORTED_MODULE_13__.Dot, _extends({\n key: key\n }, dotProps, {\n className: className\n }));\n }\n return dotItem;\n }\n }\n ]);\n}(react__WEBPACK_IMPORTED_MODULE_0__.PureComponent);\n_defineProperty(Line, \"displayName\", 'Line');\n_defineProperty(Line, \"defaultProps\", {\n xAxisId: 0,\n yAxisId: 0,\n connectNulls: false,\n activeDot: true,\n dot: true,\n legendType: 'line',\n stroke: '#3182bd',\n strokeWidth: 1,\n fill: '#fff',\n points: [],\n isAnimationActive: !_util_Global__WEBPACK_IMPORTED_MODULE_14__.Global.isSsr,\n animateNewValues: true,\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease',\n hide: false,\n label: false\n});\n/**\n * Compose the data of each group\n * @param {Object} props The props from the component\n * @param {Object} xAxis The configuration of x-axis\n * @param {Object} yAxis The configuration of y-axis\n * @param {String} dataKey The unique key of a group\n * @return {Array} Composed data\n */ _defineProperty(Line, \"getComposedData\", function(_ref4) {\n var props = _ref4.props, xAxis = _ref4.xAxis, yAxis = _ref4.yAxis, xAxisTicks = _ref4.xAxisTicks, yAxisTicks = _ref4.yAxisTicks, dataKey = _ref4.dataKey, bandSize = _ref4.bandSize, displayedData = _ref4.displayedData, offset = _ref4.offset;\n var layout = props.layout;\n var points = displayedData.map(function(entry, index) {\n var value = (0,_util_ChartUtils__WEBPACK_IMPORTED_MODULE_8__.getValueByDataKey)(entry, dataKey);\n if (layout === 'horizontal') {\n return {\n x: (0,_util_ChartUtils__WEBPACK_IMPORTED_MODULE_8__.getCateCoordinateOfLine)({\n axis: xAxis,\n ticks: xAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n y: lodash_isNil__WEBPACK_IMPORTED_MODULE_2___default()(value) ? null : yAxis.scale(value),\n value: value,\n payload: entry\n };\n }\n return {\n x: lodash_isNil__WEBPACK_IMPORTED_MODULE_2___default()(value) ? null : xAxis.scale(value),\n y: (0,_util_ChartUtils__WEBPACK_IMPORTED_MODULE_8__.getCateCoordinateOfLine)({\n axis: yAxis,\n ticks: yAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n value: value,\n payload: entry\n };\n });\n return _objectSpread({\n points: points,\n layout: layout\n }, offset);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWNoYXJ0cy9lczYvY2FydGVzaWFuL0xpbmUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFJQSxZQUFZO0lBQUM7SUFBUTtJQUFVO0lBQWdCO0NBQU0sRUFDdkRDLGFBQWE7SUFBQztDQUFNO0FBQ3RCLFNBQVNDLFFBQVFDLENBQUM7SUFBSTtJQUEyQixPQUFPRCxVQUFVLGNBQWMsT0FBT0UsVUFBVSxZQUFZLE9BQU9BLE9BQU9DLFFBQVEsR0FBRyxTQUFVRixDQUFDO1FBQUksT0FBTyxPQUFPQTtJQUFHLElBQUksU0FBVUEsQ0FBQztRQUFJLE9BQU9BLEtBQUssY0FBYyxPQUFPQyxVQUFVRCxFQUFFRyxXQUFXLEtBQUtGLFVBQVVELE1BQU1DLE9BQU9HLFNBQVMsR0FBRyxXQUFXLE9BQU9KO0lBQUcsR0FBR0QsUUFBUUM7QUFBSTtBQUM3VCxTQUFTSyx5QkFBeUJDLE1BQU0sRUFBRUMsUUFBUTtJQUFJLElBQUlELFVBQVUsTUFBTSxPQUFPLENBQUM7SUFBRyxJQUFJRSxTQUFTQyw4QkFBOEJILFFBQVFDO0lBQVcsSUFBSUcsS0FBS0M7SUFBRyxJQUFJQyxPQUFPQyxxQkFBcUIsRUFBRTtRQUFFLElBQUlDLG1CQUFtQkYsT0FBT0MscUJBQXFCLENBQUNQO1FBQVMsSUFBS0ssSUFBSSxHQUFHQSxJQUFJRyxpQkFBaUJDLE1BQU0sRUFBRUosSUFBSztZQUFFRCxNQUFNSSxnQkFBZ0IsQ0FBQ0gsRUFBRTtZQUFFLElBQUlKLFNBQVNTLE9BQU8sQ0FBQ04sUUFBUSxHQUFHO1lBQVUsSUFBSSxDQUFDRSxPQUFPUixTQUFTLENBQUNhLG9CQUFvQixDQUFDQyxJQUFJLENBQUNaLFFBQVFJLE1BQU07WUFBVUYsTUFBTSxDQUFDRSxJQUFJLEdBQUdKLE1BQU0sQ0FBQ0ksSUFBSTtRQUFFO0lBQUU7SUFBRSxPQUFPRjtBQUFRO0FBQzNlLFNBQVNDLDhCQUE4QkgsTUFBTSxF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R3ZELHlFQUF1QkEsQ0FBQztnQkFDekIwSyxNQUFNM0g7Z0JBQ040SCxPQUFPTDtnQkFDUEMsVUFBVUE7Z0JBQ1ZoRyxPQUFPQTtnQkFDUEUsT0FBT0E7WUFDVDtZQUNBbkcsT0FBT0E7WUFDUG1GLFNBQVNjO1FBQ1g7SUFDRjtJQUNBLE9BQU96SixjQUFjO1FBQ25CK0gsUUFBUUE7UUFDUkcsUUFBUUE7SUFDVixHQUFHeUg7QUFDTCIsInNvdXJjZXMiOlsiL1VzZXJzL21hdHRicnVjZS9Eb2N1bWVudHMvUHJvamVjdHMvT3BlbkNsYXcvV2ViL2hlYXJ0YmVhdC1tb25pdG9yL25vZGVfbW9kdWxlcy9yZWNoYXJ0cy9lczYvY2FydGVzaWFuL0xpbmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJsYXlvdXRcIiwgXCJjb25uZWN0TnVsbHNcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJrZXlcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBfdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogZmFsc2UgfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEBmaWxlT3ZlcnZpZXcgTGluZVxuICovXG5pbXBvcnQgUmVhY3QsIHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBbmltYXRlIGZyb20gJ3JlYWN0LXNtb290aCc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICdsb2Rhc2gvaXNGdW5jdGlvbic7XG5pbXBvcnQgaXNOaWwgZnJvbSAnbG9kYXNoL2lzTmlsJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgQ3VydmUgfSBmcm9tICcuLi9zaGFwZS9DdXJ2ZSc7XG5pbXBvcnQgeyBEb3QgfSBmcm9tICcuLi9zaGFwZS9Eb3QnO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi9jb250YWluZXIvTGF5ZXInO1xuaW1wb3J0IHsgTGFiZWxMaXN0IH0gZnJvbSAnLi4vY29tcG9uZW50L0xhYmVsTGlzdCc7XG5pbXBvcnQgeyBFcnJvckJhciB9IGZyb20gJy4vRXJyb3JCYXInO1xuaW1wb3J0IHsgdW5pcXVlSWQsIGludGVycG9sYXRlTnVtYmVyIH0gZnJvbSAnLi4vdXRpbC9EYXRhVXRpbHMnO1xuaW1wb3J0IHsgZmluZEFsbEJ5VHlwZSwgZmlsdGVyUHJvcHMsIGhhc0NsaXBEb3QgfSBmcm9tICcuLi91dGlsL1JlYWN0VXRpbHMnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi4vdXRpbC9HbG9iYWwnO1xuaW1wb3J0IHsgZ2V0Q2F0ZUNvb3JkaW5hdGVPZkxpbmUsIGdldFZhbHVlQnlEYXRhS2V5IH0gZnJvbSAnLi4vdXRpbC9DaGFydFV0aWxzJztcbmV4cG9ydCB2YXIgTGluZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gTGluZSgpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmUpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIExpbmUsIFtdLmNvbmNhdChhcmdzKSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInN0YXRlXCIsIHtcbiAgICAgIGlzQW5pbWF0aW9uRmluaXNoZWQ6IHRydWUsXG4gICAgICB0b3RhbExlbmd0aDogMFxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJnZW5lcmF0ZVNpbXBsZVN0cm9rZURhc2hhcnJheVwiLCBmdW5jdGlvbiAodG90YWxMZW5ndGgsIGxlbmd0aCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGxlbmd0aCwgXCJweCBcIikuY29uY2F0KHRvdGFsTGVuZ3RoIC0gbGVuZ3RoLCBcInB4XCIpO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJnZXRTdHJva2VEYXNoYXJyYXlcIiwgZnVuY3Rpb24gKGxlbmd0aCwgdG90YWxMZW5ndGgsIGxpbmVzKSB7XG4gICAgICB2YXIgbGluZUxlbmd0aCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAocHJlLCBuZXh0KSB7XG4gICAgICAgIHJldHVybiBwcmUgKyBuZXh0O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGlmIGxpbmVMZW5ndGggaXMgMCByZXR1cm4gdGhlIGRlZmF1bHQgd2hlbiBubyBzdHJva2VEYXNoYXJyYXkgaXMgcHJvdmlkZWRcbiAgICAgIGlmICghbGluZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZ2VuZXJhdGVTaW1wbGVTdHJva2VEYXNoYXJyYXkodG90YWxMZW5ndGgsIGxlbmd0aCk7XG4gICAgICB9XG4gICAgICB2YXIgY291bnQgPSBNYXRoLmZsb29yKGxlbmd0aCAvIGxpbmVMZW5ndGgpO1xuICAgICAgdmFyIHJlbWFpbkxlbmd0aCA9IGxlbmd0aCAlIGxpbmVMZW5ndGg7XG4gICAgICB2YXIgcmVzdExlbmd0aCA9IHRvdGFsTGVuZ3RoIC0gbGVuZ3RoO1xuICAgICAgdmFyIHJlbWFpbkxpbmVzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMCwgc3VtID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgc3VtICs9IGxpbmVzW2ldLCArK2kpIHtcbiAgICAgICAgaWYgKHN1bSArIGxpbmVzW2ldID4gcmVtYWluTGVuZ3RoKSB7XG4gICAgICAgICAgcmVtYWluTGluZXMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGxpbmVzLnNsaWNlKDAsIGkpKSwgW3JlbWFpbkxlbmd0aCAtIHN1bV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZW1wdHlMaW5lcyA9IHJlbWFpbkxpbmVzLmxlbmd0aCAlIDIgPT09IDAgPyBbMCwgcmVzdExlbmd0aF0gOiBbcmVzdExlbmd0aF07XG4gICAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShMaW5lLnJlcGVhdChsaW5lcywgY291bnQpKSwgX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbkxpbmVzKSwgZW1wdHlMaW5lcykubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChsaW5lLCBcInB4XCIpO1xuICAgICAgfSkuam9pbignLCAnKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaWRcIiwgdW5pcXVlSWQoJ3JlY2hhcnRzLWxpbmUtJykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJwYXRoUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5tYWluQ3VydmUgPSBub2RlO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJoYW5kbGVBbmltYXRpb25FbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0FuaW1hdGlvbkZpbmlzaGVkOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkFuaW1hdGlvbkVuZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkFuaW1hdGlvbkVuZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJoYW5kbGVBbmltYXRpb25TdGFydFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzQW5pbWF0aW9uRmluaXNoZWQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkFuaW1hdGlvblN0YXJ0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uQW5pbWF0aW9uU3RhcnQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKExpbmUsIF9QdXJlQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhMaW5lLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5pc0FuaW1hdGlvbkFjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgdG90YWxMZW5ndGggPSB0aGlzLmdldFRvdGFsTGVuZ3RoKCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdG90YWxMZW5ndGg6IHRvdGFsTGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5pc0FuaW1hdGlvbkFjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgdG90YWxMZW5ndGggPSB0aGlzLmdldFRvdGFsTGVuZ3RoKCk7XG4gICAgICBpZiAodG90YWxMZW5ndGggIT09IHRoaXMuc3RhdGUudG90YWxMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdG90YWxMZW5ndGg6IHRvdGFsTGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRUb3RhbExlbmd0aFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUb3RhbExlbmd0aCgpIHtcbiAgICAgIHZhciBjdXJ2ZURvbSA9IHRoaXMubWFpbkN1cnZlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGN1cnZlRG9tICYmIGN1cnZlRG9tLmdldFRvdGFsTGVuZ3RoICYmIGN1cnZlRG9tLmdldFRvdGFsTGVuZ3RoKCkgfHwgMDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRXJyb3JCYXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRXJyb3JCYXIobmVlZENsaXAsIGNsaXBQYXRoSWQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmlzQW5pbWF0aW9uQWN0aXZlICYmICF0aGlzLnN0YXRlLmlzQW5pbWF0aW9uRmluaXNoZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBwb2ludHMgPSBfdGhpcyRwcm9wcy5wb2ludHMsXG4gICAgICAgIHhBeGlzID0gX3RoaXMkcHJvcHMueEF4aXMsXG4gICAgICAgIHlBeGlzID0gX3RoaXMkcHJvcHMueUF4aXMsXG4gICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzLmxheW91dCxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBlcnJvckJhckl0ZW1zID0gZmluZEFsbEJ5VHlwZShjaGlsZHJlbiwgRXJyb3JCYXIpO1xuICAgICAgaWYgKCFlcnJvckJhckl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGFQb2ludEZvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGFQb2ludEZvcm1hdHRlcihkYXRhUG9pbnQsIGRhdGFLZXkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBkYXRhUG9pbnQueCxcbiAgICAgICAgICB5OiBkYXRhUG9pbnQueSxcbiAgICAgICAgICB2YWx1ZTogZGF0YVBvaW50LnZhbHVlLFxuICAgICAgICAgIGVycm9yVmFsOiBnZXRWYWx1ZUJ5RGF0YUtleShkYXRhUG9pbnQucGF5bG9hZCwgZGF0YUtleSlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICB2YXIgZXJyb3JCYXJQcm9wcyA9IHtcbiAgICAgICAgY2xpcFBhdGg6IG5lZWRDbGlwID8gXCJ1cmwoI2NsaXBQYXRoLVwiLmNvbmNhdChjbGlwUGF0aElkLCBcIilcIikgOiBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExheWVyLCBlcnJvckJhclByb3BzLCBlcnJvckJhckl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChpdGVtLCB7XG4gICAgICAgICAga2V5OiBcImJhci1cIi5jb25jYXQoaXRlbS5wcm9wcy5kYXRhS2V5KSxcbiAgICAgICAgICBkYXRhOiBwb2ludHMsXG4gICAgICAgICAgeEF4aXM6IHhBeGlzLFxuICAgICAgICAgIHlBeGlzOiB5QXhpcyxcbiAgICAgICAgICBsYXlvdXQ6IGxheW91dCxcbiAgICAgICAgICBkYXRhUG9pbnRGb3JtYXR0ZXI6IGRhdGFQb2ludEZvcm1hdHRlclxuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRG90c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJEb3RzKG5lZWRDbGlwLCBjbGlwRG90LCBjbGlwUGF0aElkKSB7XG4gICAgICB2YXIgaXNBbmltYXRpb25BY3RpdmUgPSB0aGlzLnByb3BzLmlzQW5pbWF0aW9uQWN0aXZlO1xuICAgICAgaWYgKGlzQW5pbWF0aW9uQWN0aXZlICYmICF0aGlzLnN0YXRlLmlzQW5pbWF0aW9uRmluaXNoZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZG90ID0gX3RoaXMkcHJvcHMyLmRvdCxcbiAgICAgICAgcG9pbnRzID0gX3RoaXMkcHJvcHMyLnBvaW50cyxcbiAgICAgICAgZGF0YUtleSA9IF90aGlzJHByb3BzMi5kYXRhS2V5O1xuICAgICAgdmFyIGxpbmVQcm9wcyA9IGZpbHRlclByb3BzKHRoaXMucHJvcHMsIGZhbHNlKTtcbiAgICAgIHZhciBjdXN0b21Eb3RQcm9wcyA9IGZpbHRlclByb3BzKGRvdCwgdHJ1ZSk7XG4gICAgICB2YXIgZG90cyA9IHBvaW50cy5tYXAoZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gICAgICAgIHZhciBkb3RQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICBrZXk6IFwiZG90LVwiLmNvbmNhdChpKSxcbiAgICAgICAgICByOiAzXG4gICAgICAgIH0sIGxpbmVQcm9wcyksIGN1c3RvbURvdFByb3BzKSwge30sIHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICBjeDogZW50cnkueCxcbiAgICAgICAgICBjeTogZW50cnkueSxcbiAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUsXG4gICAgICAgICAgZGF0YUtleTogZGF0YUtleSxcbiAgICAgICAgICBwYXlsb2FkOiBlbnRyeS5wYXlsb2FkLFxuICAgICAgICAgIHBvaW50czogcG9pbnRzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gTGluZS5yZW5kZXJEb3RJdGVtKGRvdCwgZG90UHJvcHMpO1xuICAgICAgfSk7XG4gICAgICB2YXIgZG90c1Byb3BzID0ge1xuICAgICAgICBjbGlwUGF0aDogbmVlZENsaXAgPyBcInVybCgjY2xpcFBhdGgtXCIuY29uY2F0KGNsaXBEb3QgPyAnJyA6ICdkb3RzLScpLmNvbmNhdChjbGlwUGF0aElkLCBcIilcIikgOiBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExheWVyLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogXCJyZWNoYXJ0cy1saW5lLWRvdHNcIixcbiAgICAgICAga2V5OiBcImRvdHNcIlxuICAgICAgfSwgZG90c1Byb3BzKSwgZG90cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckN1cnZlU3RhdGljYWxseVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDdXJ2ZVN0YXRpY2FsbHkocG9pbnRzLCBuZWVkQ2xpcCwgY2xpcFBhdGhJZCwgcHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHMzLnR5cGUsXG4gICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMy5sYXlvdXQsXG4gICAgICAgIGNvbm5lY3ROdWxscyA9IF90aGlzJHByb3BzMy5jb25uZWN0TnVsbHMsXG4gICAgICAgIHJlZiA9IF90aGlzJHByb3BzMy5yZWYsXG4gICAgICAgIG90aGVycyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczMsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgY3VydmVQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmaWx0ZXJQcm9wcyhvdGhlcnMsIHRydWUpKSwge30sIHtcbiAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICBjbGFzc05hbWU6ICdyZWNoYXJ0cy1saW5lLWN1cnZlJyxcbiAgICAgICAgY2xpcFBhdGg6IG5lZWRDbGlwID8gXCJ1cmwoI2NsaXBQYXRoLVwiLmNvbmNhdChjbGlwUGF0aElkLCBcIilcIikgOiBudWxsLFxuICAgICAgICBwb2ludHM6IHBvaW50c1xuICAgICAgfSwgcHJvcHMpLCB7fSwge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBsYXlvdXQ6IGxheW91dCxcbiAgICAgICAgY29ubmVjdE51bGxzOiBjb25uZWN0TnVsbHNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEN1cnZlLCBfZXh0ZW5kcyh7fSwgY3VydmVQcm9wcywge1xuICAgICAgICBwYXRoUmVmOiB0aGlzLnBhdGhSZWZcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ3VydmVXaXRoQW5pbWF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckN1cnZlV2l0aEFuaW1hdGlvbihuZWVkQ2xpcCwgY2xpcFBhdGhJZCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgcG9pbnRzID0gX3RoaXMkcHJvcHM0LnBvaW50cyxcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5ID0gX3RoaXMkcHJvcHM0LnN0cm9rZURhc2hhcnJheSxcbiAgICAgICAgaXNBbmltYXRpb25BY3RpdmUgPSBfdGhpcyRwcm9wczQuaXNBbmltYXRpb25BY3RpdmUsXG4gICAgICAgIGFuaW1hdGlvbkJlZ2luID0gX3RoaXMkcHJvcHM0LmFuaW1hdGlvbkJlZ2luLFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbiA9IF90aGlzJHByb3BzNC5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgICAgYW5pbWF0aW9uRWFzaW5nID0gX3RoaXMkcHJvcHM0LmFuaW1hdGlvbkVhc2luZyxcbiAgICAgICAgYW5pbWF0aW9uSWQgPSBfdGhpcyRwcm9wczQuYW5pbWF0aW9uSWQsXG4gICAgICAgIGFuaW1hdGVOZXdWYWx1ZXMgPSBfdGhpcyRwcm9wczQuYW5pbWF0ZU5ld1ZhbHVlcyxcbiAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczQud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNC5oZWlnaHQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBwcmV2UG9pbnRzID0gX3RoaXMkc3RhdGUucHJldlBvaW50cyxcbiAgICAgICAgdG90YWxMZW5ndGggPSBfdGhpcyRzdGF0ZS50b3RhbExlbmd0aDtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBbmltYXRlLCB7XG4gICAgICAgIGJlZ2luOiBhbmltYXRpb25CZWdpbixcbiAgICAgICAgZHVyYXRpb246IGFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICBpc0FjdGl2ZTogaXNBbmltYXRpb25BY3RpdmUsXG4gICAgICAgIGVhc2luZzogYW5pbWF0aW9uRWFzaW5nLFxuICAgICAgICBmcm9tOiB7XG4gICAgICAgICAgdDogMFxuICAgICAgICB9LFxuICAgICAgICB0bzoge1xuICAgICAgICAgIHQ6IDFcbiAgICAgICAgfSxcbiAgICAgICAga2V5OiBcImxpbmUtXCIuY29uY2F0KGFuaW1hdGlvbklkKSxcbiAgICAgICAgb25BbmltYXRpb25FbmQ6IHRoaXMuaGFuZGxlQW5pbWF0aW9uRW5kLFxuICAgICAgICBvbkFuaW1hdGlvblN0YXJ0OiB0aGlzLmhhbmRsZUFuaW1hdGlvblN0YXJ0XG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgdCA9IF9yZWYudDtcbiAgICAgICAgaWYgKHByZXZQb2ludHMpIHtcbiAgICAgICAgICB2YXIgcHJldlBvaW50c0RpZmZGYWN0b3IgPSBwcmV2UG9pbnRzLmxlbmd0aCAvIHBvaW50cy5sZW5ndGg7XG4gICAgICAgICAgdmFyIHN0ZXBEYXRhID0gcG9pbnRzLm1hcChmdW5jdGlvbiAoZW50cnksIGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgcHJldlBvaW50SW5kZXggPSBNYXRoLmZsb29yKGluZGV4ICogcHJldlBvaW50c0RpZmZGYWN0b3IpO1xuICAgICAgICAgICAgaWYgKHByZXZQb2ludHNbcHJldlBvaW50SW5kZXhdKSB7XG4gICAgICAgICAgICAgIHZhciBwcmV2ID0gcHJldlBvaW50c1twcmV2UG9pbnRJbmRleF07XG4gICAgICAgICAgICAgIHZhciBpbnRlcnBvbGF0b3JYID0gaW50ZXJwb2xhdGVOdW1iZXIocHJldi54LCBlbnRyeS54KTtcbiAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRvclkgPSBpbnRlcnBvbGF0ZU51bWJlcihwcmV2LnksIGVudHJ5LnkpO1xuICAgICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbnRyeSksIHt9LCB7XG4gICAgICAgICAgICAgICAgeDogaW50ZXJwb2xhdG9yWCh0KSxcbiAgICAgICAgICAgICAgICB5OiBpbnRlcnBvbGF0b3JZKHQpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtYWdpYyBudW1iZXIgb2YgZmFraW5nIHByZXZpb3VzIHggYW5kIHkgbG9jYXRpb25cbiAgICAgICAgICAgIGlmIChhbmltYXRlTmV3VmFsdWVzKSB7XG4gICAgICAgICAgICAgIHZhciBfaW50ZXJwb2xhdG9yWCA9IGludGVycG9sYXRlTnVtYmVyKHdpZHRoICogMiwgZW50cnkueCk7XG4gICAgICAgICAgICAgIHZhciBfaW50ZXJwb2xhdG9yWSA9IGludGVycG9sYXRlTnVtYmVyKGhlaWdodCAvIDIsIGVudHJ5LnkpO1xuICAgICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbnRyeSksIHt9LCB7XG4gICAgICAgICAgICAgICAgeDogX2ludGVycG9sYXRvclgodCksXG4gICAgICAgICAgICAgICAgeTogX2ludGVycG9sYXRvclkodClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbnRyeSksIHt9LCB7XG4gICAgICAgICAgICAgIHg6IGVudHJ5LngsXG4gICAgICAgICAgICAgIHk6IGVudHJ5LnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBfdGhpczIucmVuZGVyQ3VydmVTdGF0aWNhbGx5KHN0ZXBEYXRhLCBuZWVkQ2xpcCwgY2xpcFBhdGhJZCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGludGVycG9sYXRvciA9IGludGVycG9sYXRlTnVtYmVyKDAsIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgdmFyIGN1ckxlbmd0aCA9IGludGVycG9sYXRvcih0KTtcbiAgICAgICAgdmFyIGN1cnJlbnRTdHJva2VEYXNoYXJyYXk7XG4gICAgICAgIGlmIChzdHJva2VEYXNoYXJyYXkpIHtcbiAgICAgICAgICB2YXIgbGluZXMgPSBcIlwiLmNvbmNhdChzdHJva2VEYXNoYXJyYXkpLnNwbGl0KC9bLFxcc10rL2dpbSkubWFwKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3VycmVudFN0cm9rZURhc2hhcnJheSA9IF90aGlzMi5nZXRTdHJva2VEYXNoYXJyYXkoY3VyTGVuZ3RoLCB0b3RhbExlbmd0aCwgbGluZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRTdHJva2VEYXNoYXJyYXkgPSBfdGhpczIuZ2VuZXJhdGVTaW1wbGVTdHJva2VEYXNoYXJyYXkodG90YWxMZW5ndGgsIGN1ckxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzMi5yZW5kZXJDdXJ2ZVN0YXRpY2FsbHkocG9pbnRzLCBuZWVkQ2xpcCwgY2xpcFBhdGhJZCwge1xuICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogY3VycmVudFN0cm9rZURhc2hhcnJheVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDdXJ2ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDdXJ2ZShuZWVkQ2xpcCwgY2xpcFBhdGhJZCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIHBvaW50cyA9IF90aGlzJHByb3BzNS5wb2ludHMsXG4gICAgICAgIGlzQW5pbWF0aW9uQWN0aXZlID0gX3RoaXMkcHJvcHM1LmlzQW5pbWF0aW9uQWN0aXZlO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHByZXZQb2ludHMgPSBfdGhpcyRzdGF0ZTIucHJldlBvaW50cyxcbiAgICAgICAgdG90YWxMZW5ndGggPSBfdGhpcyRzdGF0ZTIudG90YWxMZW5ndGg7XG4gICAgICBpZiAoaXNBbmltYXRpb25BY3RpdmUgJiYgcG9pbnRzICYmIHBvaW50cy5sZW5ndGggJiYgKCFwcmV2UG9pbnRzICYmIHRvdGFsTGVuZ3RoID4gMCB8fCAhaXNFcXVhbChwcmV2UG9pbnRzLCBwb2ludHMpKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDdXJ2ZVdpdGhBbmltYXRpb24obmVlZENsaXAsIGNsaXBQYXRoSWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3VydmVTdGF0aWNhbGx5KHBvaW50cywgbmVlZENsaXAsIGNsaXBQYXRoSWQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF9maWx0ZXJQcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICBoaWRlID0gX3RoaXMkcHJvcHM2LmhpZGUsXG4gICAgICAgIGRvdCA9IF90aGlzJHByb3BzNi5kb3QsXG4gICAgICAgIHBvaW50cyA9IF90aGlzJHByb3BzNi5wb2ludHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNi5jbGFzc05hbWUsXG4gICAgICAgIHhBeGlzID0gX3RoaXMkcHJvcHM2LnhBeGlzLFxuICAgICAgICB5QXhpcyA9IF90aGlzJHByb3BzNi55QXhpcyxcbiAgICAgICAgdG9wID0gX3RoaXMkcHJvcHM2LnRvcCxcbiAgICAgICAgbGVmdCA9IF90aGlzJHByb3BzNi5sZWZ0LFxuICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNi53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM2LmhlaWdodCxcbiAgICAgICAgaXNBbmltYXRpb25BY3RpdmUgPSBfdGhpcyRwcm9wczYuaXNBbmltYXRpb25BY3RpdmUsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHM2LmlkO1xuICAgICAgaWYgKGhpZGUgfHwgIXBvaW50cyB8fCAhcG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBpc0FuaW1hdGlvbkZpbmlzaGVkID0gdGhpcy5zdGF0ZS5pc0FuaW1hdGlvbkZpbmlzaGVkO1xuICAgICAgdmFyIGhhc1NpbmdsZVBvaW50ID0gcG9pbnRzLmxlbmd0aCA9PT0gMTtcbiAgICAgIHZhciBsYXllckNsYXNzID0gY2xzeCgncmVjaGFydHMtbGluZScsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgbmVlZENsaXBYID0geEF4aXMgJiYgeEF4aXMuYWxsb3dEYXRhT3ZlcmZsb3c7XG4gICAgICB2YXIgbmVlZENsaXBZID0geUF4aXMgJiYgeUF4aXMuYWxsb3dEYXRhT3ZlcmZsb3c7XG4gICAgICB2YXIgbmVlZENsaXAgPSBuZWVkQ2xpcFggfHwgbmVlZENsaXBZO1xuICAgICAgdmFyIGNsaXBQYXRoSWQgPSBpc05pbChpZCkgPyB0aGlzLmlkIDogaWQ7XG4gICAgICB2YXIgX3JlZjIgPSAoX2ZpbHRlclByb3BzID0gZmlsdGVyUHJvcHMoZG90LCBmYWxzZSkpICE9PSBudWxsICYmIF9maWx0ZXJQcm9wcyAhPT0gdm9pZCAwID8gX2ZpbHRlclByb3BzIDoge1xuICAgICAgICAgIHI6IDMsXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDJcbiAgICAgICAgfSxcbiAgICAgICAgX3JlZjIkciA9IF9yZWYyLnIsXG4gICAgICAgIHIgPSBfcmVmMiRyID09PSB2b2lkIDAgPyAzIDogX3JlZjIkcixcbiAgICAgICAgX3JlZjIkc3Ryb2tlV2lkdGggPSBfcmVmMi5zdHJva2VXaWR0aCxcbiAgICAgICAgc3Ryb2tlV2lkdGggPSBfcmVmMiRzdHJva2VXaWR0aCA9PT0gdm9pZCAwID8gMiA6IF9yZWYyJHN0cm9rZVdpZHRoO1xuICAgICAgdmFyIF9yZWYzID0gaGFzQ2xpcERvdChkb3QpID8gZG90IDoge30sXG4gICAgICAgIF9yZWYzJGNsaXBEb3QgPSBfcmVmMy5jbGlwRG90LFxuICAgICAgICBjbGlwRG90ID0gX3JlZjMkY2xpcERvdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYzJGNsaXBEb3Q7XG4gICAgICB2YXIgZG90U2l6ZSA9IHIgKiAyICsgc3Ryb2tlV2lkdGg7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5ZXIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBsYXllckNsYXNzXG4gICAgICB9LCBuZWVkQ2xpcFggfHwgbmVlZENsaXBZID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIiwge1xuICAgICAgICBpZDogXCJjbGlwUGF0aC1cIi5jb25jYXQoY2xpcFBhdGhJZClcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgICAgIHg6IG5lZWRDbGlwWCA/IGxlZnQgOiBsZWZ0IC0gd2lkdGggLyAyLFxuICAgICAgICB5OiBuZWVkQ2xpcFkgPyB0b3AgOiB0b3AgLSBoZWlnaHQgLyAyLFxuICAgICAgICB3aWR0aDogbmVlZENsaXBYID8gd2lkdGggOiB3aWR0aCAqIDIsXG4gICAgICAgIGhlaWdodDogbmVlZENsaXBZID8gaGVpZ2h0IDogaGVpZ2h0ICogMlxuICAgICAgfSkpLCAhY2xpcERvdCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNsaXBQYXRoXCIsIHtcbiAgICAgICAgaWQ6IFwiY2xpcFBhdGgtZG90cy1cIi5jb25jYXQoY2xpcFBhdGhJZClcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgICAgIHg6IGxlZnQgLSBkb3RTaXplIC8gMixcbiAgICAgICAgeTogdG9wIC0gZG90U2l6ZSAvIDIsXG4gICAgICAgIHdpZHRoOiB3aWR0aCArIGRvdFNpemUsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0ICsgZG90U2l6ZVxuICAgICAgfSkpKSA6IG51bGwsICFoYXNTaW5nbGVQb2ludCAmJiB0aGlzLnJlbmRlckN1cnZlKG5lZWRDbGlwLCBjbGlwUGF0aElkKSwgdGhpcy5yZW5kZXJFcnJvckJhcihuZWVkQ2xpcCwgY2xpcFBhdGhJZCksIChoYXNTaW5nbGVQb2ludCB8fCBkb3QpICYmIHRoaXMucmVuZGVyRG90cyhuZWVkQ2xpcCwgY2xpcERvdCwgY2xpcFBhdGhJZCksICghaXNBbmltYXRpb25BY3RpdmUgfHwgaXNBbmltYXRpb25GaW5pc2hlZCkgJiYgTGFiZWxMaXN0LnJlbmRlckNhbGxCeVBhcmVudCh0aGlzLnByb3BzLCBwb2ludHMpKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAobmV4dFByb3BzLmFuaW1hdGlvbklkICE9PSBwcmV2U3RhdGUucHJldkFuaW1hdGlvbklkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldkFuaW1hdGlvbklkOiBuZXh0UHJvcHMuYW5pbWF0aW9uSWQsXG4gICAgICAgICAgY3VyUG9pbnRzOiBuZXh0UHJvcHMucG9pbnRzLFxuICAgICAgICAgIHByZXZQb2ludHM6IHByZXZTdGF0ZS5jdXJQb2ludHNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0UHJvcHMucG9pbnRzICE9PSBwcmV2U3RhdGUuY3VyUG9pbnRzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY3VyUG9pbnRzOiBuZXh0UHJvcHMucG9pbnRzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVwZWF0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlcGVhdChsaW5lcywgY291bnQpIHtcbiAgICAgIHZhciBsaW5lc1VuaXQgPSBsaW5lcy5sZW5ndGggJSAyICE9PSAwID8gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShsaW5lcyksIFswXSkgOiBsaW5lcztcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICByZXN1bHQgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlc3VsdCksIF90b0NvbnN1bWFibGVBcnJheShsaW5lc1VuaXQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRvdEl0ZW1cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRG90SXRlbShvcHRpb24sIHByb3BzKSB7XG4gICAgICB2YXIgZG90SXRlbTtcbiAgICAgIGlmICggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KG9wdGlvbikpIHtcbiAgICAgICAgZG90SXRlbSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQob3B0aW9uLCBwcm9wcyk7XG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24ob3B0aW9uKSkge1xuICAgICAgICBkb3RJdGVtID0gb3B0aW9uKHByb3BzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wcy5rZXksXG4gICAgICAgICAgZG90UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZDIpO1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gY2xzeCgncmVjaGFydHMtbGluZS1kb3QnLCB0eXBlb2Ygb3B0aW9uICE9PSAnYm9vbGVhbicgPyBvcHRpb24uY2xhc3NOYW1lIDogJycpO1xuICAgICAgICBkb3RJdGVtID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRG90LCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgfSwgZG90UHJvcHMsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG90SXRlbTtcbiAgICB9XG4gIH1dKTtcbn0oUHVyZUNvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoTGluZSwgXCJkaXNwbGF5TmFtZVwiLCAnTGluZScpO1xuX2RlZmluZVByb3BlcnR5KExpbmUsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgeEF4aXNJZDogMCxcbiAgeUF4aXNJZDogMCxcbiAgY29ubmVjdE51bGxzOiBmYWxzZSxcbiAgYWN0aXZlRG90OiB0cnVlLFxuICBkb3Q6IHRydWUsXG4gIGxlZ2VuZFR5cGU6ICdsaW5lJyxcbiAgc3Ryb2tlOiAnIzMxODJiZCcsXG4gIHN0cm9rZVdpZHRoOiAxLFxuICBmaWxsOiAnI2ZmZicsXG4gIHBvaW50czogW10sXG4gIGlzQW5pbWF0aW9uQWN0aXZlOiAhR2xvYmFsLmlzU3NyLFxuICBhbmltYXRlTmV3VmFsdWVzOiB0cnVlLFxuICBhbmltYXRpb25CZWdpbjogMCxcbiAgYW5pbWF0aW9uRHVyYXRpb246IDE1MDAsXG4gIGFuaW1hdGlvbkVhc2luZzogJ2Vhc2UnLFxuICBoaWRlOiBmYWxzZSxcbiAgbGFiZWw6IGZhbHNlXG59KTtcbi8qKlxuICogQ29tcG9zZSB0aGUgZGF0YSBvZiBlYWNoIGdyb3VwXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BzIGZyb20gdGhlIGNvbXBvbmVudFxuICogQHBhcmFtICB7T2JqZWN0fSB4QXhpcyAgIFRoZSBjb25maWd1cmF0aW9uIG9mIHgtYXhpc1xuICogQHBhcmFtICB7T2JqZWN0fSB5QXhpcyAgIFRoZSBjb25maWd1cmF0aW9uIG9mIHktYXhpc1xuICogQHBhcmFtICB7U3RyaW5nfSBkYXRhS2V5IFRoZSB1bmlxdWUga2V5IG9mIGEgZ3JvdXBcbiAqIEByZXR1cm4ge0FycmF5fSAgQ29tcG9zZWQgZGF0YVxuICovXG5fZGVmaW5lUHJvcGVydHkoTGluZSwgXCJnZXRDb21wb3NlZERhdGFcIiwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gIHZhciBwcm9wcyA9IF9yZWY0LnByb3BzLFxuICAgIHhBeGlzID0gX3JlZjQueEF4aXMsXG4gICAgeUF4aXMgPSBfcmVmNC55QXhpcyxcbiAgICB4QXhpc1RpY2tzID0gX3JlZjQueEF4aXNUaWNrcyxcbiAgICB5QXhpc1RpY2tzID0gX3JlZjQueUF4aXNUaWNrcyxcbiAgICBkYXRhS2V5ID0gX3JlZjQuZGF0YUtleSxcbiAgICBiYW5kU2l6ZSA9IF9yZWY0LmJhbmRTaXplLFxuICAgIGRpc3BsYXllZERhdGEgPSBfcmVmNC5kaXNwbGF5ZWREYXRhLFxuICAgIG9mZnNldCA9IF9yZWY0Lm9mZnNldDtcbiAgdmFyIGxheW91dCA9IHByb3BzLmxheW91dDtcbiAgdmFyIHBvaW50cyA9IGRpc3BsYXllZERhdGEubWFwKGZ1bmN0aW9uIChlbnRyeSwgaW5kZXgpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRWYWx1ZUJ5RGF0YUtleShlbnRyeSwgZGF0YUtleSk7XG4gICAgaWYgKGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBnZXRDYXRlQ29vcmRpbmF0ZU9mTGluZSh7XG4gICAgICAgICAgYXhpczogeEF4aXMsXG4gICAgICAgICAgdGlja3M6IHhBeGlzVGlja3MsXG4gICAgICAgICAgYmFuZFNpemU6IGJhbmRTaXplLFxuICAgICAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfSksXG4gICAgICAgIHk6IGlzTmlsKHZhbHVlKSA/IG51bGwgOiB5QXhpcy5zY2FsZSh2YWx1ZSksXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgcGF5bG9hZDogZW50cnlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB4OiBpc05pbCh2YWx1ZSkgPyBudWxsIDogeEF4aXMuc2NhbGUodmFsdWUpLFxuICAgICAgeTogZ2V0Q2F0ZUNvb3JkaW5hdGVPZkxpbmUoe1xuICAgICAgICBheGlzOiB5QXhpcyxcbiAgICAgICAgdGlja3M6IHlBeGlzVGlja3MsXG4gICAgICAgIGJhbmRTaXplOiBiYW5kU2l6ZSxcbiAgICAgICAgZW50cnk6IGVudHJ5LFxuICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgIH0pLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcGF5bG9hZDogZW50cnlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIHBvaW50czogcG9pbnRzLFxuICAgIGxheW91dDogbGF5b3V0XG4gIH0sIG9mZnNldCk7XG59KTsiXSwibmFtZXMiOlsiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsInNvdXJjZSIsImV4Y2x1ZGVkIiwidGFyZ2V0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJrZXkiLCJpIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic291cmNlU3ltYm9sS2V5cyIsImxlbmd0aCIsImluZGV4T2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNhbGwiLCJoYXNPd25Qcm9wZXJ0eSIsIl9leHRlbmRzIiwiYXNzaWduIiwiYmluZCIsImFyZ3VtZW50cyIsImFwcGx5Iiwib3duS2V5cyIsImUiLCJyIiwidCIsImtleXMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b0NvbnN1bWFibGVBcnJheSIsImFyciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsIm4iLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJpdGVyIiwiaXNBcnJheSIsImxlbiIsImFycjIiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1Byb3BlcnR5S2V5IiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzZWxmIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX2luaGVyaXRzIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwidmFsdWUiLCJfc2V0UHJvdG90eXBlT2YiLCJwIiwib2JqIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJBbmltYXRlIiwiaXNGdW5jdGlvbiIsImlzTmlsIiwiaXNFcXVhbCIsImNsc3giLCJDdXJ2ZSIsIkRvdCIsIkxheWVyIiwiTGFiZWxMaXN0IiwiRXJyb3JCYXIiLCJ1bmlxdWVJZCIsImludGVycG9sYXRlTnVtYmVyIiwiZmluZEFsbEJ5VHlwZSIsImZpbHRlclByb3BzIiwiaGFzQ2xpcERvdCIsIkdsb2JhbCIsImdldENhdGVDb29yZGluYXRlT2ZMaW5lIiwiZ2V0VmFsdWVCeURhdGFLZXkiLCJMaW5lIiwiX1B1cmVDb21wb25lbnQiLCJfdGhpcyIsIl9sZW4iLCJhcmdzIiwiX2tleSIsImNvbmNhdCIsImlzQW5pbWF0aW9uRmluaXNoZWQiLCJ0b3RhbExlbmd0aCIsImxpbmVzIiwibGluZUxlbmd0aCIsInJlZHVjZSIsInByZSIsIm5leHQiLCJnZW5lcmF0ZVNpbXBsZVN0cm9rZURhc2hhcnJheSIsImNvdW50IiwiTWF0aCIsImZsb29yIiwicmVtYWluTGVuZ3RoIiwicmVzdExlbmd0aCIsInJlbWFpbkxpbmVzIiwic3VtIiwiZW1wdHlMaW5lcyIsInJlcGVhdCIsIm1hcCIsImxpbmUiLCJqb2luIiwibm9kZSIsIm1haW5DdXJ2ZSIsInNldFN0YXRlIiwib25BbmltYXRpb25FbmQiLCJvbkFuaW1hdGlvblN0YXJ0IiwiY29tcG9uZW50RGlkTW91bnQiLCJpc0FuaW1hdGlvbkFjdGl2ZSIsImdldFRvdGFsTGVuZ3RoIiwiY29tcG9uZW50RGlkVXBkYXRlIiwic3RhdGUiLCJjdXJ2ZURvbSIsImVyciIsInJlbmRlckVycm9yQmFyIiwibmVlZENsaXAiLCJjbGlwUGF0aElkIiwiX3RoaXMkcHJvcHMiLCJwb2ludHMiLCJ4QXhpcyIsInlBeGlzIiwibGF5b3V0IiwiY2hpbGRyZW4iLCJlcnJvckJhckl0ZW1zIiwiZGF0YVBvaW50Rm9ybWF0dGVyIiwiZGF0YVBvaW50IiwiZGF0YUtleSIsIngiLCJ5IiwiZXJyb3JWYWwiLCJwYXlsb2FkIiwiZXJyb3JCYXJQcm9wcyIsImNsaXBQYXRoIiwiY3JlYXRlRWxlbWVudCIsIml0ZW0iLCJjbG9uZUVsZW1lbnQiLCJkYXRhIiwicmVuZGVyRG90cyIsImNsaXBEb3QiLCJfdGhpcyRwcm9wczIiLCJkb3QiLCJsaW5lUHJvcHMiLCJjdXN0b21Eb3RQcm9wcyIsImRvdHMiLCJlbnRyeSIsImRvdFByb3BzIiwiaW5kZXgiLCJjeCIsImN5IiwicmVuZGVyRG90SXRlbSIsImRvdHNQcm9wcyIsImNsYXNzTmFtZSIsInJlbmRlckN1cnZlU3RhdGljYWxseSIsIl90aGlzJHByb3BzMyIsInR5cGUiLCJjb25uZWN0TnVsbHMiLCJyZWYiLCJvdGhlcnMiLCJjdXJ2ZVByb3BzIiwiZmlsbCIsInBhdGhSZWYiLCJyZW5kZXJDdXJ2ZVdpdGhBbmltYXRpb24iLCJfdGhpczIiLCJfdGhpcyRwcm9wczQiLCJzdHJva2VEYXNoYXJyYXkiLCJhbmltYXRpb25CZWdpbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiYW5pbWF0aW9uRWFzaW5nIiwiYW5pbWF0aW9uSWQiLCJhbmltYXRlTmV3VmFsdWVzIiwid2lkdGgiLCJoZWlnaHQiLCJfdGhpcyRzdGF0ZSIsInByZXZQb2ludHMiLCJiZWdpbiIsImR1cmF0aW9uIiwiaXNBY3RpdmUiLCJlYXNpbmciLCJ0byIsImhhbmRsZUFuaW1hdGlvbkVuZCIsImhhbmRsZUFuaW1hdGlvblN0YXJ0IiwiX3JlZiIsInByZXZQb2ludHNEaWZmRmFjdG9yIiwic3RlcERhdGEiLCJwcmV2UG9pbnRJbmRleCIsInByZXYiLCJpbnRlcnBvbGF0b3JYIiwiaW50ZXJwb2xhdG9yWSIsIl9pbnRlcnBvbGF0b3JYIiwiX2ludGVycG9sYXRvclkiLCJpbnRlcnBvbGF0b3IiLCJjdXJMZW5ndGgiLCJjdXJyZW50U3Ryb2tlRGFzaGFycmF5Iiwic3BsaXQiLCJudW0iLCJwYXJzZUZsb2F0IiwiZ2V0U3Ryb2tlRGFzaGFycmF5IiwicmVuZGVyQ3VydmUiLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRzdGF0ZTIiLCJyZW5kZXIiLCJfZmlsdGVyUHJvcHMiLCJfdGhpcyRwcm9wczYiLCJoaWRlIiwidG9wIiwibGVmdCIsImlkIiwiaGFzU2luZ2xlUG9pbnQiLCJsYXllckNsYXNzIiwibmVlZENsaXBYIiwiYWxsb3dEYXRhT3ZlcmZsb3ciLCJuZWVkQ2xpcFkiLCJfcmVmMiIsInN0cm9rZVdpZHRoIiwiX3JlZjIkciIsIl9yZWYyJHN0cm9rZVdpZHRoIiwiX3JlZjMiLCJfcmVmMyRjbGlwRG90IiwiZG90U2l6ZSIsInJlbmRlckNhbGxCeVBhcmVudCIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm5leHRQcm9wcyIsInByZXZTdGF0ZSIsInByZXZBbmltYXRpb25JZCIsImN1clBvaW50cyIsImxpbmVzVW5pdCIsInJlc3VsdCIsIm9wdGlvbiIsImRvdEl0ZW0iLCJpc1ZhbGlkRWxlbWVudCIsInhBeGlzSWQiLCJ5QXhpc0lkIiwiYWN0aXZlRG90IiwibGVnZW5kVHlwZSIsInN0cm9rZSIsImlzU3NyIiwibGFiZWwiLCJfcmVmNCIsInhBeGlzVGlja3MiLCJ5QXhpc1RpY2tzIiwiYmFuZFNpemUiLCJkaXNwbGF5ZWREYXRhIiwib2Zmc2V0IiwiYXhpcyIsInRpY2tzIiwic2NhbGUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/recharts/es6/cartesian/Line.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/recharts/es6/chart/LineChart.js":
/*!******************************************************!*\
!*** ./node_modules/recharts/es6/chart/LineChart.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LineChart: () => (/* binding */ LineChart)\n/* harmony export */ });\n/* harmony import */ var _generateCategoricalChart__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./generateCategoricalChart */ \"(app-pages-browser)/./node_modules/recharts/es6/chart/generateCategoricalChart.js\");\n/* harmony import */ var _cartesian_Line__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../cartesian/Line */ \"(app-pages-browser)/./node_modules/recharts/es6/cartesian/Line.js\");\n/* harmony import */ var _cartesian_XAxis__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../cartesian/XAxis */ \"(app-pages-browser)/./node_modules/recharts/es6/cartesian/XAxis.js\");\n/* harmony import */ var _cartesian_YAxis__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../cartesian/YAxis */ \"(app-pages-browser)/./node_modules/recharts/es6/cartesian/YAxis.js\");\n/* harmony import */ var _util_CartesianUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/CartesianUtils */ \"(app-pages-browser)/./node_modules/recharts/es6/util/CartesianUtils.js\");\n/**\n * @fileOverview Line Chart\n */ \n\n\n\n\nvar LineChart = (0,_generateCategoricalChart__WEBPACK_IMPORTED_MODULE_0__.generateCategoricalChart)({\n chartName: 'LineChart',\n GraphicalChild: _cartesian_Line__WEBPACK_IMPORTED_MODULE_1__.Line,\n axisComponents: [\n {\n axisType: 'xAxis',\n AxisComp: _cartesian_XAxis__WEBPACK_IMPORTED_MODULE_2__.XAxis\n },\n {\n axisType: 'yAxis',\n AxisComp: _cartesian_YAxis__WEBPACK_IMPORTED_MODULE_3__.YAxis\n }\n ],\n formatAxisMap: _util_CartesianUtils__WEBPACK_IMPORTED_MODULE_4__.formatAxisMap\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWNoYXJ0cy9lczYvY2hhcnQvTGluZUNoYXJ0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztDQUVDLEdBQ3FFO0FBQzdCO0FBQ0U7QUFDQTtBQUNZO0FBQ2hELElBQUlLLFlBQVlMLG1GQUF3QkEsQ0FBQztJQUM5Q00sV0FBVztJQUNYQyxnQkFBZ0JOLGlEQUFJQTtJQUNwQk8sZ0JBQWdCO1FBQUM7WUFDZkMsVUFBVTtZQUNWQyxVQUFVUixtREFBS0E7UUFDakI7UUFBRztZQUNETyxVQUFVO1lBQ1ZDLFVBQVVQLG1EQUFLQTtRQUNqQjtLQUFFO0lBQ0ZDLGVBQWVBLCtEQUFhQTtBQUM5QixHQUFHIiwic291cmNlcyI6WyIvVXNlcnMvbWF0dGJydWNlL0RvY3VtZW50cy9Qcm9qZWN0cy9PcGVuQ2xhdy9XZWIvaGVhcnRiZWF0LW1vbml0b3Ivbm9kZV9tb2R1bGVzL3JlY2hhcnRzL2VzNi9jaGFydC9MaW5lQ2hhcnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IExpbmUgQ2hhcnRcbiAqL1xuaW1wb3J0IHsgZ2VuZXJhdGVDYXRlZ29yaWNhbENoYXJ0IH0gZnJvbSAnLi9nZW5lcmF0ZUNhdGVnb3JpY2FsQ2hhcnQnO1xuaW1wb3J0IHsgTGluZSB9IGZyb20gJy4uL2NhcnRlc2lhbi9MaW5lJztcbmltcG9ydCB7IFhBeGlzIH0gZnJvbSAnLi4vY2FydGVzaWFuL1hBeGlzJztcbmltcG9ydCB7IFlBeGlzIH0gZnJvbSAnLi4vY2FydGVzaWFuL1lBeGlzJztcbmltcG9ydCB7IGZvcm1hdEF4aXNNYXAgfSBmcm9tICcuLi91dGlsL0NhcnRlc2lhblV0aWxzJztcbmV4cG9ydCB2YXIgTGluZUNoYXJ0ID0gZ2VuZXJhdGVDYXRlZ29yaWNhbENoYXJ0KHtcbiAgY2hhcnROYW1lOiAnTGluZUNoYXJ0JyxcbiAgR3JhcGhpY2FsQ2hpbGQ6IExpbmUsXG4gIGF4aXNDb21wb25lbnRzOiBbe1xuICAgIGF4aXNUeXBlOiAneEF4aXMnLFxuICAgIEF4aXNDb21wOiBYQXhpc1xuICB9LCB7XG4gICAgYXhpc1R5cGU6ICd5QXhpcycsXG4gICAgQXhpc0NvbXA6IFlBeGlzXG4gIH1dLFxuICBmb3JtYXRBeGlzTWFwOiBmb3JtYXRBeGlzTWFwXG59KTsiXSwibmFtZXMiOlsiZ2VuZXJhdGVDYXRlZ29yaWNhbENoYXJ0IiwiTGluZSIsIlhBeGlzIiwiWUF4aXMiLCJmb3JtYXRBeGlzTWFwIiwiTGluZUNoYXJ0IiwiY2hhcnROYW1lIiwiR3JhcGhpY2FsQ2hpbGQiLCJheGlzQ29tcG9uZW50cyIsImF4aXNUeXBlIiwiQXhpc0NvbXAiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/recharts/es6/chart/LineChart.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./src/app/page.tsx":
/*!**************************!*\
!*** ./src/app/page.tsx ***!
\**************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HeartbeatMonitor)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,LayoutGrid,List,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/activity.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,LayoutGrid,List,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/list.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,LayoutGrid,List,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/layout-grid.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,LayoutGrid,List,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/refresh-cw.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,LayoutGrid,List,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/plus.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,LayoutGrid,List,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/external-link.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,LayoutGrid,List,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\");\n/* harmony import */ var _barrel_optimize_names_Line_LineChart_ResponsiveContainer_recharts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Line,LineChart,ResponsiveContainer!=!recharts */ \"(app-pages-browser)/./node_modules/recharts/es6/component/ResponsiveContainer.js\");\n/* harmony import */ var _barrel_optimize_names_Line_LineChart_ResponsiveContainer_recharts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Line,LineChart,ResponsiveContainer!=!recharts */ \"(app-pages-browser)/./node_modules/recharts/es6/chart/LineChart.js\");\n/* harmony import */ var _barrel_optimize_names_Line_LineChart_ResponsiveContainer_recharts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=Line,LineChart,ResponsiveContainer!=!recharts */ \"(app-pages-browser)/./node_modules/recharts/es6/cartesian/Line.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction HeartbeatMonitor() {\n _s();\n const [apps, setApps] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [checking, setChecking] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showAddApp, setShowAddApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"grid\");\n const [selectedApp, setSelectedApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [newApp, setNewApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"HeartbeatMonitor.useEffect\": ()=>{\n fetchData();\n const interval = setInterval(fetchData, 30000);\n return ({\n \"HeartbeatMonitor.useEffect\": ()=>clearInterval(interval)\n })[\"HeartbeatMonitor.useEffect\"];\n }\n }[\"HeartbeatMonitor.useEffect\"], []);\n async function fetchData() {\n try {\n const res = await fetch(\"/api/monitor\");\n const data = await res.json();\n setApps(data.apps || []);\n setStatus(data.status || []);\n } catch (err) {\n console.error(\"Failed to fetch data:\", err);\n } finally{\n setLoading(false);\n }\n }\n async function checkApp(app) {\n setChecking(app.id);\n try {\n const start = Date.now();\n await fetch(app.url, {\n method: \"HEAD\",\n mode: \"no-cors\"\n });\n const responseTime = Date.now() - start;\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"up\",\n responseTime\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } catch (e) {\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"down\"\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } finally{\n setChecking(null);\n }\n }\n async function addApp(e) {\n e.preventDefault();\n if (!newApp.name || !newApp.url) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"addApp\",\n app: newApp\n })\n });\n setNewApp({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n setShowAddApp(false);\n fetchData();\n }\n async function deleteApp(id) {\n if (!confirm(\"Delete this app from monitoring?\")) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"deleteApp\",\n id\n })\n });\n fetchData();\n }\n function getAppStatus(appId) {\n const appStatus = status.filter((s)=>s.appId === appId);\n const latest = appStatus[appStatus.length - 1];\n const isUp = (latest === null || latest === void 0 ? void 0 : latest.status) === \"up\";\n const uptime = appStatus.length > 0 ? Math.round(appStatus.filter((s)=>s.status === \"up\").length / appStatus.length * 100) : 100;\n return {\n latest,\n isUp,\n uptime,\n history: appStatus.slice(-10)\n };\n }\n const totalApps = apps.length;\n const onlineApps = apps.filter((app)=>getAppStatus(app.id).isUp).length;\n const offlineApps = totalApps - onlineApps;\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-slate-400\",\n children: \"Loading...\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 159,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 158,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 text-slate-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"bg-slate-900 border-b border-slate-800\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-10 h-10 bg-emerald-500 rounded-lg flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"w-5 h-5 text-white\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 172,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 171,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-xl font-bold text-white\",\n children: \"Heartbeat Monitor\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 175,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-400\",\n children: [\n onlineApps,\n \" of \",\n totalApps,\n \" services online\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 176,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 174,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 170,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setViewMode(viewMode === \"grid\" ? \"list\" : \"grid\"),\n className: \"p-2 bg-slate-800 rounded-lg text-slate-400 hover:text-white\",\n children: viewMode === \"grid\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 187,\n columnNumber: 40\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 187,\n columnNumber: 71\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 183,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: fetchData,\n className: \"p-2 bg-slate-800 rounded-lg text-slate-400 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 193,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 189,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowAddApp(true),\n className: \"flex items-center gap-2 bg-emerald-500 hover:bg-emerald-600 text-white px-4 py-2 rounded-lg font-medium\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 199,\n columnNumber: 17\n }, this),\n \"Add\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 195,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 169,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 168,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 167,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"max-w-7xl mx-auto px-4 py-6\",\n children: viewMode === \"grid\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\",\n children: apps.map((app)=>{\n const { isUp, uptime, history, latest } = getAppStatus(app.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-xl border-2 p-5 transition-all hover:scale-[1.02] cursor-pointer \".concat(isUp ? \"border-emerald-500/30\" : \"border-red-500/30\"),\n onClick: ()=>setSelectedApp(app),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 py-1 rounded-full text-xs font-bold \".concat(isUp ? \"bg-emerald-500/20 text-emerald-400\" : \"bg-red-500/20 text-red-400\"),\n children: isUp ? \"● ONLINE\" : \"● OFFLINE\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 224,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-slate-500 text-sm\",\n children: app.port\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 231,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 223,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-bold text-white mb-1\",\n children: app.name\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 236,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-slate-400 text-sm\",\n children: app.description || \"No description\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 237,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 235,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-3 mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-800 rounded-lg p-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-slate-500 mb-1\",\n children: \"Uptime\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 243,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xl font-bold \".concat(uptime >= 90 ? \"text-emerald-400\" : \"text-yellow-400\"),\n children: [\n uptime,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 244,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 242,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-800 rounded-lg p-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-slate-500 mb-1\",\n children: \"Response\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 249,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xl font-bold text-white\",\n children: (latest === null || latest === void 0 ? void 0 : latest.responseTime) ? \"\".concat(latest.responseTime, \"ms\") : \"--\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 250,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 248,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 241,\n columnNumber: 19\n }, this),\n history.length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-16 mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Line_LineChart_ResponsiveContainer_recharts__WEBPACK_IMPORTED_MODULE_7__.ResponsiveContainer, {\n width: \"100%\",\n height: \"100%\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Line_LineChart_ResponsiveContainer_recharts__WEBPACK_IMPORTED_MODULE_8__.LineChart, {\n data: history.map((h, i)=>({\n i,\n status: h.status === \"up\" ? 1 : 0\n })),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Line_LineChart_ResponsiveContainer_recharts__WEBPACK_IMPORTED_MODULE_9__.Line, {\n type: \"step\",\n dataKey: \"status\",\n stroke: isUp ? \"#22C55E\" : \"#EF4444\",\n strokeWidth: 2,\n dot: false\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 261,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 260,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 259,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 258,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: (e)=>{\n e.stopPropagation();\n checkApp(app);\n },\n disabled: checking === app.id,\n className: \"flex-1 bg-slate-800 hover:bg-slate-700 text-slate-300 py-2 rounded-lg text-sm font-medium transition-colors\",\n children: checking === app.id ? \"Checking...\" : \"Check Now\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 275,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n onClick: (e)=>e.stopPropagation(),\n className: \"p-2 bg-slate-800 hover:bg-slate-700 text-slate-300 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 292,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 285,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 274,\n columnNumber: 19\n }, this)\n ]\n }, app.id, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 215,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 210,\n columnNumber: 11\n }, this) : /* List View */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: apps.map((app)=>{\n const { isUp, uptime, latest } = getAppStatus(app.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4 bg-slate-900 rounded-lg border-l-4 p-4 \".concat(isUp ? \"border-l-emerald-500\" : \"border-l-red-500\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 rounded-full \".concat(isUp ? \"bg-emerald-500\" : \"bg-red-500\")\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 312,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"font-semibold text-white\",\n children: app.name\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 315,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-400 truncate\",\n children: app.url\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 316,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 314,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden sm:flex items-center gap-6 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-slate-500\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 321,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"font-mono text-white\",\n children: app.port\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 322,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 320,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-slate-500\",\n children: \"Uptime\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 325,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"font-mono \".concat(uptime >= 90 ? \"text-emerald-400\" : \"text-yellow-400\"),\n children: [\n uptime,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 326,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 324,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-slate-500\",\n children: \"Response\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 331,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"font-mono text-white\",\n children: (latest === null || latest === void 0 ? void 0 : latest.responseTime) ? \"\".concat(latest.responseTime, \"ms\") : \"--\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 332,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 330,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 319,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>checkApp(app),\n disabled: checking === app.id,\n className: \"p-2 text-slate-400 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-4 h-4 \".concat(checking === app.id ? \"animate-spin\" : \"\")\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 344,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 339,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"p-2 text-slate-400 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 352,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 346,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>deleteApp(app.id),\n className: \"p-2 text-slate-400 hover:text-red-400\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_LayoutGrid_List_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 358,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 354,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 338,\n columnNumber: 19\n }, this)\n ]\n }, app.id, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 306,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 301,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 208,\n columnNumber: 7\n }, this),\n showAddApp && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-xl p-6 w-full max-w-md\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-bold text-white mb-4\",\n children: \"Add New App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 372,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: addApp,\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 375,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.name,\n onChange: (e)=>setNewApp({\n ...newApp,\n name: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 376,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 374,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"Description\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 385,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.description,\n onChange: (e)=>setNewApp({\n ...newApp,\n description: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 386,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 384,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 395,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.url,\n onChange: (e)=>setNewApp({\n ...newApp,\n url: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 396,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 394,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 405,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n value: newApp.port,\n onChange: (e)=>setNewApp({\n ...newApp,\n port: parseInt(e.target.value)\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 406,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 404,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 393,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setShowAddApp(false),\n className: \"flex-1 bg-slate-800 hover:bg-slate-700 text-slate-300 py-2 rounded-lg\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 416,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"flex-1 bg-emerald-500 hover:bg-emerald-600 text-white py-2 rounded-lg font-medium\",\n children: \"Add App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 423,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 415,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 373,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 371,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 370,\n columnNumber: 9\n }, this),\n selectedApp && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-xl p-6 w-full max-w-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-bold text-white\",\n children: selectedApp.name\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 440,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setSelectedApp(null),\n className: \"text-slate-400 hover:text-white\",\n children: \"✕\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 441,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 439,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-800 rounded-lg p-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-500\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 452,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-emerald-400 font-mono text-sm break-all\",\n children: selectedApp.url\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 453,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 451,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-800 rounded-lg p-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-500\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 456,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-white font-mono\",\n children: selectedApp.port\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 457,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 455,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 450,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n checkApp(selectedApp);\n setSelectedApp(null);\n },\n className: \"flex-1 bg-emerald-500 hover:bg-emerald-600 text-white py-2 rounded-lg font-medium\",\n children: \"Check Now\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 462,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n deleteApp(selectedApp.id);\n setSelectedApp(null);\n },\n className: \"flex-1 bg-red-500/20 hover:bg-red-500/30 text-red-400 py-2 rounded-lg font-medium\",\n children: \"Delete\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 471,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 461,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 449,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 438,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 437,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 165,\n columnNumber: 5\n }, this);\n}\n_s(HeartbeatMonitor, \"nPvs5T0CRMHWpqOE0JVMs57LLmM=\");\n_c = HeartbeatMonitor;\nvar _c;\n$RefreshReg$(_c, \"HeartbeatMonitor\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVU7OENBQ1g7Ozs7Ozs7Ozs7OztzQ0FLSCw4REFBQ0Q7NEJBQUlDLFdBQVU7OzhDQUNiLDhEQUFDRDtvQ0FBSUMsV0FBVTs7c0RBQ2IsOERBQUNEOzRDQUFJQyxXQUFVOzs4REFDYiw4REFBQ0c7b0RBQUVILFdBQVU7OERBQXlCOzs7Ozs7OERBQ3RDLDhEQUFDRztvREFBRUgsV0FBVTs4REFBZ0QvRCxZQUFZTSxHQUFHOzs7Ozs7Ozs7Ozs7c0RBRTlFLDhEQUFDd0Q7NENBQUlDLFdBQVU7OzhEQUNiLDhEQUFDRztvREFBRUgsV0FBVTs4REFBeUI7Ozs7Ozs4REFDdEMsOERBQUNHO29EQUFFSCxXQUFVOzhEQUF3Qi9ELFlBQVlPLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0FJekQsOERBQUN1RDtvQ0FBSUMsV0FBVTs7c0RBQ2IsOERBQUNJOzRDQUNDQyxTQUFTO2dEQUNQNUMsU0FBU3hCO2dEQUNUQyxlQUFlOzRDQUNqQjs0Q0FDQThELFdBQVU7c0RBQ1g7Ozs7OztzREFHRCw4REFBQ0k7NENBQ0NDLFNBQVM7Z0RBQ1B2QixVQUFVN0MsWUFBWTBCLEVBQUU7Z0RBQ3hCekIsZUFBZTs0Q0FDakI7NENBQ0E4RCxXQUFVO3NEQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVqQjtHQTVjd0I1RTtLQUFBQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hdHRicnVjZS9Eb2N1bWVudHMvUHJvamVjdHMvT3BlbkNsYXcvV2ViL2hlYXJ0YmVhdC1tb25pdG9yL3NyYy9hcHAvcGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGl2aXR5LCBQbHVzLCBSZWZyZXNoQ3csIFRyYXNoMiwgRXh0ZXJuYWxMaW5rLCBMYXlvdXRHcmlkLCBMaXN0LCBTZXR0aW5ncyB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIjtcbmltcG9ydCB7IExpbmVDaGFydCwgTGluZSwgWEF4aXMsIFlBeGlzLCBUb29sdGlwLCBSZXNwb25zaXZlQ29udGFpbmVyIH0gZnJvbSBcInJlY2hhcnRzXCI7XG5cbmludGVyZmFjZSBBcHAge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHBhdGg6IHN0cmluZztcbiAgY29tbWFuZDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU3RhdHVzRW50cnkge1xuICBhcHBJZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgc3RhdHVzOiBcInVwXCIgfCBcImRvd25cIjtcbiAgcmVzcG9uc2VUaW1lPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIZWFydGJlYXRNb25pdG9yKCkge1xuICBjb25zdCBbYXBwcywgc2V0QXBwc10gPSB1c2VTdGF0ZTxBcHBbXT4oW10pO1xuICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGU8U3RhdHVzRW50cnlbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2NoZWNraW5nLCBzZXRDaGVja2luZ10gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3Nob3dBZGRBcHAsIHNldFNob3dBZGRBcHBdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdmlld01vZGUsIHNldFZpZXdNb2RlXSA9IHVzZVN0YXRlPFwiZ3JpZFwiIHwgXCJsaXN0XCI+KFwiZ3JpZFwiKTtcbiAgY29uc3QgW3NlbGVjdGVkQXBwLCBzZXRTZWxlY3RlZEFwcF0gPSB1c2VTdGF0ZTxBcHAgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW25ld0FwcCwgc2V0TmV3QXBwXSA9IHVzZVN0YXRlPFBhcnRpYWw8QXBwPj4oe1xuICAgIG5hbWU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIsXG4gICAgcG9ydDogMzAwMCxcbiAgICBwYXRoOiBcIlwiLFxuICAgIGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIixcbiAgICBjYXRlZ29yeTogXCJPdGhlclwiLFxuICAgIGNvbG9yOiBcIiMyMkM1NUVcIixcbiAgICBlbmFibGVkOiB0cnVlLFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoRGF0YSgpO1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoZmV0Y2hEYXRhLCAzMDAwMCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9LCBbXSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgc2V0QXBwcyhkYXRhLmFwcHMgfHwgW10pO1xuICAgICAgc2V0U3RhdHVzKGRhdGEuc3RhdHVzIHx8IFtdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggZGF0YTpcIiwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2hlY2tBcHAoYXBwOiBBcHApIHtcbiAgICBzZXRDaGVja2luZyhhcHAuaWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICBhd2FpdCBmZXRjaChhcHAudXJsLCB7IG1ldGhvZDogXCJIRUFEXCIsIG1vZGU6IFwibm8tY29yc1wiIH0pO1xuICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgXG4gICAgICBjb25zdCBlbnRyeTogU3RhdHVzRW50cnkgPSB7XG4gICAgICAgIGFwcElkOiBhcHAuaWQsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXM6IFwidXBcIixcbiAgICAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgZmV0Y2goXCIvYXBpL21vbml0b3JcIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiBcInJlY29yZFN0YXR1c1wiLCBlbnRyeSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBmZXRjaERhdGEoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnN0IGVudHJ5OiBTdGF0dXNFbnRyeSA9IHtcbiAgICAgICAgYXBwSWQ6IGFwcC5pZCxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXR1czogXCJkb3duXCIsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246IFwicmVjb3JkU3RhdHVzXCIsIGVudHJ5IH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGZldGNoRGF0YSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRDaGVja2luZyhudWxsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRBcHAoZTogUmVhY3QuRm9ybUV2ZW50KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghbmV3QXBwLm5hbWUgfHwgIW5ld0FwcC51cmwpIHJldHVybjtcblxuICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJhZGRBcHBcIiwgYXBwOiBuZXdBcHAgfSksXG4gICAgfSk7XG5cbiAgICBzZXROZXdBcHAoe1xuICAgICAgbmFtZTogXCJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIsXG4gICAgICBwb3J0OiAzMDAwLFxuICAgICAgcGF0aDogXCJcIixcbiAgICAgIGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIixcbiAgICAgIGNhdGVnb3J5OiBcIk90aGVyXCIsXG4gICAgICBjb2xvcjogXCIjMjJDNTVFXCIsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgIH0pO1xuICAgIHNldFNob3dBZGRBcHAoZmFsc2UpO1xuICAgIGZldGNoRGF0YSgpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQXBwKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoIWNvbmZpcm0oXCJEZWxldGUgdGhpcyBhcHAgZnJvbSBtb25pdG9yaW5nP1wiKSkgcmV0dXJuO1xuICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJkZWxldGVBcHBcIiwgaWQgfSksXG4gICAgfSk7XG4gICAgZmV0Y2hEYXRhKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBcHBTdGF0dXMoYXBwSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFwcFN0YXR1cyA9IHN0YXR1cy5maWx0ZXIoKHMpID0+IHMuYXBwSWQgPT09IGFwcElkKTtcbiAgICBjb25zdCBsYXRlc3QgPSBhcHBTdGF0dXNbYXBwU3RhdHVzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGlzVXAgPSBsYXRlc3Q/LnN0YXR1cyA9PT0gXCJ1cFwiO1xuICAgIGNvbnN0IHVwdGltZSA9IGFwcFN0YXR1cy5sZW5ndGggPiAwIFxuICAgICAgPyBNYXRoLnJvdW5kKChhcHBTdGF0dXMuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09IFwidXBcIikubGVuZ3RoIC8gYXBwU3RhdHVzLmxlbmd0aCkgKiAxMDApXG4gICAgICA6IDEwMDtcbiAgICBcbiAgICByZXR1cm4geyBsYXRlc3QsIGlzVXAsIHVwdGltZSwgaGlzdG9yeTogYXBwU3RhdHVzLnNsaWNlKC0xMCkgfTtcbiAgfVxuXG4gIGNvbnN0IHRvdGFsQXBwcyA9IGFwcHMubGVuZ3RoO1xuICBjb25zdCBvbmxpbmVBcHBzID0gYXBwcy5maWx0ZXIoKGFwcCkgPT4gZ2V0QXBwU3RhdHVzKGFwcC5pZCkuaXNVcCkubGVuZ3RoO1xuICBjb25zdCBvZmZsaW5lQXBwcyA9IHRvdGFsQXBwcyAtIG9ubGluZUFwcHM7XG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctc2xhdGUtOTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbGF0ZS00MDBcIj5Mb2FkaW5nLi4uPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1zbGF0ZS05NTAgdGV4dC1zbGF0ZS0xMDBcIj5cbiAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cImJnLXNsYXRlLTkwMCBib3JkZXItYiBib3JkZXItc2xhdGUtODAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBweS00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTEwIGgtMTAgYmctZW1lcmFsZC01MDAgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxBY3Rpdml0eSBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtd2hpdGVcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LWJvbGQgdGV4dC13aGl0ZVwiPkhlYXJ0YmVhdCBNb25pdG9yPC9oMT5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtc2xhdGUtNDAwXCI+XG4gICAgICAgICAgICAgICAgICB7b25saW5lQXBwc30gb2Yge3RvdGFsQXBwc30gc2VydmljZXMgb25saW5lXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZSh2aWV3TW9kZSA9PT0gXCJncmlkXCIgPyBcImxpc3RcIiA6IFwiZ3JpZFwiKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTIgYmctc2xhdGUtODAwIHJvdW5kZWQtbGcgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dmlld01vZGUgPT09IFwiZ3JpZFwiID8gPExpc3QgY2xhc3NOYW1lPVwidy01IGgtNVwiIC8+IDogPExheW91dEdyaWQgY2xhc3NOYW1lPVwidy01IGgtNVwiIC8+fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2ZldGNoRGF0YX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTIgYmctc2xhdGUtODAwIHJvdW5kZWQtbGcgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UmVmcmVzaEN3IGNsYXNzTmFtZT1cInctNSBoLTVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dBZGRBcHAodHJ1ZSl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgYmctZW1lcmFsZC01MDAgaG92ZXI6YmctZW1lcmFsZC02MDAgdGV4dC13aGl0ZSBweC00IHB5LTIgcm91bmRlZC1sZyBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGx1cyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgICBBZGRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgey8qIE1haW4gQ29udGVudCAqL31cbiAgICAgIDxtYWluIGNsYXNzTmFtZT1cIm1heC13LTd4bCBteC1hdXRvIHB4LTQgcHktNlwiPlxuICAgICAgICB7dmlld01vZGUgPT09IFwiZ3JpZFwiID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtMyBnYXAtNFwiPlxuICAgICAgICAgICAge2FwcHMubWFwKChhcHApID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBpc1VwLCB1cHRpbWUsIGhpc3RvcnksIGxhdGVzdCB9ID0gZ2V0QXBwU3RhdHVzKGFwcC5pZCk7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YXBwLmlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmctc2xhdGUtOTAwIHJvdW5kZWQteGwgYm9yZGVyLTIgcC01IHRyYW5zaXRpb24tYWxsIGhvdmVyOnNjYWxlLVsxLjAyXSBjdXJzb3ItcG9pbnRlciAke1xuICAgICAgICAgICAgICAgICAgICBpc1VwID8gXCJib3JkZXItZW1lcmFsZC01MDAvMzBcIiA6IFwiYm9yZGVyLXJlZC01MDAvMzBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZEFwcChhcHApfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsvKiBTdGF0dXMgQmFkZ2UgKi99XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YHB4LTMgcHktMSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LWJvbGQgJHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1VwIFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLWVtZXJhbGQtNTAwLzIwIHRleHQtZW1lcmFsZC00MDBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1yZWQtNTAwLzIwIHRleHQtcmVkLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgIH1gfT5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNVcCA/IFwi4pePIE9OTElORVwiIDogXCLil48gT0ZGTElORVwifVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNTAwIHRleHQtc21cIj57YXBwLnBvcnR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIHsvKiBBcHAgSW5mbyAqL31cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LWJvbGQgdGV4dC13aGl0ZSBtYi0xXCI+e2FwcC5uYW1lfTwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNDAwIHRleHQtc21cIj57YXBwLmRlc2NyaXB0aW9uIHx8IFwiTm8gZGVzY3JpcHRpb25cIn08L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgey8qIFN0YXRzIEdyaWQgKi99XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTMgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMCByb3VuZGVkLWxnIHAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1zbGF0ZS01MDAgbWItMVwiPlVwdGltZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9e2B0ZXh0LXhsIGZvbnQtYm9sZCAke3VwdGltZSA+PSA5MCA/IFwidGV4dC1lbWVyYWxkLTQwMFwiIDogXCJ0ZXh0LXllbGxvdy00MDBcIn1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt1cHRpbWV9JVxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctc2xhdGUtODAwIHJvdW5kZWQtbGcgcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXNsYXRlLTUwMCBtYi0xXCI+UmVzcG9uc2U8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LWJvbGQgdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2xhdGVzdD8ucmVzcG9uc2VUaW1lID8gYCR7bGF0ZXN0LnJlc3BvbnNlVGltZX1tc2AgOiBcIi0tXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICB7LyogTWluaSBDaGFydCAqL31cbiAgICAgICAgICAgICAgICAgIHtoaXN0b3J5Lmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtMTYgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxSZXNwb25zaXZlQ29udGFpbmVyIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5lQ2hhcnQgZGF0YT17aGlzdG9yeS5tYXAoKGgsIGkpID0+ICh7IGksIHN0YXR1czogaC5zdGF0dXMgPT09IFwidXBcIiA/IDEgOiAwIH0pKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk9XCJzdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT17aXNVcCA/IFwiIzIyQzU1RVwiIDogXCIjRUY0NDQ0XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90PXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluZUNoYXJ0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvUmVzcG9uc2l2ZUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgICB7LyogQWN0aW9ucyAqL31cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FwcChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NoZWNraW5nID09PSBhcHAuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIGJnLXNsYXRlLTgwMCBob3ZlcjpiZy1zbGF0ZS03MDAgdGV4dC1zbGF0ZS0zMDAgcHktMiByb3VuZGVkLWxnIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2NoZWNraW5nID09PSBhcHAuaWQgPyBcIkNoZWNraW5nLi4uXCIgOiBcIkNoZWNrIE5vd1wifVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICBocmVmPXthcHAudXJsfVxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicC0yIGJnLXNsYXRlLTgwMCBob3ZlcjpiZy1zbGF0ZS03MDAgdGV4dC1zbGF0ZS0zMDAgcm91bmRlZC1sZ1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8RXh0ZXJuYWxMaW5rIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIC8qIExpc3QgVmlldyAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICB7YXBwcy5tYXAoKGFwcCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7IGlzVXAsIHVwdGltZSwgbGF0ZXN0IH0gPSBnZXRBcHBTdGF0dXMoYXBwLmlkKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXthcHAuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBiZy1zbGF0ZS05MDAgcm91bmRlZC1sZyBib3JkZXItbC00IHAtNCAke1xuICAgICAgICAgICAgICAgICAgICBpc1VwID8gXCJib3JkZXItbC1lbWVyYWxkLTUwMFwiIDogXCJib3JkZXItbC1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgdy0zIGgtMyByb3VuZGVkLWZ1bGwgJHtpc1VwID8gXCJiZy1lbWVyYWxkLTUwMFwiIDogXCJiZy1yZWQtNTAwXCJ9YH0gLz5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlXCI+e2FwcC5uYW1lfTwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1zbGF0ZS00MDAgdHJ1bmNhdGVcIj57YXBwLnVybH08L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gc206ZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTYgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbGF0ZS01MDBcIj5Qb3J0PC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImZvbnQtbW9ubyB0ZXh0LXdoaXRlXCI+e2FwcC5wb3J0fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNsYXRlLTUwMFwiPlVwdGltZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9e2Bmb250LW1vbm8gJHt1cHRpbWUgPj0gOTAgPyBcInRleHQtZW1lcmFsZC00MDBcIiA6IFwidGV4dC15ZWxsb3ctNDAwXCJ9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dXB0aW1lfSVcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbGF0ZS01MDBcIj5SZXNwb25zZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJmb250LW1vbm8gdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2xhdGVzdD8ucmVzcG9uc2VUaW1lID8gYCR7bGF0ZXN0LnJlc3BvbnNlVGltZX1tc2AgOiBcIi0tXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjaGVja0FwcChhcHApfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjaGVja2luZyA9PT0gYXBwLmlkfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInAtMiB0ZXh0LXNsYXRlLTQwMCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxSZWZyZXNoQ3cgY2xhc3NOYW1lPXtgdy00IGgtNCAke2NoZWNraW5nID09PSBhcHAuaWQgPyBcImFuaW1hdGUtc3BpblwiIDogXCJcIn1gfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICBocmVmPXthcHAudXJsfVxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicC0yIHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGVsZXRlQXBwKGFwcC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicC0yIHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtcmVkLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8VHJhc2gyIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L21haW4+XG5cbiAgICAgIHsvKiBBZGQgQXBwIE1vZGFsICovfVxuICAgICAge3Nob3dBZGRBcHAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgYmctYmxhY2svNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgei01MCBwLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXNsYXRlLTkwMCByb3VuZGVkLXhsIHAtNiB3LWZ1bGwgbWF4LXctbWRcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIG1iLTRcIj5BZGQgTmV3IEFwcDwvaDI+XG4gICAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17YWRkQXBwfSBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSB0ZXh0LXNsYXRlLTQwMCBtYi0xXCI+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLm5hbWV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld0FwcCh7IC4uLm5ld0FwcCwgbmFtZTogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctc2xhdGUtODAwIGJvcmRlciBib3JkZXItc2xhdGUtNzAwIHJvdW5kZWQtbGcgcHgtMyBweS0yIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSB0ZXh0LXNsYXRlLTQwMCBtYi0xXCI+RGVzY3JpcHRpb248L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e25ld0FwcC5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCBkZXNjcmlwdGlvbjogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctc2xhdGUtODAwIGJvcmRlciBib3JkZXItc2xhdGUtNzAwIHJvdW5kZWQtbGcgcHgtMyBweS0yIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gdGV4dC1zbGF0ZS00MDAgbWItMVwiPlVSTDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLnVybH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdBcHAoeyAuLi5uZXdBcHAsIHVybDogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIgdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSB0ZXh0LXNsYXRlLTQwMCBtYi0xXCI+UG9ydDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtuZXdBcHAucG9ydH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdBcHAoeyAuLi5uZXdBcHAsIHBvcnQ6IHBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB9KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLXNsYXRlLTgwMCBib3JkZXIgYm9yZGVyLXNsYXRlLTcwMCByb3VuZGVkLWxnIHB4LTMgcHktMiB0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTMgcHQtMlwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0FkZEFwcChmYWxzZSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgYmctc2xhdGUtODAwIGhvdmVyOmJnLXNsYXRlLTcwMCB0ZXh0LXNsYXRlLTMwMCBweS0yIHJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIGJnLWVtZXJhbGQtNTAwIGhvdmVyOmJnLWVtZXJhbGQtNjAwIHRleHQtd2hpdGUgcHktMiByb3VuZGVkLWxnIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBBZGQgQXBwXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBBcHAgRGV0YWlsIE1vZGFsICovfVxuICAgICAge3NlbGVjdGVkQXBwICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIGJnLWJsYWNrLzUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHotNTAgcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1zbGF0ZS05MDAgcm91bmRlZC14bCBwLTYgdy1mdWxsIG1heC13LWxnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi00XCI+XG4gICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LXdoaXRlXCI+e3NlbGVjdGVkQXBwLm5hbWV9PC9oMj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQXBwKG51bGwpfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctc2xhdGUtODAwIHJvdW5kZWQtbGcgcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtc2xhdGUtNTAwXCI+VVJMPC9wPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1lbWVyYWxkLTQwMCBmb250LW1vbm8gdGV4dC1zbSBicmVhay1hbGxcIj57c2VsZWN0ZWRBcHAudXJsfTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMCByb3VuZGVkLWxnIHAtM1wiPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTUwMFwiPlBvcnQ8L3A+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGZvbnQtbW9ub1wiPntzZWxlY3RlZEFwcC5wb3J0fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQXBwKHNlbGVjdGVkQXBwKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRBcHAobnVsbCk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIGJnLWVtZXJhbGQtNTAwIGhvdmVyOmJnLWVtZXJhbGQtNjAwIHRleHQtd2hpdGUgcHktMiByb3VuZGVkLWxnIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDaGVjayBOb3dcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUFwcChzZWxlY3RlZEFwcC5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkQXBwKG51bGwpO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1yZWQtNTAwLzIwIGhvdmVyOmJnLXJlZC01MDAvMzAgdGV4dC1yZWQtNDAwIHB5LTIgcm91bmRlZC1sZyBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkFjdGl2aXR5IiwiUGx1cyIsIlJlZnJlc2hDdyIsIlRyYXNoMiIsIkV4dGVybmFsTGluayIsIkxheW91dEdyaWQiLCJMaXN0IiwiTGluZUNoYXJ0IiwiTGluZSIsIlJlc3BvbnNpdmVDb250YWluZXIiLCJIZWFydGJlYXRNb25pdG9yIiwiYXBwcyIsInNldEFwcHMiLCJzdGF0dXMiLCJzZXRTdGF0dXMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImNoZWNraW5nIiwic2V0Q2hlY2tpbmciLCJzaG93QWRkQXBwIiwic2V0U2hvd0FkZEFwcCIsInZpZXdNb2RlIiwic2V0Vmlld01vZGUiLCJzZWxlY3RlZEFwcCIsInNldFNlbGVjdGVkQXBwIiwibmV3QXBwIiwic2V0TmV3QXBwIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidXJsIiwicG9ydCIsInBhdGgiLCJjb21tYW5kIiwiY2F0ZWdvcnkiLCJjb2xvciIsImVuYWJsZWQiLCJmZXRjaERhdGEiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInJlcyIsImZldGNoIiwiZGF0YSIsImpzb24iLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjaGVja0FwcCIsImFwcCIsImlkIiwic3RhcnQiLCJEYXRlIiwibm93IiwibWV0aG9kIiwibW9kZSIsInJlc3BvbnNlVGltZSIsImVudHJ5IiwiYXBwSWQiLCJ0aW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImFjdGlvbiIsImFkZEFwcCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImRlbGV0ZUFwcCIsImNvbmZpcm0iLCJnZXRBcHBTdGF0dXMiLCJhcHBTdGF0dXMiLCJmaWx0ZXIiLCJzIiwibGF0ZXN0IiwibGVuZ3RoIiwiaXNVcCIsInVwdGltZSIsIk1hdGgiLCJyb3VuZCIsImhpc3RvcnkiLCJzbGljZSIsInRvdGFsQXBwcyIsIm9ubGluZUFwcHMiLCJvZmZsaW5lQXBwcyIsImRpdiIsImNsYXNzTmFtZSIsImhlYWRlciIsImgxIiwicCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJtYWluIiwibWFwIiwic3BhbiIsImgzIiwid2lkdGgiLCJoZWlnaHQiLCJoIiwiaSIsInR5cGUiLCJkYXRhS2V5Iiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJkb3QiLCJzdG9wUHJvcGFnYXRpb24iLCJkaXNhYmxlZCIsImEiLCJocmVmIiwidGFyZ2V0IiwicmVsIiwiaDIiLCJmb3JtIiwib25TdWJtaXQiLCJsYWJlbCIsImlucHV0IiwidmFsdWUiLCJvbkNoYW5nZSIsInJlcXVpcmVkIiwicGFyc2VJbnQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/page.tsx\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/layout-grid.js":
/*!*****************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/layout-grid.js ***!
\*****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ LayoutGrid)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"rect\",\n {\n width: \"7\",\n height: \"7\",\n x: \"3\",\n y: \"3\",\n rx: \"1\",\n key: \"1g98yp\"\n }\n ],\n [\n \"rect\",\n {\n width: \"7\",\n height: \"7\",\n x: \"14\",\n y: \"3\",\n rx: \"1\",\n key: \"6d4xhi\"\n }\n ],\n [\n \"rect\",\n {\n width: \"7\",\n height: \"7\",\n x: \"14\",\n y: \"14\",\n rx: \"1\",\n key: \"nxv5o0\"\n }\n ],\n [\n \"rect\",\n {\n width: \"7\",\n height: \"7\",\n x: \"3\",\n y: \"14\",\n rx: \"1\",\n key: \"1bb6yr\"\n }\n ]\n];\nconst LayoutGrid = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"LayoutGrid\", __iconNode);\n //# sourceMappingURL=layout-grid.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbGF5b3V0LWdyaWQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxVQUF1QjtJQUNsQztRQUFDLE9BQVE7UUFBQTtZQUFFLE9BQU87WUFBSyxDQUFRO1lBQUssQ0FBRztZQUFLLEdBQUcsQ0FBSztZQUFBLElBQUksQ0FBSztZQUFBLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDNUU7UUFBQyxPQUFRO1FBQUE7WUFBRSxPQUFPO1lBQUssQ0FBUTtZQUFLLENBQUc7WUFBTSxHQUFHLENBQUs7WUFBQSxJQUFJLENBQUs7WUFBQSxLQUFLO1FBQUEsQ0FBVTtLQUFBO0lBQzdFO1FBQUMsT0FBUTtRQUFBO1lBQUUsT0FBTztZQUFLLENBQVE7WUFBSyxDQUFHO1lBQU0sR0FBRyxDQUFNO1lBQUEsSUFBSSxDQUFLO1lBQUEsS0FBSztRQUFBLENBQVU7S0FBQTtJQUM5RTtRQUFDLE9BQVE7UUFBQTtZQUFFLE9BQU87WUFBSyxDQUFRO1lBQUssQ0FBRztZQUFLLEdBQUcsQ0FBTTtZQUFBLElBQUksQ0FBSztZQUFBLEtBQUs7UUFBQSxDQUFVO0tBQUE7Q0FDL0U7QUFhTSxpQkFBYSxrRUFBaUIsZUFBYyxDQUFVIiwic291cmNlcyI6WyIvVXNlcnMvbWF0dGJydWNlL0RvY3VtZW50cy9Qcm9qZWN0cy9zcmMvaWNvbnMvbGF5b3V0LWdyaWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5pbXBvcnQgeyBJY29uTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IF9faWNvbk5vZGU6IEljb25Ob2RlID0gW1xuICBbJ3JlY3QnLCB7IHdpZHRoOiAnNycsIGhlaWdodDogJzcnLCB4OiAnMycsIHk6ICczJywgcng6ICcxJywga2V5OiAnMWc5OHlwJyB9XSxcbiAgWydyZWN0JywgeyB3aWR0aDogJzcnLCBoZWlnaHQ6ICc3JywgeDogJzE0JywgeTogJzMnLCByeDogJzEnLCBrZXk6ICc2ZDR4aGknIH1dLFxuICBbJ3JlY3QnLCB7IHdpZHRoOiAnNycsIGhlaWdodDogJzcnLCB4OiAnMTQnLCB5OiAnMTQnLCByeDogJzEnLCBrZXk6ICdueHY1bzAnIH1dLFxuICBbJ3JlY3QnLCB7IHdpZHRoOiAnNycsIGhlaWdodDogJzcnLCB4OiAnMycsIHk6ICcxNCcsIHJ4OiAnMScsIGtleTogJzFiYjZ5cicgfV0sXG5dO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgTGF5b3V0R3JpZFxuICogQGRlc2NyaXB0aW9uIEx1Y2lkZSBTVkcgaWNvbiBjb21wb25lbnQsIHJlbmRlcnMgU1ZHIEVsZW1lbnQgd2l0aCBjaGlsZHJlbi5cbiAqXG4gKiBAcHJldmlldyAhW2ltZ10oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlBZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWdvZ0lIZHBaSFJvUFNJeU5DSUtJQ0JvWldsbmFIUTlJakkwSWdvZ0lIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSUtJQ0JtYVd4c1BTSnViMjVsSWdvZ0lITjBjbTlyWlQwaUl6QXdNQ0lnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN0lHSnZjbVJsY2kxeVlXUnBkWE02SURKd2VDSUtJQ0J6ZEhKdmEyVXRkMmxrZEdnOUlqSWlDaUFnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lnb2dJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUNqNEtJQ0E4Y21WamRDQjNhV1IwYUQwaU55SWdhR1ZwWjJoMFBTSTNJaUI0UFNJeklpQjVQU0l6SWlCeWVEMGlNU0lnTHo0S0lDQThjbVZqZENCM2FXUjBhRDBpTnlJZ2FHVnBaMmgwUFNJM0lpQjRQU0l4TkNJZ2VUMGlNeUlnY25nOUlqRWlJQzgrQ2lBZ1BISmxZM1FnZDJsa2RHZzlJamNpSUdobGFXZG9kRDBpTnlJZ2VEMGlNVFFpSUhrOUlqRTBJaUJ5ZUQwaU1TSWdMejRLSUNBOGNtVmpkQ0IzYVdSMGFEMGlOeUlnYUdWcFoyaDBQU0kzSWlCNFBTSXpJaUI1UFNJeE5DSWdjbmc5SWpFaUlDOCtDand2YzNablBnbz0pIC0gaHR0cHM6Ly9sdWNpZGUuZGV2L2ljb25zL2xheW91dC1ncmlkXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgTGF5b3V0R3JpZCA9IGNyZWF0ZUx1Y2lkZUljb24oJ0xheW91dEdyaWQnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgTGF5b3V0R3JpZDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/layout-grid.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/list.js":
/*!**********************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/list.js ***!
\**********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ List)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M3 12h.01\",\n key: \"nlz23k\"\n }\n ],\n [\n \"path\",\n {\n d: \"M3 18h.01\",\n key: \"1tta3j\"\n }\n ],\n [\n \"path\",\n {\n d: \"M3 6h.01\",\n key: \"1rqtza\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 12h13\",\n key: \"1za7za\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 18h13\",\n key: \"1lx6n3\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 6h13\",\n key: \"ik3vkj\"\n }\n ]\n];\nconst List = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"List\", __iconNode);\n //# sourceMappingURL=list.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbGlzdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFHTyxNQUFNLFVBQXVCO0lBQ2xDO1FBQUMsTUFBUTtRQUFBO1lBQUUsR0FBRyxDQUFhO1lBQUEsS0FBSztRQUFBLENBQVU7S0FBQTtJQUMxQztRQUFDLE1BQVE7UUFBQTtZQUFFLEdBQUcsQ0FBYTtZQUFBLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDMUM7UUFBQyxNQUFRO1FBQUE7WUFBRSxHQUFHLENBQVk7WUFBQSxLQUFLO1FBQUEsQ0FBVTtLQUFBO0lBQ3pDO1FBQUMsTUFBUTtRQUFBO1lBQUUsR0FBRyxDQUFZO1lBQUEsS0FBSztRQUFBLENBQVU7S0FBQTtJQUN6QztRQUFDLE1BQVE7UUFBQTtZQUFFLEdBQUcsQ0FBWTtZQUFBLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDekM7UUFBQyxNQUFRO1FBQUE7WUFBRSxHQUFHLENBQVc7WUFBQSxLQUFLO1FBQUEsQ0FBVTtLQUFBO0NBQzFDO0FBYU0sV0FBTyxrRUFBaUIsU0FBUSxDQUFVIiwic291cmNlcyI6WyIvVXNlcnMvbWF0dGJydWNlL0RvY3VtZW50cy9Qcm9qZWN0cy9zcmMvaWNvbnMvbGlzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcbmltcG9ydCB7IEljb25Ob2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgX19pY29uTm9kZTogSWNvbk5vZGUgPSBbXG4gIFsncGF0aCcsIHsgZDogJ00zIDEyaC4wMScsIGtleTogJ25sejIzaycgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00zIDE4aC4wMScsIGtleTogJzF0dGEzaicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00zIDZoLjAxJywga2V5OiAnMXJxdHphJyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTggMTJoMTMnLCBrZXk6ICcxemE3emEnIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNOCAxOGgxMycsIGtleTogJzFseDZuMycgfV0sXG4gIFsncGF0aCcsIHsgZDogJ004IDZoMTMnLCBrZXk6ICdpazN2a2onIH1dLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIExpc3RcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKTk15QXhNbWd1TURFaUlDOCtDaUFnUEhCaGRHZ2daRDBpVFRNZ01UaG9MakF4SWlBdlBnb2dJRHh3WVhSb0lHUTlJazB6SURab0xqQXhJaUF2UGdvZ0lEeHdZWFJvSUdROUlrMDRJREV5YURFeklpQXZQZ29nSUR4d1lYUm9JR1E5SWswNElERTRhREV6SWlBdlBnb2dJRHh3WVhSb0lHUTlJazA0SURab01UTWlJQzgrQ2p3dmMzWm5QZ289KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9saXN0XG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgTGlzdCA9IGNyZWF0ZUx1Y2lkZUljb24oJ0xpc3QnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgTGlzdDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/list.js\n"));
/***/ })
});