diff --git "a/LocalGPT/privateGPT/client/.next/static/chunks/app/page.js" "b/LocalGPT/privateGPT/client/.next/static/chunks/app/page.js"
new file mode 100644--- /dev/null
+++ "b/LocalGPT/privateGPT/client/.next/static/chunks/app/page.js"
@@ -0,0 +1,723 @@
+/*
+ * 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["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/page"],{
+
+/***/ "(app-client)/./node_modules/@restart/ui/esm/Button.js":
+/*!************************************************!*\
+ !*** ./node_modules/@restart/ui/esm/Button.js ***!
+ \************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isTrivialHref\": function() { return /* binding */ isTrivialHref; },\n/* harmony export */ \"useButtonProps\": function() { return /* binding */ useButtonProps; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-client)/./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_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-client)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _excluded = [\"as\", \"disabled\"];\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\nfunction isTrivialHref(href) {\n return !href || href.trim() === '#';\n}\nfunction useButtonProps({\n tagName,\n disabled,\n href,\n target,\n rel,\n role,\n onClick,\n tabIndex = 0,\n type\n}) {\n if (!tagName) {\n if (href != null || target != null || rel != null) {\n tagName = 'a';\n } else {\n tagName = 'button';\n }\n }\n const meta = {\n tagName\n };\n if (tagName === 'button') {\n return [{\n type: type || 'button',\n disabled\n }, meta];\n }\n const handleClick = event => {\n if (disabled || tagName === 'a' && isTrivialHref(href)) {\n event.preventDefault();\n }\n if (disabled) {\n event.stopPropagation();\n return;\n }\n onClick == null ? void 0 : onClick(event);\n };\n const handleKeyDown = event => {\n if (event.key === ' ') {\n event.preventDefault();\n handleClick(event);\n }\n };\n if (tagName === 'a') {\n // Ensure there's a href so Enter can trigger anchor button.\n href || (href = '#');\n if (disabled) {\n href = undefined;\n }\n }\n return [{\n role: role != null ? role : 'button',\n // explicitly undefined so that it overrides the props disabled in a spread\n // e.g. \n disabled: undefined,\n tabIndex: disabled ? undefined : tabIndex,\n href,\n target: tagName === 'a' ? target : undefined,\n 'aria-disabled': !disabled ? undefined : disabled,\n rel: tagName === 'a' ? rel : undefined,\n onClick: handleClick,\n onKeyDown: handleKeyDown\n }, meta];\n}\nconst Button = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((_ref, ref) => {\n let {\n as: asProp,\n disabled\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n const [buttonProps, {\n tagName: Component\n }] = useButtonProps(Object.assign({\n tagName: asProp,\n disabled\n }, props));\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Component, Object.assign({}, props, buttonProps, {\n ref: ref\n }));\n});\nButton.displayName = 'Button';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Button);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1jbGllbnQpLy4vbm9kZV9tb2R1bGVzL0ByZXN0YXJ0L3VpL2VzbS9CdXR0b24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBLDJEQUEyRCwrQkFBK0IsaUJBQWlCLHNDQUFzQyxZQUFZLFlBQVksdUJBQXVCLE9BQU8scUJBQXFCLDBDQUEwQyw2QkFBNkI7QUFDcFE7QUFDaUI7QUFDekM7QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixXQUFXLGNBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDRCQUE0Qiw2Q0FBZ0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILHNCQUFzQixzREFBSSw0QkFBNEI7QUFDdEQ7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsK0RBQWUsTUFBTSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHJlc3RhcnQvdWkvZXNtL0J1dHRvbi5qcz8zNTcwIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IF9leGNsdWRlZCA9IFtcImFzXCIsIFwiZGlzYWJsZWRcIl07XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJpdmlhbEhyZWYoaHJlZikge1xuICByZXR1cm4gIWhyZWYgfHwgaHJlZi50cmltKCkgPT09ICcjJztcbn1cbmV4cG9ydCBmdW5jdGlvbiB1c2VCdXR0b25Qcm9wcyh7XG4gIHRhZ05hbWUsXG4gIGRpc2FibGVkLFxuICBocmVmLFxuICB0YXJnZXQsXG4gIHJlbCxcbiAgcm9sZSxcbiAgb25DbGljayxcbiAgdGFiSW5kZXggPSAwLFxuICB0eXBlXG59KSB7XG4gIGlmICghdGFnTmFtZSkge1xuICAgIGlmIChocmVmICE9IG51bGwgfHwgdGFyZ2V0ICE9IG51bGwgfHwgcmVsICE9IG51bGwpIHtcbiAgICAgIHRhZ05hbWUgPSAnYSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ05hbWUgPSAnYnV0dG9uJztcbiAgICB9XG4gIH1cbiAgY29uc3QgbWV0YSA9IHtcbiAgICB0YWdOYW1lXG4gIH07XG4gIGlmICh0YWdOYW1lID09PSAnYnV0dG9uJykge1xuICAgIHJldHVybiBbe1xuICAgICAgdHlwZTogdHlwZSB8fCAnYnV0dG9uJyxcbiAgICAgIGRpc2FibGVkXG4gICAgfSwgbWV0YV07XG4gIH1cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgaWYgKGRpc2FibGVkIHx8IHRhZ05hbWUgPT09ICdhJyAmJiBpc1RyaXZpYWxIcmVmKGhyZWYpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvbkNsaWNrID09IG51bGwgPyB2b2lkIDAgOiBvbkNsaWNrKGV2ZW50KTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBoYW5kbGVDbGljayhldmVudCk7XG4gICAgfVxuICB9O1xuICBpZiAodGFnTmFtZSA9PT0gJ2EnKSB7XG4gICAgLy8gRW5zdXJlIHRoZXJlJ3MgYSBocmVmIHNvIEVudGVyIGNhbiB0cmlnZ2VyIGFuY2hvciBidXR0b24uXG4gICAgaHJlZiB8fCAoaHJlZiA9ICcjJyk7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICBocmVmID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW3tcbiAgICByb2xlOiByb2xlICE9IG51bGwgPyByb2xlIDogJ2J1dHRvbicsXG4gICAgLy8gZXhwbGljaXRseSB1bmRlZmluZWQgc28gdGhhdCBpdCBvdmVycmlkZXMgdGhlIHByb3BzIGRpc2FibGVkIGluIGEgc3ByZWFkXG4gICAgLy8gZS5nLiA8VGFnIHsuLi5wcm9wc30gey4uLmhvb2tQcm9wc30gLz5cbiAgICBkaXNhYmxlZDogdW5kZWZpbmVkLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHRhYkluZGV4LFxuICAgIGhyZWYsXG4gICAgdGFyZ2V0OiB0YWdOYW1lID09PSAnYScgPyB0YXJnZXQgOiB1bmRlZmluZWQsXG4gICAgJ2FyaWEtZGlzYWJsZWQnOiAhZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBkaXNhYmxlZCxcbiAgICByZWw6IHRhZ05hbWUgPT09ICdhJyA/IHJlbCA6IHVuZGVmaW5lZCxcbiAgICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd25cbiAgfSwgbWV0YV07XG59XG5jb25zdCBCdXR0b24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZigoX3JlZiwgcmVmKSA9PiB7XG4gIGxldCB7XG4gICAgICBhczogYXNQcm9wLFxuICAgICAgZGlzYWJsZWRcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFtidXR0b25Qcm9wcywge1xuICAgIHRhZ05hbWU6IENvbXBvbmVudFxuICB9XSA9IHVzZUJ1dHRvblByb3BzKE9iamVjdC5hc3NpZ24oe1xuICAgIHRhZ05hbWU6IGFzUHJvcCxcbiAgICBkaXNhYmxlZFxuICB9LCBwcm9wcykpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCBwcm9wcywgYnV0dG9uUHJvcHMsIHtcbiAgICByZWY6IHJlZlxuICB9KSk7XG59KTtcbkJ1dHRvbi5kaXNwbGF5TmFtZSA9ICdCdXR0b24nO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-client)/./node_modules/@restart/ui/esm/Button.js\n"));
+
+/***/ }),
+
+/***/ "(app-client)/./node_modules/classnames/index.js":
+/*!******************************************!*\
+ !*** ./node_modules/classnames/index.js ***!
+ \******************************************/
+/***/ (function(module, exports, __webpack_require__) {
+
+eval(__webpack_require__.ts("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif ( true && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}());\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1jbGllbnQpLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSyxLQUE2QjtBQUNsQztBQUNBO0FBQ0EsR0FBRyxTQUFTLElBQTRFO0FBQ3hGO0FBQ0EsRUFBRSxpQ0FBcUIsRUFBRSxtQ0FBRTtBQUMzQjtBQUNBLEdBQUc7QUFBQSxrR0FBQztBQUNKLEdBQUcsS0FBSyxFQUVOO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcz83MDM0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIG5hdGl2ZUNvZGVTdHJpbmcgPSAnW25hdGl2ZSBjb2RlXSc7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcygpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdFx0aWYgKGFyZy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgaW5uZXIgPSBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0XHRcdFx0aWYgKGlubmVyKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goaW5uZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZy50b1N0cmluZygpKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-client)/./node_modules/classnames/index.js\n"));
+
+/***/ }),
+
+/***/ "(app-client)/./node_modules/clsx/dist/clsx.m.js":
+/*!******************************************!*\
+ !*** ./node_modules/clsx/dist/clsx.m.js ***!
+ \******************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"clsx\": function() { return /* binding */ clsx; }\n/* harmony export */ });\nfunction r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t{\n try {\n setIsLoading(true);\n const res = await fetch(\"http://localhost:5000/ingest\");\n const jsonData = await res.json();\n if (!res.ok) {\n // This will activate the closest `error.js` Error Boundary\n console.log(\"Error Ingesting data\");\n setIsLoading(false);\n } else {\n setIsLoading(false);\n console.log(jsonData);\n }\n } catch (error) {\n setIsLoading(false);\n response.text().then((text)=>{\n react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.error(\"Error Ingesting data.\" + text);\n });\n }\n };\n const handleDownloadModel = async ()=>{\n try {\n setdownloadInProgress(true);\n const res = await fetch(\"http://localhost:5000/download_model\");\n const jsonData = await res.json();\n if (!res.ok) {\n response.text().then((text)=>{\n react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.error(\"Error downloading model.\" + text);\n });\n setdownloadInProgress(false);\n } else {\n setdownloadInProgress(false);\n react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.success(\"Model Download complete\");\n console.log(jsonData);\n }\n } catch (error) {\n setdownloadInProgress(false);\n console.log(error);\n react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.error(\"Error downloading model\");\n }\n };\n const handleFileChange = (event)=>{\n if (event.target.files[0] != null) {\n setSelectedFile(event.target.files[0]);\n }\n };\n const handleUpload = async ()=>{\n setIsUploading(true);\n try {\n const formData = new FormData();\n formData.append(\"document\", selectedFile);\n const res = await fetch(\"http://localhost:5000/upload_doc\", {\n method: \"POST\",\n body: formData\n });\n if (!res.ok) {\n console.log(\"Error Uploading document\");\n response.text().then((text)=>{\n react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.error(\"Error Uploading document.\" + text);\n });\n setSelectedFile(null); // Clear the selected file after successful upload\n document.getElementById(\"file-input\").value = \"\";\n setIsUploading(false);\n } else {\n const data = await res.json();\n console.log(data);\n react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.success(\"Document Upload Successful\");\n setSelectedFile(null); // Clear the selected file after successful upload\n document.getElementById(\"file-input\").value = \"\";\n setIsUploading(false);\n }\n } catch (error) {\n console.log(\"error\");\n react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.error(\"Error Uploading document\");\n setSelectedFile(null); // Clear the selected file after successful upload\n document.getElementById(\"file-input\").value = \"\";\n setIsUploading(false);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-4 mt-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Group, {\n className: \"mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Label, {\n children: \"Upload your documents\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 96,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Control, {\n type: \"file\",\n size: \"sm\",\n onChange: handleFileChange,\n id: \"file-input\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 97,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 95,\n columnNumber: 9\n }, this),\n isUploading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"d-flex justify-content-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n animation: \"border\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 104,\n columnNumber: 70\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ms-3\",\n children: \"uploading\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 104,\n columnNumber: 100\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 104,\n columnNumber: 23\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: (e)=>handleUpload(),\n children: \"Upload\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 104,\n columnNumber: 146\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 94,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n direction: \"horizontal\",\n className: \"mx-4 mt-5\",\n gap: 3,\n children: [\n downloadInProgress ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"d-flex justify-content-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n animation: \"border\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 108,\n columnNumber: 58\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ms-3\",\n children: \"downloading\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 108,\n columnNumber: 88\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 108,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: (e)=>{\n handleDownloadModel();\n },\n children: \"Download Model\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 111,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 110,\n columnNumber: 11\n }, this),\n isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"d-flex justify-content-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n animation: \"border\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 121,\n columnNumber: 58\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ms-3\",\n children: \"ingesting\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 121,\n columnNumber: 88\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 121,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: ()=>ingestData(),\n children: \"Ingest Data\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 123,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\ConfigSideNav.js\",\n lineNumber: 106,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true);\n}\n_s(ConfigSideNav, \"6TmninYMJoQ8NH2CeRiXmnKwkWg=\");\n_c = ConfigSideNav;\nvar _c;\n$RefreshReg$(_c, \"ConfigSideNav\");\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 prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== 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 on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = 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 (prevExports !== 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(prevExports, 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 = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1jbGllbnQpLy4vY29tcG9uZW50cy9Db25maWdTaWRlTmF2LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQ3dDO0FBQ3VCO0FBQ1I7QUFFeEMsU0FBU1EsZ0JBQWdCOztJQUN0QyxNQUFNLENBQUNDLFdBQVdDLGFBQWEsR0FBR1QsK0NBQVFBLENBQUMsS0FBSztJQUNoRCxNQUFNLENBQUNVLG9CQUFvQkMsc0JBQXNCLEdBQUdYLCtDQUFRQSxDQUFDLEtBQUs7SUFDbEUsTUFBTSxDQUFDWSxjQUFjQyxnQkFBZ0IsR0FBR2IsK0NBQVFBLENBQUMsSUFBSTtJQUNyRCxNQUFNLENBQUNjLGFBQWFDLGVBQWUsR0FBR2YsK0NBQVFBLENBQUMsSUFBSTtJQUVuRCxNQUFNZ0IsYUFBYSxVQUFZO1FBQzdCLElBQUk7WUFDRlAsYUFBYSxJQUFJO1lBQ2pCLE1BQU1RLE1BQU0sTUFBTUMsTUFBTTtZQUN4QixNQUFNQyxXQUFXLE1BQU1GLElBQUlHLElBQUk7WUFDL0IsSUFBSSxDQUFDSCxJQUFJSSxFQUFFLEVBQUU7Z0JBQ1gsMkRBQTJEO2dCQUMzREMsUUFBUUMsR0FBRyxDQUFDO2dCQUNaZCxhQUFhLEtBQUs7WUFDcEIsT0FBTztnQkFDTEEsYUFBYSxLQUFLO2dCQUNsQmEsUUFBUUMsR0FBRyxDQUFDSjtZQUNkLENBQUM7UUFDSCxFQUFFLE9BQU9LLE9BQU87WUFDZGYsYUFBYSxLQUFLO1lBQ3JCZ0IsU0FBU0MsSUFBSSxHQUFHQyxJQUFJLENBQUNELENBQUFBLE9BQVE7Z0JBQUNwQix1REFBVyxDQUFDLDBCQUF3Qm9CO1lBQU07UUFDdkU7SUFDRjtJQUVBLE1BQU1FLHNCQUFzQixVQUFZO1FBQ3RDLElBQUk7WUFDRmpCLHNCQUFzQixJQUFJO1lBQzFCLE1BQU1NLE1BQU0sTUFBTUMsTUFBTTtZQUN4QixNQUFNQyxXQUFXLE1BQU1GLElBQUlHLElBQUk7WUFDL0IsSUFBSSxDQUFDSCxJQUFJSSxFQUFFLEVBQUU7Z0JBQ2RJLFNBQVNDLElBQUksR0FB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NEJBSUo7b0JBQ0FwQiwwQkFDQyw4REFBQ29DO3dCQUFJQyxXQUFVOzswQ0FBZ0MsOERBQUN6Qyx1REFBT0E7Z0NBQUNpRCxXQUFVOzs7Ozs7MENBQVcsOERBQUNDO2dDQUFLVCxXQUFVOzBDQUFPOzs7Ozs7Ozs7Ozs2Q0FFcEcsOERBQUM1Qyx1REFBTUE7d0JBQUNzRCxTQUFTLElBQU12QztrQ0FBYzs7Ozs7NEJBQ3RDOzs7Ozs7Ozs7QUFJVCxDQUFDO0dBMUh1QlQ7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9Db25maWdTaWRlTmF2LmpzP2E1MzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XHJcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBCdXR0b24sIFN0YWNrLCBGb3JtLFNwaW5uZXIgIH0gZnJvbSBcInJlYWN0LWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgeyBUb2FzdENvbnRhaW5lciwgdG9hc3QgfSBmcm9tIFwicmVhY3QtdG9hc3RpZnlcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbmZpZ1NpZGVOYXYoKSB7XHJcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbZG93bmxvYWRJblByb2dyZXNzLCBzZXRkb3dubG9hZEluUHJvZ3Jlc3NdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtzZWxlY3RlZEZpbGUsIHNldFNlbGVjdGVkRmlsZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICBjb25zdCBbaXNVcGxvYWRpbmcsIHNldElzVXBsb2FkaW5nXSA9IHVzZVN0YXRlKG51bGwpO1xyXG5cclxuICBjb25zdCBpbmdlc3REYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9pbmdlc3RcIik7XHJcbiAgICAgIGNvbnN0IGpzb25EYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcclxuICAgICAgaWYgKCFyZXMub2spIHtcclxuICAgICAgICAvLyBUaGlzIHdpbGwgYWN0aXZhdGUgdGhlIGNsb3Nlc3QgYGVycm9yLmpzYCBFcnJvciBCb3VuZGFyeVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgSW5nZXN0aW5nIGRhdGFcIik7XHJcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGpzb25EYXRhKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcclxuXHQgIHJlc3BvbnNlLnRleHQoKS50aGVuKHRleHQgPT4ge3RvYXN0LmVycm9yKFwiRXJyb3IgSW5nZXN0aW5nIGRhdGEuXCIrdGV4dCk7fSlcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVEb3dubG9hZE1vZGVsID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0ZG93bmxvYWRJblByb2dyZXNzKHRydWUpO1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9kb3dubG9hZF9tb2RlbFwiKTtcclxuICAgICAgY29uc3QganNvbkRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xyXG4gICAgICBpZiAoIXJlcy5vaykge1xyXG5cdCAgICByZXNwb25zZS50ZXh0KCkudGhlbih0ZXh0ID0+IHt0b2FzdC5lcnJvcihcIkVycm9yIGRvd25sb2FkaW5nIG1vZGVsLlwiK3RleHQpO30pICBcclxuICAgICAgICBzZXRkb3dubG9hZEluUHJvZ3Jlc3MoZmFsc2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldGRvd25sb2FkSW5Qcm9ncmVzcyhmYWxzZSk7XHJcbiAgICAgICAgdG9hc3Quc3VjY2VzcyhcIk1vZGVsIERvd25sb2FkIGNvbXBsZXRlXCIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGpzb25EYXRhKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgc2V0ZG93bmxvYWRJblByb2dyZXNzKGZhbHNlKTtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICB0b2FzdC5lcnJvcihcIkVycm9yIGRvd25sb2FkaW5nIG1vZGVsXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgIGlmKGV2ZW50LnRhcmdldC5maWxlc1swXSE9bnVsbCl7XHJcbiAgICAgIHNldFNlbGVjdGVkRmlsZShldmVudC50YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlVXBsb2FkID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgc2V0SXNVcGxvYWRpbmcodHJ1ZSlcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcImRvY3VtZW50XCIsIHNlbGVjdGVkRmlsZSk7XHJcblxyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC91cGxvYWRfZG9jXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGJvZHk6IGZvcm1EYXRhLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghcmVzLm9rKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFcnJvciBVcGxvYWRpbmcgZG9jdW1lbnRcIik7XHJcblx0XHRyZXNwb25zZS50ZXh0KCkudGhlbih0ZXh0ID0+IHt0b2FzdC5lcnJvcihcIkVycm9yIFVwbG9hZGluZyBkb2N1bWVudC5cIit0ZXh0KTt9KVxyXG4gICAgICAgIHNldFNlbGVjdGVkRmlsZShudWxsKTsgLy8gQ2xlYXIgdGhlIHNlbGVjdGVkIGZpbGUgYWZ0ZXIgc3VjY2Vzc2Z1bCB1cGxvYWRcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZpbGUtaW5wdXRcIikudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHNldElzVXBsb2FkaW5nKGZhbHNlKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoXCJEb2N1bWVudCBVcGxvYWQgU3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICBzZXRTZWxlY3RlZEZpbGUobnVsbCk7IC8vIENsZWFyIHRoZSBzZWxlY3RlZCBmaWxlIGFmdGVyIHN1Y2Nlc3NmdWwgdXBsb2FkXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmaWxlLWlucHV0XCIpLnZhbHVlID0gXCJcIjtcclxuICAgICAgICBzZXRJc1VwbG9hZGluZyhmYWxzZSlcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJlcnJvclwiKTtcclxuICAgICAgdG9hc3QuZXJyb3IoXCJFcnJvciBVcGxvYWRpbmcgZG9jdW1lbnRcIik7XHJcbiAgICAgIHNldFNlbGVjdGVkRmlsZShudWxsKTsgLy8gQ2xlYXIgdGhlIHNlbGVjdGVkIGZpbGUgYWZ0ZXIgc3VjY2Vzc2Z1bCB1cGxvYWRcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmaWxlLWlucHV0XCIpLnZhbHVlID0gXCJcIjtcclxuICAgICAgc2V0SXNVcGxvYWRpbmcoZmFsc2UpXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDw+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtNCBtdC0zXCI+XHJcbiAgICAgICAgPEZvcm0uR3JvdXAgY2xhc3NOYW1lPVwibWItM1wiPlxyXG4gICAgICAgICAgPEZvcm0uTGFiZWw+VXBsb2FkIHlvdXIgZG9jdW1lbnRzPC9Gb3JtLkxhYmVsPlxyXG4gICAgICAgICAgPEZvcm0uQ29udHJvbFxyXG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxyXG4gICAgICAgICAgICBpZD1cImZpbGUtaW5wdXRcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L0Zvcm0uR3JvdXA+XHJcbiAgICAgICAge2lzVXBsb2FkaW5nPyA8ZGl2IGNsYXNzTmFtZT1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PFNwaW5uZXIgYW5pbWF0aW9uPVwiYm9yZGVyXCIgLz48c3BhbiBjbGFzc05hbWU9XCJtcy0zXCI+dXBsb2FkaW5nPC9zcGFuPjwvZGl2Pjo8QnV0dG9uIG9uQ2xpY2s9eyhlKSA9PiBoYW5kbGVVcGxvYWQoKX0+VXBsb2FkPC9CdXR0b24+fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPFN0YWNrIGRpcmVjdGlvbj1cImhvcml6b250YWxcIiBjbGFzc05hbWU9XCJteC00IG10LTVcIiBnYXA9ezN9PlxyXG4gICAgICAgIHtkb3dubG9hZEluUHJvZ3Jlc3MgPyAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PFNwaW5uZXIgYW5pbWF0aW9uPVwiYm9yZGVyXCIgLz48c3BhbiBjbGFzc05hbWU9XCJtcy0zXCI+ZG93bmxvYWRpbmc8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgKSA6IChcclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRG93bmxvYWRNb2RlbCgpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBEb3dubG9hZCBNb2RlbFxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge2lzTG9hZGluZyA/IChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48U3Bpbm5lciBhbmltYXRpb249XCJib3JkZXJcIiAvPjxzcGFuIGNsYXNzTmFtZT1cIm1zLTNcIj5pbmdlc3Rpbmc8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgKSA6IChcclxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gaW5nZXN0RGF0YSgpfT5Jbmdlc3QgRGF0YTwvQnV0dG9uPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvU3RhY2s+XHJcbiAgICA8Lz5cclxuICApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiQnV0dG9uIiwiU3RhY2siLCJGb3JtIiwiU3Bpbm5lciIsIlRvYXN0Q29udGFpbmVyIiwidG9hc3QiLCJDb25maWdTaWRlTmF2IiwiaXNMb2FkaW5nIiwic2V0SXNMb2FkaW5nIiwiZG93bmxvYWRJblByb2dyZXNzIiwic2V0ZG93bmxvYWRJblByb2dyZXNzIiwic2VsZWN0ZWRGaWxlIiwic2V0U2VsZWN0ZWRGaWxlIiwiaXNVcGxvYWRpbmciLCJzZXRJc1VwbG9hZGluZyIsImluZ2VzdERhdGEiLCJyZXMiLCJmZXRjaCIsImpzb25EYXRhIiwianNvbiIsIm9rIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwicmVzcG9uc2UiLCJ0ZXh0IiwidGhlbiIsImhhbmRsZURvd25sb2FkTW9kZWwiLCJzdWNjZXNzIiwiaGFuZGxlRmlsZUNoYW5nZSIsImV2ZW50IiwidGFyZ2V0IiwiZmlsZXMiLCJoYW5kbGVVcGxvYWQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwibWV0aG9kIiwiYm9keSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJ2YWx1ZSIsImRhdGEiLCJkaXYiLCJjbGFzc05hbWUiLCJHcm91cCIsIkxhYmVsIiwiQ29udHJvbCIsInR5cGUiLCJzaXplIiwib25DaGFuZ2UiLCJpZCIsImFuaW1hdGlvbiIsInNwYW4iLCJvbkNsaWNrIiwiZSIsImRpcmVjdGlvbiIsImdhcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-client)/./components/ConfigSideNav.js\n"));
+
+/***/ }),
+
+/***/ "(app-client)/./components/MainContainer.js":
+/*!*************************************!*\
+ !*** ./components/MainContainer.js ***!
+ \*************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ MainContainer; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-client)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-client)/./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 react_bootstrap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-bootstrap */ \"(app-client)/./node_modules/react-bootstrap/esm/Stack.js\");\n/* harmony import */ var react_bootstrap__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-bootstrap */ \"(app-client)/./node_modules/react-bootstrap/esm/Spinner.js\");\n/* harmony import */ var react_bootstrap__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-bootstrap */ \"(app-client)/./node_modules/react-bootstrap/esm/FormControl.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(app-client)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-toastify */ \"(app-client)/./node_modules/react-toastify/dist/react-toastify.esm.mjs\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nfunction MainContainer() {\n _s();\n const [chat, setChat] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [question, setQuestion] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const chatRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n chatRef.current = chat;\n const handleInputChanges = (e)=>{\n setQuestion(e.target.value);\n e.target.style.height = \"auto\";\n e.target.style.height = e.target.scrollHeight + \"px\";\n };\n const askAI = async ()=>{\n if (question === \"\") {\n react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.error(\"Please enter valid input and try again.\");\n } else {\n setLoading(true);\n let getQuestion = question;\n setChat((chat)=>[\n ...chat,\n {\n isBot: false,\n msg: question\n }\n ]);\n setQuestion(\"\");\n try {\n const response = await fetch(\"http://localhost:5000/get_answer\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(question)\n });\n if (!response.ok) {\n response.text().then((text)=>{\n react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.error(\"Error getting data.\" + text);\n });\n setLoading(false);\n } else {\n const data = await response.json();\n setChat([\n ...chatRef.current,\n {\n isBot: true,\n msg: data.answer,\n source: data.source\n }\n ]);\n setLoading(false);\n }\n } catch (error) {\n react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.error(\"Error Fetching Answer. Please try again.\");\n setLoading(false);\n }\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \" mx-2 px-md-5 py-sm-4 chat-scroll\",\n children: [\n chat.length > 0 ? chat.map((msg)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n direction: \"vertical\",\n gap: 3,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: msg.isBot ? \" p-4 text-start w-100 position-relative bot-msg mb-3\" : \" p-4 text-start w-100 position-relative user-msg mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: msg.isBot ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n fontSize: \"12px\"\n },\n children: \"PrivateGPT\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 75,\n columnNumber: 23\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n fontSize: \"12px\"\n },\n children: \"User\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 77,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 73,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: msg.isBot ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: msg.msg == null ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n class: \"blinking-cursor\",\n children: \" â–ˆ\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 86,\n columnNumber: 31\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 85,\n columnNumber: 29\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n direction: \"vertical\",\n gap: 3,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: msg.msg\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 90,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n style: {\n fontSize: \"12px\"\n },\n children: msg.source != null && msg.source != \"\" ? \"Source: \" + msg.source[0][\"name\"] : \"\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 91,\n columnNumber: 31\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 89,\n columnNumber: 29\n }, this)\n }, void 0, false) : msg.msg\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 81,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 80,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 65,\n columnNumber: 15\n }, this)) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"align-items-center ms-sm-5 ps-sm-3\",\n gap: 1,\n style: {\n color: \"black\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-sm-5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"small\", {\n children: \"PrivateGPT by SamurAI\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 114,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 113,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n style: {\n color: \"gray\"\n },\n children: \"A better UI for PrivateGPT\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 116,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 108,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n gap: 2,\n direction: \"horizontal\",\n className: \"loading\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n size: \"sm\",\n animation: \"grow\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 120,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n size: \"sm\",\n animation: \"grow\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 121,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n size: \"sm\",\n animation: \"grow\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 122,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 119,\n columnNumber: 22\n }, this) : \"\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 62,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"px-4 justify-content-center align-items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"d-flex justify-content-center align-items-center mb-sm-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_bootstrap__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n rows: 1,\n className: \"chat-input p-2\",\n as: \"textarea\",\n value: question,\n onChange: (e)=>handleInputChanges(e),\n onKeyDown: (e)=>{\n if (e.code == \"Enter\" && !e.shiftKey) {\n e.preventDefault(); // prevent moving to next line\n askAI(); // call function ask\n }\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 127,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"d-flex flex-column mx-2 justify-content-end align-items-center\",\n style: {\n height: \"100%\",\n cursor: \"pointer\",\n color: \"#4e4e4e\"\n },\n onClick: askAI,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: \"/send-icon.svg\",\n alt: \"Send\",\n width: 20,\n height: 20,\n priority: true\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 146,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 141,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 126,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 125,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\Milan\\\\LocalGPT\\\\privateGPT\\\\client\\\\components\\\\MainContainer.js\",\n lineNumber: 61,\n columnNumber: 7\n }, this)\n }, void 0, false);\n}\n_s(MainContainer, \"tfz1IW/UPH6tRQqIzMhzNt3nIDg=\");\n_c = MainContainer;\nvar _c;\n$RefreshReg$(_c, \"MainContainer\");\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 prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== 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 on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = 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 (prevExports !== 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(prevExports, 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 = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1jbGllbnQpLy4vY29tcG9uZW50cy9NYWluQ29udGFpbmVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUNnRDtBQUNhO0FBQzlCO0FBQ3dCO0FBRXhDLFNBQVNTLGdCQUFnQjs7SUFDdEMsTUFBTSxDQUFDQyxNQUFNQyxRQUFRLEdBQUdWLCtDQUFRQSxDQUFDLEVBQUU7SUFDbkMsTUFBTSxDQUFDVyxVQUFVQyxZQUFZLEdBQUdaLCtDQUFRQSxDQUFDO0lBQ3pDLE1BQU0sQ0FBQ2EsU0FBU0MsV0FBVyxHQUFHZCwrQ0FBUUEsQ0FBQyxLQUFLO0lBQzVDLE1BQU1lLFVBQVVkLDZDQUFNQSxDQUFDLElBQUk7SUFDM0JjLFFBQVFDLE9BQU8sR0FBR1A7SUFFbEIsTUFBTVEscUJBQXFCLENBQUNDLElBQU07UUFDaENOLFlBQVlNLEVBQUVDLE1BQU0sQ0FBQ0MsS0FBSztRQUMxQkYsRUFBRUMsTUFBTSxDQUFDRSxLQUFLLENBQUNDLE1BQU0sR0FBRztRQUN4QkosRUFBRUMsTUFBTSxDQUFDRSxLQUFLLENBQUNDLE1BQU0sR0FBR0osRUFBRUMsTUFBTSxDQUFDSSxZQUFZLEdBQUc7SUFDbEQ7SUFFQSxNQUFNQyxRQUFRLFVBQVk7UUFDeEIsSUFBSWIsYUFBYSxJQUFJO1lBQ25CSix1REFBVyxDQUFDO1FBQ2QsT0FBTztZQUNMTyxXQUFXLElBQUk7WUFDZixJQUFJWSxjQUFjZjtZQUNsQkQsUUFBUSxDQUFDRCxPQUFTO3VCQUFJQTtvQkFBTTt3QkFBRWtCLE9BQU8sS0FBSzt3QkFBRUMsS0FBS2pCO29CQUFTO2lCQUFFO1lBQzVEQyxZQUFZO1lBQ1osSUFBSTtnQkFDRixNQUFNaUIsV0FBVyxNQUFNQyxNQUFNLG9DQUFvQztvQkFDL0RDLFFBQVE7b0JBQ1JDLFNBQVM7d0JBQ1AsZ0JBQWdCO29CQUNsQjtvQkFDQUMsTUFBTUMsS0FBS0MsU0FBUyxDQUFDeEI7Z0JBQ3ZCO2dCQUVBLElBQUksQ0FBQ2tCLFNBQVNPLEVBQUUsRUFBRTtvQkFDdEJQLFNBQVNRLElBQUksR0FBR0MsSUFBSSxDQUFDRCxDQUFBQSxPQUFRO3dCQUFDOUIsdURBQVcsQ0FBQyx3QkFBc0I4QjtvQkFBTTtvQkFDaEV2QixXQUFXLEtBQUs7Z0JBQ2xCLE9BQU87b0JBQ0wsTUFBTXlCLE9BQU8sTUFBTVYsU0FBU1csSUFBSTtvQkFDaEM5QixRQUFROzJCQUNISyxRQUFRQyxPQUFPO3dCQUNsQjs0QkFDRVcsT0FBTyxJQUFJOzRCQUNYQyxLQUFLVyxLQUFLRSxNQUFNOzRCQUNoQkMsUUFBUUgsS0FBS0csTUFBTTt3QkFDckI7cUJBQ0Q7b0JBQ0Q1QixXQUFXLEtBQUs7Z0JBQ2xCLENBQUM7WUFDSCxFQUFFLE9BQU9XLE9BQU87Z0JBQ2RsQix1REFBVyxDQUFDO2dCQUNaTyxXQUFXLEtBQUs7WUFDbEI7UUFDRixDQUFDO0lBQ0g7SUFFQSxxQkFDRTtrQkFDRSw0RUFBQ1gsdURBQUtBOzs4QkFDSiw4REFBQ3dDO29CQUFJQyxXQUFVOzt3QkFDWm5DLEtBQUtvQyxNQUFNLEdBQUcsSUFDYnBDLEtBQUtxQyxHQUFHLENBQUMsQ0FBQ2xCLG9CQUNSLDhEQUFDekIsdURBQUtBO2dDQUFDNEMsV0FBVTtnQ0FBV0MsS0FBSzswQ0FDL0IsNEVBQUNMO29DQUNDQyxXQUNFaEIsSUFBSUQsS0FBSyxHQUNMLHlEQUNBLHVEQUF1RDs7c0RBRzdELDhEQUFDZ0I7c0RBQ0VmLElBQUlELEtBQUssaUJBQ1IsOERBQUNzQjtnREFBSzVCLE9BQU87b0RBQUU2QixVQUFVO2dEQUFPOzBEQUFHOzs7OztxRUFFbkMsOERBQUNEO2dEQUFLNUIsT0FBTztvREFBRTZCLFVBQVU7Z0RBQU87MERBQUc7Ozs7O29EQUNwQzs7Ozs7O3NEQUVILDhEQUFDUDs0Q0FBSUMsV0FBVTtzREFDYiw0RUFBQ0Q7MERBQ0VmLElBQUlELEtBQUssaUJBQ1I7OERBQ0dDLElBQUlBLEdBQUcsSUFBSSxJQUFJLGlCQUNkLDhEQUFDZTtrRUFDQyw0RUFBQ007NERBQUtFLE9BQU07c0VBQWtCOzs7Ozs7Ozs7OzZFQUdoQyw4REFBQ2hELHVEQUFLQTt3REFBQzRDLFdBQVU7d0RBQVdDLEtBQUs7OzBFQUMvQiw4REFBQ0M7MEVBQU1yQixJQUFJQSxHQUFHOzs7Ozs7MEVBQ2QsOERBQUNxQjtnRUFBSzVCLE9BQU87b0VBQUU2QixVQUFVO2dFQUFPOzBFQUM3QnRCLElBQUljLE1BQU0sSUFBSSxJQUFJLElBQUlkLElBQUljLE1BQU0sSUFBSSxLQUNqQyxhQUFhZCxJQUFJYyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FDbEMsRUFBRTs7Ozs7Ozs7Ozs7NERBR1g7b0VBR0hkLElBQUlBLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzREFRbkIsOERBQUN6Qix1REFBS0E7NEJBQ0p5QyxXQUFVOzRCQUNWSSxLQUFLOzRCQUNMM0IsT0FBTztnQ0FBRStCLE9BQU87NEJBQVE7OzhDQUV4Qiw4REFBQ0M7b0NBQUdULFdBQVU7OENBQ1osNEVBQUNVO2tEQUFNOzs7Ozs7Ozs7Ozs4Q0FFVCw4REFBQ0M7b0NBQUdsQyxPQUFPO3dDQUFFK0IsT0FBTztvQ0FBTzs4Q0FBRzs7Ozs7Ozs7Ozs7Z0NBRWpDO3dCQUNBdkMsd0JBQVUsOERBQUNWLHVEQUFLQTs0QkFBQzZDLEtBQUs7NEJBQUdELFdBQVU7NEJBQWFILFdBQVU7OzhDQUN6RCw4REFBQ3hDLHVEQUFPQTtvQ0FBQ29ELE1BQUs7b0NBQUtDLFdBQVU7Ozs7Ozs4Q0FDN0IsOERBQUNyRCx1REFBT0E7b0NBQUNvRCxNQUFLO29DQUFLQyxXQUFVOzs7Ozs7OENBQzdCLDhEQUFDckQsdURBQU9BO29DQUFDb0QsTUFBSztvQ0FBS0MsV0FBVTs7Ozs7Ozs7Ozs7bUNBQ3BCLEVBQUU7Ozs7Ozs7OEJBRWYsOERBQUNkO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDRDt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUMxQyx1REFBV0E7Z0NBQ1Z3RCxNQUFNO2dDQUNOZCxXQUFVO2dDQUNWZSxJQUFHO2dDQUNIdkMsT0FBT1Q7Z0NBQ1BpRCxVQUFVLENBQUMxQyxJQUFNRCxtQkFBbUJDO2dDQUNwQzJDLFdBQVcsQ0FBQzNDLElBQU07b0NBQ2hCLElBQUlBLEVBQUU0QyxJQUFJLElBQUksV0FBVyxDQUFDNUMsRUFBRTZDLFFBQVEsRUFBRTt3Q0FDcEM3QyxFQUFFOEMsY0FBYyxJQUFJLDhCQUE4Qjt3Q0FDbER4QyxTQUFTLG9CQUFvQjtvQ0FDL0IsQ0FBQztnQ0FDSDs7Ozs7OzBDQUdGLDhEQUFDbUI7Z0NBQ0NDLFdBQVU7Z0NBQ1Z2QixPQUFPO29DQUFFQyxRQUFRO29DQUFRMkMsUUFBUTtvQ0FBV2IsT0FBTztnQ0FBVTtnQ0FDN0RjLFNBQVMxQzswQ0FFVCw0RUFBQ25CLG1EQUFLQTtvQ0FDSjhELEtBQUk7b0NBQ0pDLEtBQUk7b0NBQ0pDLE9BQU87b0NBQ1AvQyxRQUFRO29DQUNSZ0QsUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFReEIsQ0FBQztHQXhKdUI5RDtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL01haW5Db250YWluZXIuanM/MTkzMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFN0YWNrLFNwaW5uZXIgfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwXCI7XHJcbmltcG9ydCBJbWFnZSBmcm9tIFwibmV4dC9pbWFnZVwiO1xyXG5pbXBvcnQgeyBUb2FzdENvbnRhaW5lciwgdG9hc3QgfSBmcm9tIFwicmVhY3QtdG9hc3RpZnlcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1haW5Db250YWluZXIoKSB7XHJcbiAgY29uc3QgW2NoYXQsIHNldENoYXRdID0gdXNlU3RhdGUoW10pO1xyXG4gIGNvbnN0IFtxdWVzdGlvbiwgc2V0UXVlc3Rpb25dID0gdXNlU3RhdGUoXCJcIik7XHJcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IGNoYXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgY2hhdFJlZi5jdXJyZW50ID0gY2hhdDtcclxuXHJcbiAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2VzID0gKGUpID0+IHtcclxuICAgIHNldFF1ZXN0aW9uKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgIGUudGFyZ2V0LnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgZS50YXJnZXQuc3R5bGUuaGVpZ2h0ID0gZS50YXJnZXQuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGFza0FJID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgaWYgKHF1ZXN0aW9uID09PSBcIlwiKSB7XHJcbiAgICAgIHRvYXN0LmVycm9yKFwiUGxlYXNlIGVudGVyIHZhbGlkIGlucHV0IGFuZCB0cnkgYWdhaW4uXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgICAgbGV0IGdldFF1ZXN0aW9uID0gcXVlc3Rpb247XHJcbiAgICAgIHNldENoYXQoKGNoYXQpID0+IFsuLi5jaGF0LCB7IGlzQm90OiBmYWxzZSwgbXNnOiBxdWVzdGlvbiB9XSk7XHJcbiAgICAgIHNldFF1ZXN0aW9uKFwiXCIpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJodHRwOi8vbG9jYWxob3N0OjUwMDAvZ2V0X2Fuc3dlclwiLCB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShxdWVzdGlvbiksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcdFxyXG5cdFx0ICByZXNwb25zZS50ZXh0KCkudGhlbih0ZXh0ID0+IHt0b2FzdC5lcnJvcihcIkVycm9yIGdldHRpbmcgZGF0YS5cIit0ZXh0KTt9KVxyXG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICBzZXRDaGF0KFtcclxuICAgICAgICAgICAgLi4uY2hhdFJlZi5jdXJyZW50LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaXNCb3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgbXNnOiBkYXRhLmFuc3dlcixcclxuICAgICAgICAgICAgICBzb3VyY2U6IGRhdGEuc291cmNlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSk7XHJcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdG9hc3QuZXJyb3IoXCJFcnJvciBGZXRjaGluZyBBbnN3ZXIuIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xyXG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDw+XHJcbiAgICAgIDxTdGFjaz5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIiBteC0yIHB4LW1kLTUgcHktc20tNCBjaGF0LXNjcm9sbFwiPlxyXG4gICAgICAgICAge2NoYXQubGVuZ3RoID4gMCA/IChcclxuICAgICAgICAgICAgY2hhdC5tYXAoKG1zZykgPT4gKFxyXG4gICAgICAgICAgICAgIDxTdGFjayBkaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiIGdhcD17M30+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XHJcbiAgICAgICAgICAgICAgICAgICAgbXNnLmlzQm90XHJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiIHAtNCB0ZXh0LXN0YXJ0IHctMTAwIHBvc2l0aW9uLXJlbGF0aXZlIGJvdC1tc2cgbWItM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwiIHAtNCB0ZXh0LXN0YXJ0IHctMTAwIHBvc2l0aW9uLXJlbGF0aXZlIHVzZXItbXNnIG1iLTNcIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge21zZy5pc0JvdCA/IChcclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiBcIjEycHhcIiB9fT5Qcml2YXRlR1BUPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogXCIxMnB4XCIgfX0+VXNlcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7bXNnLmlzQm90ID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttc2cubXNnID09IG51bGwgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJsaW5raW5nLWN1cnNvclwiPiDilog8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrIGRpcmVjdGlvbj1cInZlcnRpY2FsXCIgZ2FwPXszfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e21zZy5tc2d9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogXCIxMnB4XCIgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge21zZy5zb3VyY2UgIT0gbnVsbCAmJiBtc2cuc291cmNlICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJTb3VyY2U6IFwiICsgbXNnLnNvdXJjZVswXVtcIm5hbWVcIl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFjaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5tc2dcclxuICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9TdGFjaz5cclxuICAgICAgICAgICAgKSlcclxuICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgIDxTdGFja1xyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFsaWduLWl0ZW1zLWNlbnRlciBtcy1zbS01IHBzLXNtLTNcIlxyXG4gICAgICAgICAgICAgIGdhcD17MX1cclxuICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogXCJibGFja1wiIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtc20tNVwiPlxyXG4gICAgICAgICAgICAgICAgPHNtYWxsPlByaXZhdGVHUFQgYnkgU2FtdXJBSTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICA8aDMgc3R5bGU9e3sgY29sb3I6IFwiZ3JheVwiIH19PkEgYmV0dGVyIFVJIGZvciBQcml2YXRlR1BUPC9oMz5cclxuICAgICAgICAgICAgPC9TdGFjaz5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICB7bG9hZGluZyA/IDxTdGFjayBnYXA9ezJ9IGRpcmVjdGlvbj1cImhvcml6b250YWxcIiBjbGFzc05hbWU9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxTcGlubmVyIHNpemU9XCJzbVwiIGFuaW1hdGlvbj1cImdyb3dcIiAvPlxyXG4gICAgICAgICAgICA8U3Bpbm5lciBzaXplPVwic21cIiBhbmltYXRpb249XCJncm93XCIgLz5cclxuICAgICAgICAgICAgPFNwaW5uZXIgc2l6ZT1cInNtXCIgYW5pbWF0aW9uPVwiZ3Jvd1wiIC8+XHJcbiAgICAgICAgICA8L1N0YWNrPiA6IFwiXCJ9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJweC00IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtYi1zbS0wXCI+XHJcbiAgICAgICAgICAgIDxGb3JtQ29udHJvbFxyXG4gICAgICAgICAgICAgIHJvd3M9ezF9XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY2hhdC1pbnB1dCBwLTJcIlxyXG4gICAgICAgICAgICAgIGFzPVwidGV4dGFyZWFcIlxyXG4gICAgICAgICAgICAgIHZhbHVlPXtxdWVzdGlvbn1cclxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUlucHV0Q2hhbmdlcyhlKX1cclxuICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09IFwiRW50ZXJcIiAmJiAhZS5zaGlmdEtleSkge1xyXG4gICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgbW92aW5nIHRvIG5leHQgbGluZVxyXG4gICAgICAgICAgICAgICAgICBhc2tBSSgpOyAvLyBjYWxsIGZ1bmN0aW9uIGFza1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZC1mbGV4IGZsZXgtY29sdW1uIG14LTIganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxMDAlXCIsIGN1cnNvcjogXCJwb2ludGVyXCIsIGNvbG9yOiBcIiM0ZTRlNGVcIiB9fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2Fza0FJfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICBzcmM9XCIvc2VuZC1pY29uLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICBhbHQ9XCJTZW5kXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cclxuICAgICAgICAgICAgICAgIGhlaWdodD17MjB9XHJcbiAgICAgICAgICAgICAgICBwcmlvcml0eVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvU3RhY2s+XHJcbiAgICA8Lz5cclxuICApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlUmVmIiwiRm9ybUNvbnRyb2wiLCJTdGFjayIsIlNwaW5uZXIiLCJJbWFnZSIsIlRvYXN0Q29udGFpbmVyIiwidG9hc3QiLCJNYWluQ29udGFpbmVyIiwiY2hhdCIsInNldENoYXQiLCJxdWVzdGlvbiIsInNldFF1ZXN0aW9uIiwibG9hZGluZyIsInNldExvYWRpbmciLCJjaGF0UmVmIiwiY3VycmVudCIsImhhbmRsZUlucHV0Q2hhbmdlcyIsImUiLCJ0YXJnZXQiLCJ2YWx1ZSIsInN0eWxlIiwiaGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiYXNrQUkiLCJlcnJvciIsImdldFF1ZXN0aW9uIiwiaXNCb3QiLCJtc2ciLCJyZXNwb25zZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5Iiwib2siLCJ0ZXh0IiwidGhlbiIsImRhdGEiLCJqc29uIiwiYW5zd2VyIiwic291cmNlIiwiZGl2IiwiY2xhc3NOYW1lIiwibGVuZ3RoIiwibWFwIiwiZGlyZWN0aW9uIiwiZ2FwIiwic3BhbiIsImZvbnRTaXplIiwiY2xhc3MiLCJjb2xvciIsImgxIiwic21hbGwiLCJoMyIsInNpemUiLCJhbmltYXRpb24iLCJyb3dzIiwiYXMiLCJvbkNoYW5nZSIsIm9uS2V5RG93biIsImNvZGUiLCJzaGlmdEtleSIsInByZXZlbnREZWZhdWx0IiwiY3Vyc29yIiwib25DbGljayIsInNyYyIsImFsdCIsIndpZHRoIiwicHJpb3JpdHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-client)/./components/MainContainer.js\n"));
+
+/***/ }),
+
+/***/ "(app-client)/./node_modules/next/dist/client/image.js":
+/*!************************************************!*\
+ !*** ./node_modules/next/dist/client/image.js ***!
+ \************************************************/
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-client)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-client)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-client)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _head = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/head */ \"(app-client)/./node_modules/next/dist/shared/lib/head.js\"));\nconst _imageblursvg = __webpack_require__(/*! ../shared/lib/image-blur-svg */ \"(app-client)/./node_modules/next/dist/shared/lib/image-blur-svg.js\");\nconst _imageconfig = __webpack_require__(/*! ../shared/lib/image-config */ \"(app-client)/./node_modules/next/dist/shared/lib/image-config.js\");\nconst _imageconfigcontext = __webpack_require__(/*! ../shared/lib/image-config-context */ \"(app-client)/./node_modules/next/dist/shared/lib/image-config-context.js\");\nconst _warnonce = __webpack_require__(/*! ../shared/lib/utils/warn-once */ \"(app-client)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _imageloader = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/shared/lib/image-loader */ \"(app-client)/./node_modules/next/dist/shared/lib/image-loader.js\"));\nconst configEnv = {\"deviceSizes\":[640,750,828,1080,1200,1920,2048,3840],\"imageSizes\":[16,32,48,64,96,128,256,384],\"path\":\"/_next/image\",\"loader\":\"default\",\"dangerouslyAllowSVG\":false,\"unoptimized\":false,\"domains\":[],\"remotePatterns\":[]};\nconst allImgs = new Map();\nlet perfObserver;\nif (false) {}\nconst VALID_LOADING_VALUES = [\n \"lazy\",\n \"eager\",\n undefined\n];\nfunction isStaticRequire(src) {\n return src.default !== undefined;\n}\nfunction isStaticImageData(src) {\n return src.src !== undefined;\n}\nfunction isStaticImport(src) {\n return typeof src === \"object\" && (isStaticRequire(src) || isStaticImageData(src));\n}\nfunction getWidths(param, width, sizes) {\n let { deviceSizes , allSizes } = param;\n if (sizes) {\n // Find all the \"vw\" percent sizes used in the sizes prop\n const viewportWidthRe = /(^|\\s)(1?\\d?\\d)vw/g;\n const percentSizes = [];\n for(let match; match = viewportWidthRe.exec(sizes); match){\n percentSizes.push(parseInt(match[2]));\n }\n if (percentSizes.length) {\n const smallestRatio = Math.min(...percentSizes) * 0.01;\n return {\n widths: allSizes.filter((s)=>s >= deviceSizes[0] * smallestRatio),\n kind: \"w\"\n };\n }\n return {\n widths: allSizes,\n kind: \"w\"\n };\n }\n if (typeof width !== \"number\") {\n return {\n widths: deviceSizes,\n kind: \"w\"\n };\n }\n const widths = [\n ...new Set(// > are actually 3x in the green color, but only 1.5x in the red and\n // > blue colors. Showing a 3x resolution image in the app vs a 2x\n // > resolution image will be visually the same, though the 3x image\n // > takes significantly more data. Even true 3x resolution screens are\n // > wasteful as the human eye cannot see that level of detail without\n // > something like a magnifying glass.\n // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\n [\n width,\n width * 2 /*, width * 3*/ \n ].map((w)=>allSizes.find((p)=>p >= w) || allSizes[allSizes.length - 1]))\n ];\n return {\n widths,\n kind: \"x\"\n };\n}\nfunction generateImgAttrs(param) {\n let { config , src , unoptimized , width , quality , sizes , loader } = param;\n if (unoptimized) {\n return {\n src,\n srcSet: undefined,\n sizes: undefined\n };\n }\n const { widths , kind } = getWidths(config, width, sizes);\n const last = widths.length - 1;\n return {\n sizes: !sizes && kind === \"w\" ? \"100vw\" : sizes,\n srcSet: widths.map((w, i)=>loader({\n config,\n src,\n quality,\n width: w\n }) + \" \" + (kind === \"w\" ? w : i + 1) + kind).join(\", \"),\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n src: loader({\n config,\n src,\n quality,\n width: widths[last]\n })\n };\n}\nfunction getInt(x) {\n if (typeof x === \"undefined\") {\n return x;\n }\n if (typeof x === \"number\") {\n return Number.isFinite(x) ? x : NaN;\n }\n if (typeof x === \"string\" && /^[0-9]+$/.test(x)) {\n return parseInt(x, 10);\n }\n return NaN;\n}\n// See https://stackoverflow.com/q/39777833/266535 for why we use this ref\n// handler instead of the img's onLoad attribute.\nfunction handleLoading(img, src, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized) {\n if (!img || img[\"data-loaded-src\"] === src) {\n return;\n }\n img[\"data-loaded-src\"] = src;\n const p = \"decode\" in img ? img.decode() : Promise.resolve();\n p.catch(()=>{}).then(()=>{\n if (!img.parentElement || !img.isConnected) {\n // Exit early in case of race condition:\n // - onload() is called\n // - decode() is called but incomplete\n // - unmount is called\n // - decode() completes\n return;\n }\n if (placeholder === \"blur\") {\n setBlurComplete(true);\n }\n if (onLoadRef == null ? void 0 : onLoadRef.current) {\n // Since we don't have the SyntheticEvent here,\n // we must create one with the same shape.\n // See https://reactjs.org/docs/events.html\n const event = new Event(\"load\");\n Object.defineProperty(event, \"target\", {\n writable: false,\n value: img\n });\n let prevented = false;\n let stopped = false;\n onLoadRef.current({\n ...event,\n nativeEvent: event,\n currentTarget: img,\n target: img,\n isDefaultPrevented: ()=>prevented,\n isPropagationStopped: ()=>stopped,\n persist: ()=>{},\n preventDefault: ()=>{\n prevented = true;\n event.preventDefault();\n },\n stopPropagation: ()=>{\n stopped = true;\n event.stopPropagation();\n }\n });\n }\n if (onLoadingCompleteRef == null ? void 0 : onLoadingCompleteRef.current) {\n onLoadingCompleteRef.current(img);\n }\n if (true) {\n if (img.getAttribute(\"data-nimg\") === \"fill\") {\n if (!unoptimized && (!img.getAttribute(\"sizes\") || img.getAttribute(\"sizes\") === \"100vw\")) {\n let widthViewportRatio = img.getBoundingClientRect().width / window.innerWidth;\n if (widthViewportRatio < 0.6) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" has \"fill\" but is missing \"sizes\" prop. Please add it to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes');\n }\n }\n if (img.parentElement) {\n const { position } = window.getComputedStyle(img.parentElement);\n const valid = [\n \"absolute\",\n \"fixed\",\n \"relative\"\n ];\n if (!valid.includes(position)) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" has \"fill\" and parent element with invalid \"position\". Provided \"' + position + '\" should be one of ' + valid.map(String).join(\",\") + \".\");\n }\n }\n if (img.height === 0) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" has \"fill\" and a height value of 0. This is likely because the parent element of the image has not been styled to have a set height.');\n }\n }\n const heightModified = img.height.toString() !== img.getAttribute(\"height\");\n const widthModified = img.width.toString() !== img.getAttribute(\"width\");\n if (heightModified && !widthModified || !heightModified && widthModified) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" has either width or height modified, but not the other. If you use CSS to change the size of your image, also include the styles \\'width: \"auto\"\\' or \\'height: \"auto\"\\' to maintain the aspect ratio.');\n }\n }\n });\n}\nfunction getDynamicProps(fetchPriority) {\n const [majorStr, minorStr] = _react.version.split(\".\");\n const major = parseInt(majorStr, 10);\n const minor = parseInt(minorStr, 10);\n if (major > 18 || major === 18 && minor >= 3) {\n // In React 18.3.0 or newer, we must use camelCase\n // prop to avoid \"Warning: Invalid DOM property\".\n // See https://github.com/facebook/react/pull/25927\n return {\n fetchPriority\n };\n }\n // In React 18.2.0 or older, we must use lowercase prop\n // to avoid \"Warning: Invalid DOM property\".\n return {\n fetchpriority: fetchPriority\n };\n}\nconst ImageElement = /*#__PURE__*/ (0, _react.forwardRef)((param, forwardedRef)=>{\n let { imgAttributes , heightInt , widthInt , qualityInt , className , imgStyle , blurStyle , isLazy , fetchPriority , fill , placeholder , loading , srcString , config , unoptimized , loader , onLoadRef , onLoadingCompleteRef , setBlurComplete , setShowAltText , onLoad , onError , ...rest } = param;\n loading = isLazy ? \"lazy\" : loading;\n return /*#__PURE__*/ _react.default.createElement(\"img\", {\n ...rest,\n ...getDynamicProps(fetchPriority),\n loading: loading,\n width: widthInt,\n height: heightInt,\n decoding: \"async\",\n \"data-nimg\": fill ? \"fill\" : \"1\",\n className: className,\n style: {\n ...imgStyle,\n ...blurStyle\n },\n ...imgAttributes,\n ref: (0, _react.useCallback)((img)=>{\n if (forwardedRef) {\n if (typeof forwardedRef === \"function\") forwardedRef(img);\n else if (typeof forwardedRef === \"object\") {\n // @ts-ignore - .current is read only it's usually assigned by react internally\n forwardedRef.current = img;\n }\n }\n if (!img) {\n return;\n }\n if (onError) {\n // If the image has an error before react hydrates, then the error is lost.\n // The workaround is to wait until the image is mounted which is after hydration,\n // then we set the src again to trigger the error handler (if there was an error).\n // eslint-disable-next-line no-self-assign\n img.src = img.src;\n }\n if (true) {\n if (!srcString) {\n console.error('Image is missing required \"src\" property:', img);\n }\n if (img.getAttribute(\"alt\") === null) {\n console.error('Image is missing required \"alt\" property. Please add Alternative Text to describe the image for screen readers and search engines.');\n }\n }\n if (img.complete) {\n handleLoading(img, srcString, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized);\n }\n }, [\n srcString,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n onError,\n unoptimized,\n forwardedRef\n ]),\n onLoad: (event)=>{\n const img = event.currentTarget;\n handleLoading(img, srcString, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized);\n },\n onError: (event)=>{\n // if the real image fails to load, this will ensure \"alt\" is visible\n setShowAltText(true);\n if (placeholder === \"blur\") {\n // If the real image fails to load, this will still remove the placeholder.\n setBlurComplete(true);\n }\n if (onError) {\n onError(event);\n }\n }\n });\n});\n_c = ImageElement;\nconst Image = /*#__PURE__*/ (0, _react.forwardRef)((param, forwardedRef)=>{\n let { src , sizes , unoptimized =false , priority =false , loading , className , quality , width , height , fill , style , onLoad , onLoadingComplete , placeholder =\"empty\" , blurDataURL , fetchPriority , layout , objectFit , objectPosition , lazyBoundary , lazyRoot , ...all } = param;\n const configContext = (0, _react.useContext)(_imageconfigcontext.ImageConfigContext);\n const config = (0, _react.useMemo)(()=>{\n const c = configEnv || configContext || _imageconfig.imageConfigDefault;\n const allSizes = [\n ...c.deviceSizes,\n ...c.imageSizes\n ].sort((a, b)=>a - b);\n const deviceSizes = c.deviceSizes.sort((a, b)=>a - b);\n return {\n ...c,\n allSizes,\n deviceSizes\n };\n }, [\n configContext\n ]);\n let rest = all;\n let loader = rest.loader || _imageloader.default;\n // Remove property so it's not spread on element\n delete rest.loader;\n // This special value indicates that the user\n // didn't define a \"loader\" prop or \"loader\" config.\n const isDefaultLoader = \"__next_img_default\" in loader;\n if (isDefaultLoader) {\n if (config.loader === \"custom\") {\n throw new Error('Image with src \"' + src + '\" is missing \"loader\" prop.' + \"\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader\");\n }\n } else {\n // The user defined a \"loader\" prop or config.\n // Since the config object is internal only, we\n // must not pass it to the user-defined \"loader\".\n const customImageLoader = loader;\n loader = (obj)=>{\n const { config: _ , ...opts } = obj;\n return customImageLoader(opts);\n };\n }\n if (layout) {\n if (layout === \"fill\") {\n fill = true;\n }\n const layoutToStyle = {\n intrinsic: {\n maxWidth: \"100%\",\n height: \"auto\"\n },\n responsive: {\n width: \"100%\",\n height: \"auto\"\n }\n };\n const layoutToSizes = {\n responsive: \"100vw\",\n fill: \"100vw\"\n };\n const layoutStyle = layoutToStyle[layout];\n if (layoutStyle) {\n style = {\n ...style,\n ...layoutStyle\n };\n }\n const layoutSizes = layoutToSizes[layout];\n if (layoutSizes && !sizes) {\n sizes = layoutSizes;\n }\n }\n let staticSrc = \"\";\n let widthInt = getInt(width);\n let heightInt = getInt(height);\n let blurWidth;\n let blurHeight;\n if (isStaticImport(src)) {\n const staticImageData = isStaticRequire(src) ? src.default : src;\n if (!staticImageData.src) {\n throw new Error(\"An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received \" + JSON.stringify(staticImageData));\n }\n if (!staticImageData.height || !staticImageData.width) {\n throw new Error(\"An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received \" + JSON.stringify(staticImageData));\n }\n blurWidth = staticImageData.blurWidth;\n blurHeight = staticImageData.blurHeight;\n blurDataURL = blurDataURL || staticImageData.blurDataURL;\n staticSrc = staticImageData.src;\n if (!fill) {\n if (!widthInt && !heightInt) {\n widthInt = staticImageData.width;\n heightInt = staticImageData.height;\n } else if (widthInt && !heightInt) {\n const ratio = widthInt / staticImageData.width;\n heightInt = Math.round(staticImageData.height * ratio);\n } else if (!widthInt && heightInt) {\n const ratio = heightInt / staticImageData.height;\n widthInt = Math.round(staticImageData.width * ratio);\n }\n }\n }\n src = typeof src === \"string\" ? src : staticSrc;\n let isLazy = !priority && (loading === \"lazy\" || typeof loading === \"undefined\");\n if (!src || src.startsWith(\"data:\") || src.startsWith(\"blob:\")) {\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n unoptimized = true;\n isLazy = false;\n }\n if (config.unoptimized) {\n unoptimized = true;\n }\n if (isDefaultLoader && src.endsWith(\".svg\") && !config.dangerouslyAllowSVG) {\n // Special case to make svg serve as-is to avoid proxying\n // through the built-in Image Optimization API.\n unoptimized = true;\n }\n if (priority) {\n fetchPriority = \"high\";\n }\n const [blurComplete, setBlurComplete] = (0, _react.useState)(false);\n const [showAltText, setShowAltText] = (0, _react.useState)(false);\n const qualityInt = getInt(quality);\n if (true) {\n if (config.output === \"export\" && isDefaultLoader && !unoptimized) {\n throw new Error(\"Image Optimization using the default loader is not compatible with `{ output: 'export' }`.\\n Possible solutions:\\n - Remove `{ output: 'export' }` and run \\\"next start\\\" to run server mode including the Image Optimization API.\\n - Configure `{ images: { unoptimized: true } }` in `next.config.js` to disable the Image Optimization API.\\n Read more: https://nextjs.org/docs/messages/export-image-api\");\n }\n if (!src) {\n // React doesn't show the stack trace and there's\n // no `src` to help identify which image, so we\n // instead console.error(ref) during mount.\n unoptimized = true;\n } else {\n if (fill) {\n if (width) {\n throw new Error('Image with src \"' + src + '\" has both \"width\" and \"fill\" properties. Only one should be used.');\n }\n if (height) {\n throw new Error('Image with src \"' + src + '\" has both \"height\" and \"fill\" properties. Only one should be used.');\n }\n if ((style == null ? void 0 : style.position) && style.position !== \"absolute\") {\n throw new Error('Image with src \"' + src + '\" has both \"fill\" and \"style.position\" properties. Images with \"fill\" always use position absolute - it cannot be modified.');\n }\n if ((style == null ? void 0 : style.width) && style.width !== \"100%\") {\n throw new Error('Image with src \"' + src + '\" has both \"fill\" and \"style.width\" properties. Images with \"fill\" always use width 100% - it cannot be modified.');\n }\n if ((style == null ? void 0 : style.height) && style.height !== \"100%\") {\n throw new Error('Image with src \"' + src + '\" has both \"fill\" and \"style.height\" properties. Images with \"fill\" always use height 100% - it cannot be modified.');\n }\n } else {\n if (typeof widthInt === \"undefined\") {\n throw new Error('Image with src \"' + src + '\" is missing required \"width\" property.');\n } else if (isNaN(widthInt)) {\n throw new Error('Image with src \"' + src + '\" has invalid \"width\" property. Expected a numeric value in pixels but received \"' + width + '\".');\n }\n if (typeof heightInt === \"undefined\") {\n throw new Error('Image with src \"' + src + '\" is missing required \"height\" property.');\n } else if (isNaN(heightInt)) {\n throw new Error('Image with src \"' + src + '\" has invalid \"height\" property. Expected a numeric value in pixels but received \"' + height + '\".');\n }\n }\n }\n if (!VALID_LOADING_VALUES.includes(loading)) {\n throw new Error('Image with src \"' + src + '\" has invalid \"loading\" property. Provided \"' + loading + '\" should be one of ' + VALID_LOADING_VALUES.map(String).join(\",\") + \".\");\n }\n if (priority && loading === \"lazy\") {\n throw new Error('Image with src \"' + src + '\" has both \"priority\" and \"loading=\\'lazy\\'\" properties. Only one should be used.');\n }\n if (placeholder === \"blur\") {\n if (widthInt && heightInt && widthInt * heightInt < 1600) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" is smaller than 40x40. Consider removing the \"placeholder=\\'blur\\'\" property to improve performance.');\n }\n if (!blurDataURL) {\n const VALID_BLUR_EXT = [\n \"jpeg\",\n \"png\",\n \"webp\",\n \"avif\"\n ] // should match next-image-loader\n ;\n throw new Error('Image with src \"' + src + '\" has \"placeholder=\\'blur\\'\" property but is missing the \"blurDataURL\" property.\\n Possible solutions:\\n - Add a \"blurDataURL\" property, the contents should be a small Data URL to represent the image\\n - Change the \"src\" property to a static import with one of the supported file types: ' + VALID_BLUR_EXT.join(\",\") + '\\n - Remove the \"placeholder\" property, effectively no blur effect\\n Read more: https://nextjs.org/docs/messages/placeholder-blur-data-url');\n }\n }\n if (\"ref\" in rest) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" is using unsupported \"ref\" property. Consider using the \"onLoadingComplete\" property instead.');\n }\n if (!unoptimized && loader !== _imageloader.default) {\n const urlStr = loader({\n config,\n src,\n width: widthInt || 400,\n quality: qualityInt || 75\n });\n let url;\n try {\n url = new URL(urlStr);\n } catch (err) {}\n if (urlStr === src || url && url.pathname === src && !url.search) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" has a \"loader\" property that does not implement width. Please implement it or use the \"unoptimized\" property instead.' + \"\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader-width\");\n }\n }\n for (const [legacyKey, legacyValue] of Object.entries({\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot\n })){\n if (legacyValue) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" has legacy prop \"' + legacyKey + '\". Did you forget to run the codemod?' + \"\\nRead more: https://nextjs.org/docs/messages/next-image-upgrade-to-13\");\n }\n }\n if ( true && !perfObserver && window.PerformanceObserver) {\n perfObserver = new PerformanceObserver((entryList)=>{\n for (const entry of entryList.getEntries()){\n var _entry_element;\n // @ts-ignore - missing \"LargestContentfulPaint\" class with \"element\" prop\n const imgSrc = (entry == null ? void 0 : (_entry_element = entry.element) == null ? void 0 : _entry_element.src) || \"\";\n const lcpImage = allImgs.get(imgSrc);\n if (lcpImage && !lcpImage.priority && lcpImage.placeholder !== \"blur\" && !lcpImage.src.startsWith(\"data:\") && !lcpImage.src.startsWith(\"blob:\")) {\n // https://web.dev/lcp/#measure-lcp-in-javascript\n (0, _warnonce.warnOnce)('Image with src \"' + lcpImage.src + '\" was detected as the Largest Contentful Paint (LCP). Please add the \"priority\" property if this image is above the fold.' + \"\\nRead more: https://nextjs.org/docs/api-reference/next/image#priority\");\n }\n }\n });\n try {\n perfObserver.observe({\n type: \"largest-contentful-paint\",\n buffered: true\n });\n } catch (err) {\n // Log error but don't crash the app\n console.error(err);\n }\n }\n }\n const imgStyle = Object.assign(fill ? {\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n objectFit,\n objectPosition\n } : {}, showAltText ? {} : {\n color: \"transparent\"\n }, style);\n const blurStyle = placeholder === \"blur\" && blurDataURL && !blurComplete ? {\n backgroundSize: imgStyle.objectFit || \"cover\",\n backgroundPosition: imgStyle.objectPosition || \"50% 50%\",\n backgroundRepeat: \"no-repeat\",\n backgroundImage: 'url(\"data:image/svg+xml;charset=utf-8,' + (0, _imageblursvg.getImageBlurSvg)({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL,\n objectFit: imgStyle.objectFit\n }) + '\")'\n } : {};\n if (true) {\n if (blurStyle.backgroundImage && (blurDataURL == null ? void 0 : blurDataURL.startsWith(\"/\"))) {\n // During `next dev`, we don't want to generate blur placeholders with webpack\n // because it can delay starting the dev server. Instead, `next-image-loader.js`\n // will inline a special url to lazily generate the blur placeholder at request time.\n blurStyle.backgroundImage = 'url(\"' + blurDataURL + '\")';\n }\n }\n const imgAttributes = generateImgAttrs({\n config,\n src,\n unoptimized,\n width: widthInt,\n quality: qualityInt,\n sizes,\n loader\n });\n let srcString = src;\n if (true) {\n if (true) {\n let fullUrl;\n try {\n fullUrl = new URL(imgAttributes.src);\n } catch (e) {\n fullUrl = new URL(imgAttributes.src, window.location.href);\n }\n allImgs.set(fullUrl.href, {\n src,\n priority,\n placeholder\n });\n }\n }\n const onLoadRef = (0, _react.useRef)(onLoad);\n (0, _react.useEffect)(()=>{\n onLoadRef.current = onLoad;\n }, [\n onLoad\n ]);\n const onLoadingCompleteRef = (0, _react.useRef)(onLoadingComplete);\n (0, _react.useEffect)(()=>{\n onLoadingCompleteRef.current = onLoadingComplete;\n }, [\n onLoadingComplete\n ]);\n const imgElementArgs = {\n isLazy,\n imgAttributes,\n heightInt,\n widthInt,\n qualityInt,\n className,\n imgStyle,\n blurStyle,\n loading,\n config,\n fetchPriority,\n fill,\n unoptimized,\n placeholder,\n loader,\n srcString,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n setShowAltText,\n ...rest\n };\n return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(ImageElement, {\n ...imgElementArgs,\n ref: forwardedRef\n }), priority ? // for browsers that do not support `imagesrcset`, and in those cases\n // it would likely cause the incorrect image to be preloaded.\n //\n // https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset\n /*#__PURE__*/ _react.default.createElement(_head.default, null, /*#__PURE__*/ _react.default.createElement(\"link\", {\n key: \"__nimg-\" + imgAttributes.src + imgAttributes.srcSet + imgAttributes.sizes,\n rel: \"preload\",\n as: \"image\",\n href: imgAttributes.srcSet ? undefined : imgAttributes.src,\n imageSrcSet: imgAttributes.srcSet,\n imageSizes: imgAttributes.sizes,\n crossOrigin: rest.crossOrigin,\n referrerPolicy: rest.referrerPolicy,\n ...getDynamicProps(fetchPriority)\n })) : null);\n});\nconst _default = Image;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=image.js.map\nvar _c;\n$RefreshReg$(_c, \"ImageElement\");\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 prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== 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 on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = 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 (prevExports !== 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(prevExports, 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 = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1jbGllbnQpLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvaW1hZ2UuanMuanMiLCJtYXBwaW5ncyI6InFEQUNhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTyxJQUFJO0FBQ2YsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWSxJQUFJO0lBQ2hCQyxLQUFLLFdBQVc7UUFDWixPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyx5SEFBeUM7QUFDbEYsTUFBTUMsNEJBQTRCRCxtQkFBT0EsQ0FBQywySEFBMEM7QUFDcEYsTUFBTUUsU0FBUyxXQUFXLEdBQUdELDBCQUEwQkUsQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyw0RUFBTztBQUN4RSxNQUFNSSxRQUFRLFdBQVcsR0FBR0wseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLG9GQUFvQjtBQUNuRixNQUFNSyxnQkFBZ0JMLG1CQUFPQSxDQUFDLHdHQUE4QjtBQUM1RCxNQUFNTSxlQUFlTixtQkFBT0EsQ0FBQyxvR0FBNEI7QUFDekQsTUFBTU8sc0JBQXNCUCxtQkFBT0EsQ0FBQyxvSEFBb0M7QUFDeEUsTUFBTVEsWUFBWVIsbUJBQU9BLENBQUMsMEdBQStCO0FBQ3pELE1BQU1TLGVBQWUsV0FBVyxHQUFHVix5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsMkdBQW1DO0FBRXpHLE1BQU1VLFlBQVlDLDBOQUE2QjtBQUMvQyxNQUFNRyxVQUFVLElBQUlDO0FBQ3BCLElBQUlDO0FBQ0osSUFBSSxLQUE2QixFQUFFLEVBRWxDO0FBQ0QsTUFBTUcsdUJBQXVCO0lBQ3pCO0lBQ0E7SUFDQUM7Q0FDSDtBQUNELFNBQVNDLGdCQUFnQkMsR0FBRyxFQUFFO0lBQzFCLE9BQU9BLElBQUlDLE9BQU8sS0FBS0g7QUFDM0I7QUFDQSxTQUFTSSxrQkFBa0JGLEdBQUcsRUFBRTtJQUM1QixPQUFPQSxJQUFJQSxHQUFHLEtBQUtGO0FBQ3ZC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O1FBQ2pDdUcsWUFBWXZDLGNBQWMzRixLQUFLO1FBQy9CK00sYUFBYXRHLEtBQUtzRyxXQUFXO1FBQzdCQyxnQkFBZ0J2RyxLQUFLdUcsY0FBYztRQUNuQyxHQUFHakksZ0JBQWdCQyxjQUFjO0lBQ3JDLE1BQU0sSUFBSTtBQUNkO0FBQ0EsTUFBTS9HLFdBQVdpSjtBQUVqQixJQUFJLENBQUMsT0FBT3JKLFFBQVE2QixPQUFPLEtBQUssY0FBZSxPQUFPN0IsUUFBUTZCLE9BQU8sS0FBSyxZQUFZN0IsUUFBUTZCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzdCLFFBQVE2QixPQUFPLENBQUN1TixVQUFVLEtBQUssYUFBYTtJQUNyS3RQLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTZCLE9BQU8sRUFBRSxjQUFjO1FBQUU1QixPQUFPLElBQUk7SUFBQztJQUNuRUgsT0FBTzROLE1BQU0sQ0FBQzFOLFFBQVE2QixPQUFPLEVBQUU3QjtJQUMvQnFQLE9BQU9yUCxPQUFPLEdBQUdBLFFBQVE2QixPQUFPO0FBQ2xDLENBQUMsQ0FFRCxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvaW1hZ2UuanM/ODJmNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9oZWFkID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9oZWFkXCIpKTtcbmNvbnN0IF9pbWFnZWJsdXJzdmcgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9pbWFnZS1ibHVyLXN2Z1wiKTtcbmNvbnN0IF9pbWFnZWNvbmZpZyA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZ1wiKTtcbmNvbnN0IF9pbWFnZWNvbmZpZ2NvbnRleHQgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9pbWFnZS1jb25maWctY29udGV4dFwiKTtcbmNvbnN0IF93YXJub25jZSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3V0aWxzL3dhcm4tb25jZVwiKTtcbmNvbnN0IF9pbWFnZWxvYWRlciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIm5leHQvZGlzdC9zaGFyZWQvbGliL2ltYWdlLWxvYWRlclwiKSk7XG5cbmNvbnN0IGNvbmZpZ0VudiA9IHByb2Nlc3MuZW52Ll9fTkVYVF9JTUFHRV9PUFRTO1xuY29uc3QgYWxsSW1ncyA9IG5ldyBNYXAoKTtcbmxldCBwZXJmT2JzZXJ2ZXI7XG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGdsb2JhbFRoaXMuX19ORVhUX0lNQUdFX0lNUE9SVEVEID0gdHJ1ZTtcbn1cbmNvbnN0IFZBTElEX0xPQURJTkdfVkFMVUVTID0gW1xuICAgIFwibGF6eVwiLFxuICAgIFwiZWFnZXJcIixcbiAgICB1bmRlZmluZWRcbl07XG5mdW5jdGlvbiBpc1N0YXRpY1JlcXVpcmUoc3JjKSB7XG4gICAgcmV0dXJuIHNyYy5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBpc1N0YXRpY0ltYWdlRGF0YShzcmMpIHtcbiAgICByZXR1cm4gc3JjLnNyYyAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaXNTdGF0aWNJbXBvcnQoc3JjKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzcmMgPT09IFwib2JqZWN0XCIgJiYgKGlzU3RhdGljUmVxdWlyZShzcmMpIHx8IGlzU3RhdGljSW1hZ2VEYXRhKHNyYykpO1xufVxuZnVuY3Rpb24gZ2V0V2lkdGhzKHBhcmFtLCB3aWR0aCwgc2l6ZXMpIHtcbiAgICBsZXQgeyBkZXZpY2VTaXplcyAsIGFsbFNpemVzICB9ID0gcGFyYW07XG4gICAgaWYgKHNpemVzKSB7XG4gICAgICAgIC8vIEZpbmQgYWxsIHRoZSBcInZ3XCIgcGVyY2VudCBzaXplcyB1c2VkIGluIHRoZSBzaXplcyBwcm9wXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGhSZSA9IC8oXnxcXHMpKDE/XFxkP1xcZCl2dy9nO1xuICAgICAgICBjb25zdCBwZXJjZW50U2l6ZXMgPSBbXTtcbiAgICAgICAgZm9yKGxldCBtYXRjaDsgbWF0Y2ggPSB2aWV3cG9ydFdpZHRoUmUuZXhlYyhzaXplcyk7IG1hdGNoKXtcbiAgICAgICAgICAgIHBlcmNlbnRTaXplcy5wdXNoKHBhcnNlSW50KG1hdGNoWzJdKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcmNlbnRTaXplcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNtYWxsZXN0UmF0aW8gPSBNYXRoLm1pbiguLi5wZXJjZW50U2l6ZXMpICogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGhzOiBhbGxTaXplcy5maWx0ZXIoKHMpPT5zID49IGRldmljZVNpemVzWzBdICogc21hbGxlc3RSYXRpbyksXG4gICAgICAgICAgICAgICAga2luZDogXCJ3XCJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoczogYWxsU2l6ZXMsXG4gICAgICAgICAgICBraW5kOiBcIndcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aHM6IGRldmljZVNpemVzLFxuICAgICAgICAgICAga2luZDogXCJ3XCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgd2lkdGhzID0gW1xuICAgICAgICAuLi5uZXcgU2V0KC8vID4gVGhpcyBtZWFucyB0aGF0IG1vc3QgT0xFRCBzY3JlZW5zIHRoYXQgc2F5IHRoZXkgYXJlIDN4IHJlc29sdXRpb24sXG4gICAgICAgIC8vID4gYXJlIGFjdHVhbGx5IDN4IGluIHRoZSBncmVlbiBjb2xvciwgYnV0IG9ubHkgMS41eCBpbiB0aGUgcmVkIGFuZFxuICAgICAgICAvLyA+IGJsdWUgY29sb3JzLiBTaG93aW5nIGEgM3ggcmVzb2x1dGlvbiBpbWFnZSBpbiB0aGUgYXBwIHZzIGEgMnhcbiAgICAgICAgLy8gPiByZXNvbHV0aW9uIGltYWdlIHdpbGwgYmUgdmlzdWFsbHkgdGhlIHNhbWUsIHRob3VnaCB0aGUgM3ggaW1hZ2VcbiAgICAgICAgLy8gPiB0YWtlcyBzaWduaWZpY2FudGx5IG1vcmUgZGF0YS4gRXZlbiB0cnVlIDN4IHJlc29sdXRpb24gc2NyZWVucyBhcmVcbiAgICAgICAgLy8gPiB3YXN0ZWZ1bCBhcyB0aGUgaHVtYW4gZXllIGNhbm5vdCBzZWUgdGhhdCBsZXZlbCBvZiBkZXRhaWwgd2l0aG91dFxuICAgICAgICAvLyA+IHNvbWV0aGluZyBsaWtlIGEgbWFnbmlmeWluZyBnbGFzcy5cbiAgICAgICAgLy8gaHR0cHM6Ly9ibG9nLnR3aXR0ZXIuY29tL2VuZ2luZWVyaW5nL2VuX3VzL3RvcGljcy9pbmZyYXN0cnVjdHVyZS8yMDE5L2NhcHBpbmctaW1hZ2UtZmlkZWxpdHktb24tdWx0cmEtaGlnaC1yZXNvbHV0aW9uLWRldmljZXMuaHRtbFxuICAgICAgICBbXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIHdpZHRoICogMiAvKiwgd2lkdGggKiAzKi8gXG4gICAgICAgIF0ubWFwKCh3KT0+YWxsU2l6ZXMuZmluZCgocCk9PnAgPj0gdykgfHwgYWxsU2l6ZXNbYWxsU2l6ZXMubGVuZ3RoIC0gMV0pKVxuICAgIF07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGhzLFxuICAgICAgICBraW5kOiBcInhcIlxuICAgIH07XG59XG5mdW5jdGlvbiBnZW5lcmF0ZUltZ0F0dHJzKHBhcmFtKSB7XG4gICAgbGV0IHsgY29uZmlnICwgc3JjICwgdW5vcHRpbWl6ZWQgLCB3aWR0aCAsIHF1YWxpdHkgLCBzaXplcyAsIGxvYWRlciAgfSA9IHBhcmFtO1xuICAgIGlmICh1bm9wdGltaXplZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICAgc3JjU2V0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzaXplczogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHsgd2lkdGhzICwga2luZCAgfSA9IGdldFdpZHRocyhjb25maWcsIHdpZHRoLCBzaXplcyk7XG4gICAgY29uc3QgbGFzdCA9IHdpZHRocy5sZW5ndGggLSAxO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNpemVzOiAhc2l6ZXMgJiYga2luZCA9PT0gXCJ3XCIgPyBcIjEwMHZ3XCIgOiBzaXplcyxcbiAgICAgICAgc3JjU2V0OiB3aWR0aHMubWFwKCh3LCBpKT0+bG9hZGVyKHtcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdcbiAgICAgICAgICAgIH0pICsgXCIgXCIgKyAoa2luZCA9PT0gXCJ3XCIgPyB3IDogaSArIDEpICsga2luZCkuam9pbihcIiwgXCIpLFxuICAgICAgICAvLyBJdCdzIGludGVuZGVkIHRvIGtlZXAgYHNyY2AgdGhlIGxhc3QgYXR0cmlidXRlIGJlY2F1c2UgUmVhY3QgdXBkYXRlc1xuICAgICAgICAvLyBhdHRyaWJ1dGVzIGluIG9yZGVyLiBJZiB3ZSBrZWVwIGBzcmNgIHRoZSBmaXJzdCBvbmUsIFNhZmFyaSB3aWxsXG4gICAgICAgIC8vIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIGZldGNoIGBzcmNgLCBiZWZvcmUgYHNpemVzYCBhbmQgYHNyY1NldGAgYXJlIGV2ZW5cbiAgICAgICAgLy8gdXBkYXRlZCBieSBSZWFjdC4gVGhhdCBjYXVzZXMgbXVsdGlwbGUgdW5uZWNlc3NhcnkgcmVxdWVzdHMgaWYgYHNyY1NldGBcbiAgICAgICAgLy8gYW5kIGBzaXplc2AgYXJlIGRlZmluZWQuXG4gICAgICAgIC8vIFRoaXMgYnVnIGNhbm5vdCBiZSByZXByb2R1Y2VkIGluIENocm9tZSBvciBGaXJlZm94LlxuICAgICAgICBzcmM6IGxvYWRlcih7XG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBzcmMsXG4gICAgICAgICAgICBxdWFsaXR5LFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoc1tsYXN0XVxuICAgICAgICB9KVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRJbnQoeCkge1xuICAgIGlmICh0eXBlb2YgeCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoeCkgPyB4IDogTmFOO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIgJiYgL15bMC05XSskLy50ZXN0KHgpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludCh4LCAxMCk7XG4gICAgfVxuICAgIHJldHVybiBOYU47XG59XG4vLyBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzM5Nzc3ODMzLzI2NjUzNSBmb3Igd2h5IHdlIHVzZSB0aGlzIHJlZlxuLy8gaGFuZGxlciBpbnN0ZWFkIG9mIHRoZSBpbWcncyBvbkxvYWQgYXR0cmlidXRlLlxuZnVuY3Rpb24gaGFuZGxlTG9hZGluZyhpbWcsIHNyYywgcGxhY2Vob2xkZXIsIG9uTG9hZFJlZiwgb25Mb2FkaW5nQ29tcGxldGVSZWYsIHNldEJsdXJDb21wbGV0ZSwgdW5vcHRpbWl6ZWQpIHtcbiAgICBpZiAoIWltZyB8fCBpbWdbXCJkYXRhLWxvYWRlZC1zcmNcIl0gPT09IHNyYykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGltZ1tcImRhdGEtbG9hZGVkLXNyY1wiXSA9IHNyYztcbiAgICBjb25zdCBwID0gXCJkZWNvZGVcIiBpbiBpbWcgPyBpbWcuZGVjb2RlKCkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBwLmNhdGNoKCgpPT57fSkudGhlbigoKT0+e1xuICAgICAgICBpZiAoIWltZy5wYXJlbnRFbGVtZW50IHx8ICFpbWcuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIC8vIEV4aXQgZWFybHkgaW4gY2FzZSBvZiByYWNlIGNvbmRpdGlvbjpcbiAgICAgICAgICAgIC8vIC0gb25sb2FkKCkgaXMgY2FsbGVkXG4gICAgICAgICAgICAvLyAtIGRlY29kZSgpIGlzIGNhbGxlZCBidXQgaW5jb21wbGV0ZVxuICAgICAgICAgICAgLy8gLSB1bm1vdW50IGlzIGNhbGxlZFxuICAgICAgICAgICAgLy8gLSBkZWNvZGUoKSBjb21wbGV0ZXNcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2Vob2xkZXIgPT09IFwiYmx1clwiKSB7XG4gICAgICAgICAgICBzZXRCbHVyQ29tcGxldGUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uTG9hZFJlZiA9PSBudWxsID8gdm9pZCAwIDogb25Mb2FkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgdGhlIFN5bnRoZXRpY0V2ZW50IGhlcmUsXG4gICAgICAgICAgICAvLyB3ZSBtdXN0IGNyZWF0ZSBvbmUgd2l0aCB0aGUgc2FtZSBzaGFwZS5cbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXZlbnRzLmh0bWxcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KFwibG9hZFwiKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgXCJ0YXJnZXRcIiwge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaW1nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBwcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgICAgICBvbkxvYWRSZWYuY3VycmVudCh7XG4gICAgICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGltZyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGltZyxcbiAgICAgICAgICAgICAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6ICgpPT5wcmV2ZW50ZWQsXG4gICAgICAgICAgICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6ICgpPT5zdG9wcGVkLFxuICAgICAgICAgICAgICAgIHBlcnNpc3Q6ICgpPT57fSxcbiAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbjogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbkxvYWRpbmdDb21wbGV0ZVJlZiA9PSBudWxsID8gdm9pZCAwIDogb25Mb2FkaW5nQ29tcGxldGVSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgb25Mb2FkaW5nQ29tcGxldGVSZWYuY3VycmVudChpbWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmIChpbWcuZ2V0QXR0cmlidXRlKFwiZGF0YS1uaW1nXCIpID09PSBcImZpbGxcIikge1xuICAgICAgICAgICAgICAgIGlmICghdW5vcHRpbWl6ZWQgJiYgKCFpbWcuZ2V0QXR0cmlidXRlKFwic2l6ZXNcIikgfHwgaW1nLmdldEF0dHJpYnV0ZShcInNpemVzXCIpID09PSBcIjEwMHZ3XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB3aWR0aFZpZXdwb3J0UmF0aW8gPSBpbWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoVmlld3BvcnRSYXRpbyA8IDAuNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkoJ0ltYWdlIHdpdGggc3JjIFwiJyArIHNyYyArICdcIiBoYXMgXCJmaWxsXCIgYnV0IGlzIG1pc3NpbmcgXCJzaXplc1wiIHByb3AuIFBsZWFzZSBhZGQgaXQgdG8gaW1wcm92ZSBwYWdlIHBlcmZvcm1hbmNlLiBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNzaXplcycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbWcucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHBvc2l0aW9uICB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW1nLnBhcmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZml4ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVsYXRpdmVcIlxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkLmluY2x1ZGVzKHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkoJ0ltYWdlIHdpdGggc3JjIFwiJyArIHNyYyArICdcIiBoYXMgXCJmaWxsXCIgYW5kIHBhcmVudCBlbGVtZW50IHdpdGggaW52YWxpZCBcInBvc2l0aW9uXCIuIFByb3ZpZGVkIFwiJyArIHBvc2l0aW9uICsgJ1wiIHNob3VsZCBiZSBvbmUgb2YgJyArIHZhbGlkLm1hcChTdHJpbmcpLmpvaW4oXCIsXCIpICsgXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbWcuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfd2Fybm9uY2Uud2Fybk9uY2UpKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaGFzIFwiZmlsbFwiIGFuZCBhIGhlaWdodCB2YWx1ZSBvZiAwLiBUaGlzIGlzIGxpa2VseSBiZWNhdXNlIHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgaW1hZ2UgaGFzIG5vdCBiZWVuIHN0eWxlZCB0byBoYXZlIGEgc2V0IGhlaWdodC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoZWlnaHRNb2RpZmllZCA9IGltZy5oZWlnaHQudG9TdHJpbmcoKSAhPT0gaW1nLmdldEF0dHJpYnV0ZShcImhlaWdodFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoTW9kaWZpZWQgPSBpbWcud2lkdGgudG9TdHJpbmcoKSAhPT0gaW1nLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgICAgICAgICAgaWYgKGhlaWdodE1vZGlmaWVkICYmICF3aWR0aE1vZGlmaWVkIHx8ICFoZWlnaHRNb2RpZmllZCAmJiB3aWR0aE1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkoJ0ltYWdlIHdpdGggc3JjIFwiJyArIHNyYyArICdcIiBoYXMgZWl0aGVyIHdpZHRoIG9yIGhlaWdodCBtb2RpZmllZCwgYnV0IG5vdCB0aGUgb3RoZXIuIElmIHlvdSB1c2UgQ1NTIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB5b3VyIGltYWdlLCBhbHNvIGluY2x1ZGUgdGhlIHN0eWxlcyBcXCd3aWR0aDogXCJhdXRvXCJcXCcgb3IgXFwnaGVpZ2h0OiBcImF1dG9cIlxcJyB0byBtYWludGFpbiB0aGUgYXNwZWN0IHJhdGlvLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXREeW5hbWljUHJvcHMoZmV0Y2hQcmlvcml0eSkge1xuICAgIGNvbnN0IFttYWpvclN0ciwgbWlub3JTdHJdID0gX3JlYWN0LnZlcnNpb24uc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IG1ham9yID0gcGFyc2VJbnQobWFqb3JTdHIsIDEwKTtcbiAgICBjb25zdCBtaW5vciA9IHBhcnNlSW50KG1pbm9yU3RyLCAxMCk7XG4gICAgaWYgKG1ham9yID4gMTggfHwgbWFqb3IgPT09IDE4ICYmIG1pbm9yID49IDMpIHtcbiAgICAgICAgLy8gSW4gUmVhY3QgMTguMy4wIG9yIG5ld2VyLCB3ZSBtdXN0IHVzZSBjYW1lbENhc2VcbiAgICAgICAgLy8gcHJvcCB0byBhdm9pZCBcIldhcm5pbmc6IEludmFsaWQgRE9NIHByb3BlcnR5XCIuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yNTkyN1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmV0Y2hQcmlvcml0eVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBJbiBSZWFjdCAxOC4yLjAgb3Igb2xkZXIsIHdlIG11c3QgdXNlIGxvd2VyY2FzZSBwcm9wXG4gICAgLy8gdG8gYXZvaWQgXCJXYXJuaW5nOiBJbnZhbGlkIERPTSBwcm9wZXJ0eVwiLlxuICAgIHJldHVybiB7XG4gICAgICAgIGZldGNocHJpb3JpdHk6IGZldGNoUHJpb3JpdHlcbiAgICB9O1xufVxuY29uc3QgSW1hZ2VFbGVtZW50ID0gLyojX19QVVJFX18qLyAoMCwgX3JlYWN0LmZvcndhcmRSZWYpKChwYXJhbSwgZm9yd2FyZGVkUmVmKT0+e1xuICAgIGxldCB7IGltZ0F0dHJpYnV0ZXMgLCBoZWlnaHRJbnQgLCB3aWR0aEludCAsIHF1YWxpdHlJbnQgLCBjbGFzc05hbWUgLCBpbWdTdHlsZSAsIGJsdXJTdHlsZSAsIGlzTGF6eSAsIGZldGNoUHJpb3JpdHkgLCBmaWxsICwgcGxhY2Vob2xkZXIgLCBsb2FkaW5nICwgc3JjU3RyaW5nICwgY29uZmlnICwgdW5vcHRpbWl6ZWQgLCBsb2FkZXIgLCBvbkxvYWRSZWYgLCBvbkxvYWRpbmdDb21wbGV0ZVJlZiAsIHNldEJsdXJDb21wbGV0ZSAsIHNldFNob3dBbHRUZXh0ICwgb25Mb2FkICwgb25FcnJvciAsIC4uLnJlc3QgfSA9IHBhcmFtO1xuICAgIGxvYWRpbmcgPSBpc0xhenkgPyBcImxhenlcIiA6IGxvYWRpbmc7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIC4uLmdldER5bmFtaWNQcm9wcyhmZXRjaFByaW9yaXR5KSxcbiAgICAgICAgbG9hZGluZzogbG9hZGluZyxcbiAgICAgICAgd2lkdGg6IHdpZHRoSW50LFxuICAgICAgICBoZWlnaHQ6IGhlaWdodEludCxcbiAgICAgICAgZGVjb2Rpbmc6IFwiYXN5bmNcIixcbiAgICAgICAgXCJkYXRhLW5pbWdcIjogZmlsbCA/IFwiZmlsbFwiIDogXCIxXCIsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgLi4uaW1nU3R5bGUsXG4gICAgICAgICAgICAuLi5ibHVyU3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAgLi4uaW1nQXR0cmlidXRlcyxcbiAgICAgICAgcmVmOiAoMCwgX3JlYWN0LnVzZUNhbGxiYWNrKSgoaW1nKT0+e1xuICAgICAgICAgICAgaWYgKGZvcndhcmRlZFJlZikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm9yd2FyZGVkUmVmID09PSBcImZ1bmN0aW9uXCIpIGZvcndhcmRlZFJlZihpbWcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmb3J3YXJkZWRSZWYgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSAtIC5jdXJyZW50IGlzIHJlYWQgb25seSBpdCdzIHVzdWFsbHkgYXNzaWduZWQgYnkgcmVhY3QgaW50ZXJuYWxseVxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkZWRSZWYuY3VycmVudCA9IGltZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWltZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBhbiBlcnJvciBiZWZvcmUgcmVhY3QgaHlkcmF0ZXMsIHRoZW4gdGhlIGVycm9yIGlzIGxvc3QuXG4gICAgICAgICAgICAgICAgLy8gVGhlIHdvcmthcm91bmQgaXMgdG8gd2FpdCB1bnRpbCB0aGUgaW1hZ2UgaXMgbW91bnRlZCB3aGljaCBpcyBhZnRlciBoeWRyYXRpb24sXG4gICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBzZXQgdGhlIHNyYyBhZ2FpbiB0byB0cmlnZ2VyIHRoZSBlcnJvciBoYW5kbGVyIChpZiB0aGVyZSB3YXMgYW4gZXJyb3IpLlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgICAgICAgICAgICAgIGltZy5zcmMgPSBpbWcuc3JjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGlmICghc3JjU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ltYWdlIGlzIG1pc3NpbmcgcmVxdWlyZWQgXCJzcmNcIiBwcm9wZXJ0eTonLCBpbWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW1nLmdldEF0dHJpYnV0ZShcImFsdFwiKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbWFnZSBpcyBtaXNzaW5nIHJlcXVpcmVkIFwiYWx0XCIgcHJvcGVydHkuIFBsZWFzZSBhZGQgQWx0ZXJuYXRpdmUgVGV4dCB0byBkZXNjcmliZSB0aGUgaW1hZ2UgZm9yIHNjcmVlbiByZWFkZXJzIGFuZCBzZWFyY2ggZW5naW5lcy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW1nLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlTG9hZGluZyhpbWcsIHNyY1N0cmluZywgcGxhY2Vob2xkZXIsIG9uTG9hZFJlZiwgb25Mb2FkaW5nQ29tcGxldGVSZWYsIHNldEJsdXJDb21wbGV0ZSwgdW5vcHRpbWl6ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbXG4gICAgICAgICAgICBzcmNTdHJpbmcsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICAgIG9uTG9hZFJlZixcbiAgICAgICAgICAgIG9uTG9hZGluZ0NvbXBsZXRlUmVmLFxuICAgICAgICAgICAgc2V0Qmx1ckNvbXBsZXRlLFxuICAgICAgICAgICAgb25FcnJvcixcbiAgICAgICAgICAgIHVub3B0aW1pemVkLFxuICAgICAgICAgICAgZm9yd2FyZGVkUmVmXG4gICAgICAgIF0pLFxuICAgICAgICBvbkxvYWQ6IChldmVudCk9PntcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICBoYW5kbGVMb2FkaW5nKGltZywgc3JjU3RyaW5nLCBwbGFjZWhvbGRlciwgb25Mb2FkUmVmLCBvbkxvYWRpbmdDb21wbGV0ZVJlZiwgc2V0Qmx1ckNvbXBsZXRlLCB1bm9wdGltaXplZCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IChldmVudCk9PntcbiAgICAgICAgICAgIC8vIGlmIHRoZSByZWFsIGltYWdlIGZhaWxzIHRvIGxvYWQsIHRoaXMgd2lsbCBlbnN1cmUgXCJhbHRcIiBpcyB2aXNpYmxlXG4gICAgICAgICAgICBzZXRTaG93QWx0VGV4dCh0cnVlKTtcbiAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlciA9PT0gXCJibHVyXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVhbCBpbWFnZSBmYWlscyB0byBsb2FkLCB0aGlzIHdpbGwgc3RpbGwgcmVtb3ZlIHRoZSBwbGFjZWhvbGRlci5cbiAgICAgICAgICAgICAgICBzZXRCbHVyQ29tcGxldGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgICAgIG9uRXJyb3IoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59KTtcbmNvbnN0IEltYWdlID0gLyojX19QVVJFX18qLyAoMCwgX3JlYWN0LmZvcndhcmRSZWYpKChwYXJhbSwgZm9yd2FyZGVkUmVmKT0+e1xuICAgIGxldCB7IHNyYyAsIHNpemVzICwgdW5vcHRpbWl6ZWQgPWZhbHNlICwgcHJpb3JpdHkgPWZhbHNlICwgbG9hZGluZyAsIGNsYXNzTmFtZSAsIHF1YWxpdHkgLCB3aWR0aCAsIGhlaWdodCAsIGZpbGwgLCBzdHlsZSAsIG9uTG9hZCAsIG9uTG9hZGluZ0NvbXBsZXRlICwgcGxhY2Vob2xkZXIgPVwiZW1wdHlcIiAsIGJsdXJEYXRhVVJMICwgZmV0Y2hQcmlvcml0eSAsIGxheW91dCAsIG9iamVjdEZpdCAsIG9iamVjdFBvc2l0aW9uICwgbGF6eUJvdW5kYXJ5ICwgbGF6eVJvb3QgLCAuLi5hbGwgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGNvbmZpZ0NvbnRleHQgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9pbWFnZWNvbmZpZ2NvbnRleHQuSW1hZ2VDb25maWdDb250ZXh0KTtcbiAgICBjb25zdCBjb25maWcgPSAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT57XG4gICAgICAgIGNvbnN0IGMgPSBjb25maWdFbnYgfHwgY29uZmlnQ29udGV4dCB8fCBfaW1hZ2Vjb25maWcuaW1hZ2VDb25maWdEZWZhdWx0O1xuICAgICAgICBjb25zdCBhbGxTaXplcyA9IFtcbiAgICAgICAgICAgIC4uLmMuZGV2aWNlU2l6ZXMsXG4gICAgICAgICAgICAuLi5jLmltYWdlU2l6ZXNcbiAgICAgICAgXS5zb3J0KChhLCBiKT0+YSAtIGIpO1xuICAgICAgICBjb25zdCBkZXZpY2VTaXplcyA9IGMuZGV2aWNlU2l6ZXMuc29ydCgoYSwgYik9PmEgLSBiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgICBhbGxTaXplcyxcbiAgICAgICAgICAgIGRldmljZVNpemVzXG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBjb25maWdDb250ZXh0XG4gICAgXSk7XG4gICAgbGV0IHJlc3QgPSBhbGw7XG4gICAgbGV0IGxvYWRlciA9IHJlc3QubG9hZGVyIHx8IF9pbWFnZWxvYWRlci5kZWZhdWx0O1xuICAgIC8vIFJlbW92ZSBwcm9wZXJ0eSBzbyBpdCdzIG5vdCBzcHJlYWQgb24gPGltZz4gZWxlbWVudFxuICAgIGRlbGV0ZSByZXN0LmxvYWRlcjtcbiAgICAvLyBUaGlzIHNwZWNpYWwgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXJcbiAgICAvLyBkaWRuJ3QgZGVmaW5lIGEgXCJsb2FkZXJcIiBwcm9wIG9yIFwibG9hZGVyXCIgY29uZmlnLlxuICAgIGNvbnN0IGlzRGVmYXVsdExvYWRlciA9IFwiX19uZXh0X2ltZ19kZWZhdWx0XCIgaW4gbG9hZGVyO1xuICAgIGlmIChpc0RlZmF1bHRMb2FkZXIpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5sb2FkZXIgPT09IFwiY3VzdG9tXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2Ugd2l0aCBzcmMgXCInICsgc3JjICsgJ1wiIGlzIG1pc3NpbmcgXCJsb2FkZXJcIiBwcm9wLicgKyBcIlxcblJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbmV4dC1pbWFnZS1taXNzaW5nLWxvYWRlclwiKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB1c2VyIGRlZmluZWQgYSBcImxvYWRlclwiIHByb3Agb3IgY29uZmlnLlxuICAgICAgICAvLyBTaW5jZSB0aGUgY29uZmlnIG9iamVjdCBpcyBpbnRlcm5hbCBvbmx5LCB3ZVxuICAgICAgICAvLyBtdXN0IG5vdCBwYXNzIGl0IHRvIHRoZSB1c2VyLWRlZmluZWQgXCJsb2FkZXJcIi5cbiAgICAgICAgY29uc3QgY3VzdG9tSW1hZ2VMb2FkZXIgPSBsb2FkZXI7XG4gICAgICAgIGxvYWRlciA9IChvYmopPT57XG4gICAgICAgICAgICBjb25zdCB7IGNvbmZpZzogXyAsIC4uLm9wdHMgfSA9IG9iajtcbiAgICAgICAgICAgIHJldHVybiBjdXN0b21JbWFnZUxvYWRlcihvcHRzKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGxheW91dCkge1xuICAgICAgICBpZiAobGF5b3V0ID09PSBcImZpbGxcIikge1xuICAgICAgICAgICAgZmlsbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5b3V0VG9TdHlsZSA9IHtcbiAgICAgICAgICAgIGludHJpbnNpYzoge1xuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiYXV0b1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzcG9uc2l2ZToge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiYXV0b1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxheW91dFRvU2l6ZXMgPSB7XG4gICAgICAgICAgICByZXNwb25zaXZlOiBcIjEwMHZ3XCIsXG4gICAgICAgICAgICBmaWxsOiBcIjEwMHZ3XCJcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGF5b3V0U3R5bGUgPSBsYXlvdXRUb1N0eWxlW2xheW91dF07XG4gICAgICAgIGlmIChsYXlvdXRTdHlsZSkge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgICAgICAgLi4ubGF5b3V0U3R5bGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5b3V0U2l6ZXMgPSBsYXlvdXRUb1NpemVzW2xheW91dF07XG4gICAgICAgIGlmIChsYXlvdXRTaXplcyAmJiAhc2l6ZXMpIHtcbiAgICAgICAgICAgIHNpemVzID0gbGF5b3V0U2l6ZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHN0YXRpY1NyYyA9IFwiXCI7XG4gICAgbGV0IHdpZHRoSW50ID0gZ2V0SW50KHdpZHRoKTtcbiAgICBsZXQgaGVpZ2h0SW50ID0gZ2V0SW50KGhlaWdodCk7XG4gICAgbGV0IGJsdXJXaWR0aDtcbiAgICBsZXQgYmx1ckhlaWdodDtcbiAgICBpZiAoaXNTdGF0aWNJbXBvcnQoc3JjKSkge1xuICAgICAgICBjb25zdCBzdGF0aWNJbWFnZURhdGEgPSBpc1N0YXRpY1JlcXVpcmUoc3JjKSA/IHNyYy5kZWZhdWx0IDogc3JjO1xuICAgICAgICBpZiAoIXN0YXRpY0ltYWdlRGF0YS5zcmMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIG9iamVjdCBzaG91bGQgb25seSBiZSBwYXNzZWQgdG8gdGhlIGltYWdlIGNvbXBvbmVudCBzcmMgcGFyYW1ldGVyIGlmIGl0IGNvbWVzIGZyb20gYSBzdGF0aWMgaW1hZ2UgaW1wb3J0LiBJdCBtdXN0IGluY2x1ZGUgc3JjLiBSZWNlaXZlZCBcIiArIEpTT04uc3RyaW5naWZ5KHN0YXRpY0ltYWdlRGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdGljSW1hZ2VEYXRhLmhlaWdodCB8fCAhc3RhdGljSW1hZ2VEYXRhLndpZHRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBvYmplY3Qgc2hvdWxkIG9ubHkgYmUgcGFzc2VkIHRvIHRoZSBpbWFnZSBjb21wb25lbnQgc3JjIHBhcmFtZXRlciBpZiBpdCBjb21lcyBmcm9tIGEgc3RhdGljIGltYWdlIGltcG9ydC4gSXQgbXVzdCBpbmNsdWRlIGhlaWdodCBhbmQgd2lkdGguIFJlY2VpdmVkIFwiICsgSlNPTi5zdHJpbmdpZnkoc3RhdGljSW1hZ2VEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgYmx1cldpZHRoID0gc3RhdGljSW1hZ2VEYXRhLmJsdXJXaWR0aDtcbiAgICAgICAgYmx1ckhlaWdodCA9IHN0YXRpY0ltYWdlRGF0YS5ibHVySGVpZ2h0O1xuICAgICAgICBibHVyRGF0YVVSTCA9IGJsdXJEYXRhVVJMIHx8IHN0YXRpY0ltYWdlRGF0YS5ibHVyRGF0YVVSTDtcbiAgICAgICAgc3RhdGljU3JjID0gc3RhdGljSW1hZ2VEYXRhLnNyYztcbiAgICAgICAgaWYgKCFmaWxsKSB7XG4gICAgICAgICAgICBpZiAoIXdpZHRoSW50ICYmICFoZWlnaHRJbnQpIHtcbiAgICAgICAgICAgICAgICB3aWR0aEludCA9IHN0YXRpY0ltYWdlRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICBoZWlnaHRJbnQgPSBzdGF0aWNJbWFnZURhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aWR0aEludCAmJiAhaGVpZ2h0SW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF0aW8gPSB3aWR0aEludCAvIHN0YXRpY0ltYWdlRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICBoZWlnaHRJbnQgPSBNYXRoLnJvdW5kKHN0YXRpY0ltYWdlRGF0YS5oZWlnaHQgKiByYXRpbyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF3aWR0aEludCAmJiBoZWlnaHRJbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXRpbyA9IGhlaWdodEludCAvIHN0YXRpY0ltYWdlRGF0YS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgd2lkdGhJbnQgPSBNYXRoLnJvdW5kKHN0YXRpY0ltYWdlRGF0YS53aWR0aCAqIHJhdGlvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzcmMgPSB0eXBlb2Ygc3JjID09PSBcInN0cmluZ1wiID8gc3JjIDogc3RhdGljU3JjO1xuICAgIGxldCBpc0xhenkgPSAhcHJpb3JpdHkgJiYgKGxvYWRpbmcgPT09IFwibGF6eVwiIHx8IHR5cGVvZiBsb2FkaW5nID09PSBcInVuZGVmaW5lZFwiKTtcbiAgICBpZiAoIXNyYyB8fCBzcmMuc3RhcnRzV2l0aChcImRhdGE6XCIpIHx8IHNyYy5zdGFydHNXaXRoKFwiYmxvYjpcIikpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXNcbiAgICAgICAgdW5vcHRpbWl6ZWQgPSB0cnVlO1xuICAgICAgICBpc0xhenkgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy51bm9wdGltaXplZCkge1xuICAgICAgICB1bm9wdGltaXplZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpc0RlZmF1bHRMb2FkZXIgJiYgc3JjLmVuZHNXaXRoKFwiLnN2Z1wiKSAmJiAhY29uZmlnLmRhbmdlcm91c2x5QWxsb3dTVkcpIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlIHRvIG1ha2Ugc3ZnIHNlcnZlIGFzLWlzIHRvIGF2b2lkIHByb3h5aW5nXG4gICAgICAgIC8vIHRocm91Z2ggdGhlIGJ1aWx0LWluIEltYWdlIE9wdGltaXphdGlvbiBBUEkuXG4gICAgICAgIHVub3B0aW1pemVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHByaW9yaXR5KSB7XG4gICAgICAgIGZldGNoUHJpb3JpdHkgPSBcImhpZ2hcIjtcbiAgICB9XG4gICAgY29uc3QgW2JsdXJDb21wbGV0ZSwgc2V0Qmx1ckNvbXBsZXRlXSA9ICgwLCBfcmVhY3QudXNlU3RhdGUpKGZhbHNlKTtcbiAgICBjb25zdCBbc2hvd0FsdFRleHQsIHNldFNob3dBbHRUZXh0XSA9ICgwLCBfcmVhY3QudXNlU3RhdGUpKGZhbHNlKTtcbiAgICBjb25zdCBxdWFsaXR5SW50ID0gZ2V0SW50KHF1YWxpdHkpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5vdXRwdXQgPT09IFwiZXhwb3J0XCIgJiYgaXNEZWZhdWx0TG9hZGVyICYmICF1bm9wdGltaXplZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW1hZ2UgT3B0aW1pemF0aW9uIHVzaW5nIHRoZSBkZWZhdWx0IGxvYWRlciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGB7IG91dHB1dDogJ2V4cG9ydCcgfWAuXFxuICBQb3NzaWJsZSBzb2x1dGlvbnM6XFxuICAgIC0gUmVtb3ZlIGB7IG91dHB1dDogJ2V4cG9ydCcgfWAgYW5kIHJ1biBcXFwibmV4dCBzdGFydFxcXCIgdG8gcnVuIHNlcnZlciBtb2RlIGluY2x1ZGluZyB0aGUgSW1hZ2UgT3B0aW1pemF0aW9uIEFQSS5cXG4gICAgLSBDb25maWd1cmUgYHsgaW1hZ2VzOiB7IHVub3B0aW1pemVkOiB0cnVlIH0gfWAgaW4gYG5leHQuY29uZmlnLmpzYCB0byBkaXNhYmxlIHRoZSBJbWFnZSBPcHRpbWl6YXRpb24gQVBJLlxcbiAgUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9leHBvcnQtaW1hZ2UtYXBpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3JjKSB7XG4gICAgICAgICAgICAvLyBSZWFjdCBkb2Vzbid0IHNob3cgdGhlIHN0YWNrIHRyYWNlIGFuZCB0aGVyZSdzXG4gICAgICAgICAgICAvLyBubyBgc3JjYCB0byBoZWxwIGlkZW50aWZ5IHdoaWNoIGltYWdlLCBzbyB3ZVxuICAgICAgICAgICAgLy8gaW5zdGVhZCBjb25zb2xlLmVycm9yKHJlZikgZHVyaW5nIG1vdW50LlxuICAgICAgICAgICAgdW5vcHRpbWl6ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZpbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaGFzIGJvdGggXCJ3aWR0aFwiIGFuZCBcImZpbGxcIiBwcm9wZXJ0aWVzLiBPbmx5IG9uZSBzaG91bGQgYmUgdXNlZC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltYWdlIHdpdGggc3JjIFwiJyArIHNyYyArICdcIiBoYXMgYm90aCBcImhlaWdodFwiIGFuZCBcImZpbGxcIiBwcm9wZXJ0aWVzLiBPbmx5IG9uZSBzaG91bGQgYmUgdXNlZC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChzdHlsZSA9PSBudWxsID8gdm9pZCAwIDogc3R5bGUucG9zaXRpb24pICYmIHN0eWxlLnBvc2l0aW9uICE9PSBcImFic29sdXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaGFzIGJvdGggXCJmaWxsXCIgYW5kIFwic3R5bGUucG9zaXRpb25cIiBwcm9wZXJ0aWVzLiBJbWFnZXMgd2l0aCBcImZpbGxcIiBhbHdheXMgdXNlIHBvc2l0aW9uIGFic29sdXRlIC0gaXQgY2Fubm90IGJlIG1vZGlmaWVkLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHN0eWxlID09IG51bGwgPyB2b2lkIDAgOiBzdHlsZS53aWR0aCkgJiYgc3R5bGUud2lkdGggIT09IFwiMTAwJVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2Ugd2l0aCBzcmMgXCInICsgc3JjICsgJ1wiIGhhcyBib3RoIFwiZmlsbFwiIGFuZCBcInN0eWxlLndpZHRoXCIgcHJvcGVydGllcy4gSW1hZ2VzIHdpdGggXCJmaWxsXCIgYWx3YXlzIHVzZSB3aWR0aCAxMDAlIC0gaXQgY2Fubm90IGJlIG1vZGlmaWVkLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHN0eWxlID09IG51bGwgPyB2b2lkIDAgOiBzdHlsZS5oZWlnaHQpICYmIHN0eWxlLmhlaWdodCAhPT0gXCIxMDAlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaGFzIGJvdGggXCJmaWxsXCIgYW5kIFwic3R5bGUuaGVpZ2h0XCIgcHJvcGVydGllcy4gSW1hZ2VzIHdpdGggXCJmaWxsXCIgYWx3YXlzIHVzZSBoZWlnaHQgMTAwJSAtIGl0IGNhbm5vdCBiZSBtb2RpZmllZC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2lkdGhJbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaXMgbWlzc2luZyByZXF1aXJlZCBcIndpZHRoXCIgcHJvcGVydHkuJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc05hTih3aWR0aEludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaGFzIGludmFsaWQgXCJ3aWR0aFwiIHByb3BlcnR5LiBFeHBlY3RlZCBhIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzIGJ1dCByZWNlaXZlZCBcIicgKyB3aWR0aCArICdcIi4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoZWlnaHRJbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaXMgbWlzc2luZyByZXF1aXJlZCBcImhlaWdodFwiIHByb3BlcnR5LicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOYU4oaGVpZ2h0SW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltYWdlIHdpdGggc3JjIFwiJyArIHNyYyArICdcIiBoYXMgaW52YWxpZCBcImhlaWdodFwiIHByb3BlcnR5LiBFeHBlY3RlZCBhIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzIGJ1dCByZWNlaXZlZCBcIicgKyBoZWlnaHQgKyAnXCIuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghVkFMSURfTE9BRElOR19WQUxVRVMuaW5jbHVkZXMobG9hZGluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2Ugd2l0aCBzcmMgXCInICsgc3JjICsgJ1wiIGhhcyBpbnZhbGlkIFwibG9hZGluZ1wiIHByb3BlcnR5LiBQcm92aWRlZCBcIicgKyBsb2FkaW5nICsgJ1wiIHNob3VsZCBiZSBvbmUgb2YgJyArIFZBTElEX0xPQURJTkdfVkFMVUVTLm1hcChTdHJpbmcpLmpvaW4oXCIsXCIpICsgXCIuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmlvcml0eSAmJiBsb2FkaW5nID09PSBcImxhenlcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaGFzIGJvdGggXCJwcmlvcml0eVwiIGFuZCBcImxvYWRpbmc9XFwnbGF6eVxcJ1wiIHByb3BlcnRpZXMuIE9ubHkgb25lIHNob3VsZCBiZSB1c2VkLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZWhvbGRlciA9PT0gXCJibHVyXCIpIHtcbiAgICAgICAgICAgIGlmICh3aWR0aEludCAmJiBoZWlnaHRJbnQgJiYgd2lkdGhJbnQgKiBoZWlnaHRJbnQgPCAxNjAwKSB7XG4gICAgICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkoJ0ltYWdlIHdpdGggc3JjIFwiJyArIHNyYyArICdcIiBpcyBzbWFsbGVyIHRoYW4gNDB4NDAuIENvbnNpZGVyIHJlbW92aW5nIHRoZSBcInBsYWNlaG9sZGVyPVxcJ2JsdXJcXCdcIiBwcm9wZXJ0eSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFibHVyRGF0YVVSTCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFZBTElEX0JMVVJfRVhUID0gW1xuICAgICAgICAgICAgICAgICAgICBcImpwZWdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ3ZWJwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYXZpZlwiXG4gICAgICAgICAgICAgICAgXSAvLyBzaG91bGQgbWF0Y2ggbmV4dC1pbWFnZS1sb2FkZXJcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSB3aXRoIHNyYyBcIicgKyBzcmMgKyAnXCIgaGFzIFwicGxhY2Vob2xkZXI9XFwnYmx1clxcJ1wiIHByb3BlcnR5IGJ1dCBpcyBtaXNzaW5nIHRoZSBcImJsdXJEYXRhVVJMXCIgcHJvcGVydHkuXFxuICAgICAgICAgIFBvc3NpYmxlIHNvbHV0aW9uczpcXG4gICAgICAgICAgICAtIEFkZCBhIFwiYmx1ckRhdGFVUkxcIiBwcm9wZXJ0eSwgdGhlIGNvbnRlbnRzIHNob3VsZCBiZSBhIHNtYWxsIERhdGEgVVJMIHRvIHJlcHJlc2VudCB0aGUgaW1hZ2VcXG4gICAgICAgICAgICAtIENoYW5nZSB0aGUgXCJzcmNcIiBwcm9wZXJ0eSB0byBhIHN0YXRpYyBpbXBvcnQgd2l0aCBvbmUgb2YgdGhlIHN1cHBvcnRlZCBmaWxlIHR5cGVzOiAnICsgVkFMSURfQkxVUl9FWFQuam9pbihcIixcIikgKyAnXFxuICAgICAgICAgICAgLSBSZW1vdmUgdGhlIFwicGxhY2Vob2xkZXJcIiBwcm9wZXJ0eSwgZWZmZWN0aXZlbHkgbm8gYmx1ciBlZmZlY3RcXG4gICAgICAgICAgUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9wbGFjZWhvbGRlci1ibHVyLWRhdGEtdXJsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwicmVmXCIgaW4gcmVzdCkge1xuICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkoJ0ltYWdlIHdpdGggc3JjIFwiJyArIHNyYyArICdcIiBpcyB1c2luZyB1bnN1cHBvcnRlZCBcInJlZlwiIHByb3BlcnR5LiBDb25zaWRlciB1c2luZyB0aGUgXCJvbkxvYWRpbmdDb21wbGV0ZVwiIHByb3BlcnR5IGluc3RlYWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF1bm9wdGltaXplZCAmJiBsb2FkZXIgIT09IF9pbWFnZWxvYWRlci5kZWZhdWx0KSB7XG4gICAgICAgICAgICBjb25zdCB1cmxTdHIgPSBsb2FkZXIoe1xuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICBzcmMsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoSW50IHx8IDQwMCxcbiAgICAgICAgICAgICAgICBxdWFsaXR5OiBxdWFsaXR5SW50IHx8IDc1XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCB1cmw7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHVybCA9IG5ldyBVUkwodXJsU3RyKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICAgICAgICAgIGlmICh1cmxTdHIgPT09IHNyYyB8fCB1cmwgJiYgdXJsLnBhdGhuYW1lID09PSBzcmMgJiYgIXVybC5zZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3dhcm5vbmNlLndhcm5PbmNlKSgnSW1hZ2Ugd2l0aCBzcmMgXCInICsgc3JjICsgJ1wiIGhhcyBhIFwibG9hZGVyXCIgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgd2lkdGguIFBsZWFzZSBpbXBsZW1lbnQgaXQgb3IgdXNlIHRoZSBcInVub3B0aW1pemVkXCIgcHJvcGVydHkgaW5zdGVhZC4nICsgXCJcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtaW1hZ2UtbWlzc2luZy1sb2FkZXItd2lkdGhcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbbGVnYWN5S2V5LCBsZWdhY3lWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoe1xuICAgICAgICAgICAgbGF5b3V0LFxuICAgICAgICAgICAgb2JqZWN0Rml0LFxuICAgICAgICAgICAgb2JqZWN0UG9zaXRpb24sXG4gICAgICAgICAgICBsYXp5Qm91bmRhcnksXG4gICAgICAgICAgICBsYXp5Um9vdFxuICAgICAgICB9KSl7XG4gICAgICAgICAgICBpZiAobGVnYWN5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3dhcm5vbmNlLndhcm5PbmNlKSgnSW1hZ2Ugd2l0aCBzcmMgXCInICsgc3JjICsgJ1wiIGhhcyBsZWdhY3kgcHJvcCBcIicgKyBsZWdhY3lLZXkgKyAnXCIuIERpZCB5b3UgZm9yZ2V0IHRvIHJ1biB0aGUgY29kZW1vZD8nICsgXCJcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtaW1hZ2UtdXBncmFkZS10by0xM1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhcGVyZk9ic2VydmVyICYmIHdpbmRvdy5QZXJmb3JtYW5jZU9ic2VydmVyKSB7XG4gICAgICAgICAgICBwZXJmT2JzZXJ2ZXIgPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcigoZW50cnlMaXN0KT0+e1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cnlMaXN0LmdldEVudHJpZXMoKSl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZW50cnlfZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSAtIG1pc3NpbmcgXCJMYXJnZXN0Q29udGVudGZ1bFBhaW50XCIgY2xhc3Mgd2l0aCBcImVsZW1lbnRcIiBwcm9wXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZ1NyYyA9IChlbnRyeSA9PSBudWxsID8gdm9pZCAwIDogKF9lbnRyeV9lbGVtZW50ID0gZW50cnkuZWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbnRyeV9lbGVtZW50LnNyYykgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGNwSW1hZ2UgPSBhbGxJbWdzLmdldChpbWdTcmMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGNwSW1hZ2UgJiYgIWxjcEltYWdlLnByaW9yaXR5ICYmIGxjcEltYWdlLnBsYWNlaG9sZGVyICE9PSBcImJsdXJcIiAmJiAhbGNwSW1hZ2Uuc3JjLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSAmJiAhbGNwSW1hZ2Uuc3JjLnN0YXJ0c1dpdGgoXCJibG9iOlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93ZWIuZGV2L2xjcC8jbWVhc3VyZS1sY3AtaW4tamF2YXNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkoJ0ltYWdlIHdpdGggc3JjIFwiJyArIGxjcEltYWdlLnNyYyArICdcIiB3YXMgZGV0ZWN0ZWQgYXMgdGhlIExhcmdlc3QgQ29udGVudGZ1bCBQYWludCAoTENQKS4gUGxlYXNlIGFkZCB0aGUgXCJwcmlvcml0eVwiIHByb3BlcnR5IGlmIHRoaXMgaW1hZ2UgaXMgYWJvdmUgdGhlIGZvbGQuJyArIFwiXFxuUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjcHJpb3JpdHlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGVyZk9ic2VydmVyLm9ic2VydmUoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImxhcmdlc3QtY29udGVudGZ1bC1wYWludFwiLFxuICAgICAgICAgICAgICAgICAgICBidWZmZXJlZDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gTG9nIGVycm9yIGJ1dCBkb24ndCBjcmFzaCB0aGUgYXBwXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGltZ1N0eWxlID0gT2JqZWN0LmFzc2lnbihmaWxsID8ge1xuICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgb2JqZWN0Rml0LFxuICAgICAgICBvYmplY3RQb3NpdGlvblxuICAgIH0gOiB7fSwgc2hvd0FsdFRleHQgPyB7fSA6IHtcbiAgICAgICAgY29sb3I6IFwidHJhbnNwYXJlbnRcIlxuICAgIH0sIHN0eWxlKTtcbiAgICBjb25zdCBibHVyU3R5bGUgPSBwbGFjZWhvbGRlciA9PT0gXCJibHVyXCIgJiYgYmx1ckRhdGFVUkwgJiYgIWJsdXJDb21wbGV0ZSA/IHtcbiAgICAgICAgYmFja2dyb3VuZFNpemU6IGltZ1N0eWxlLm9iamVjdEZpdCB8fCBcImNvdmVyXCIsXG4gICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogaW1nU3R5bGUub2JqZWN0UG9zaXRpb24gfHwgXCI1MCUgNTAlXCIsXG4gICAgICAgIGJhY2tncm91bmRSZXBlYXQ6IFwibm8tcmVwZWF0XCIsXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ3VybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCcgKyAoMCwgX2ltYWdlYmx1cnN2Zy5nZXRJbWFnZUJsdXJTdmcpKHtcbiAgICAgICAgICAgIHdpZHRoSW50LFxuICAgICAgICAgICAgaGVpZ2h0SW50LFxuICAgICAgICAgICAgYmx1cldpZHRoLFxuICAgICAgICAgICAgYmx1ckhlaWdodCxcbiAgICAgICAgICAgIGJsdXJEYXRhVVJMLFxuICAgICAgICAgICAgb2JqZWN0Rml0OiBpbWdTdHlsZS5vYmplY3RGaXRcbiAgICAgICAgfSkgKyAnXCIpJ1xuICAgIH0gOiB7fTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICBpZiAoYmx1clN0eWxlLmJhY2tncm91bmRJbWFnZSAmJiAoYmx1ckRhdGFVUkwgPT0gbnVsbCA/IHZvaWQgMCA6IGJsdXJEYXRhVVJMLnN0YXJ0c1dpdGgoXCIvXCIpKSkge1xuICAgICAgICAgICAgLy8gRHVyaW5nIGBuZXh0IGRldmAsIHdlIGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgYmx1ciBwbGFjZWhvbGRlcnMgd2l0aCB3ZWJwYWNrXG4gICAgICAgICAgICAvLyBiZWNhdXNlIGl0IGNhbiBkZWxheSBzdGFydGluZyB0aGUgZGV2IHNlcnZlci4gSW5zdGVhZCwgYG5leHQtaW1hZ2UtbG9hZGVyLmpzYFxuICAgICAgICAgICAgLy8gd2lsbCBpbmxpbmUgYSBzcGVjaWFsIHVybCB0byBsYXppbHkgZ2VuZXJhdGUgdGhlIGJsdXIgcGxhY2Vob2xkZXIgYXQgcmVxdWVzdCB0aW1lLlxuICAgICAgICAgICAgYmx1clN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICd1cmwoXCInICsgYmx1ckRhdGFVUkwgKyAnXCIpJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpbWdBdHRyaWJ1dGVzID0gZ2VuZXJhdGVJbWdBdHRycyh7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgc3JjLFxuICAgICAgICB1bm9wdGltaXplZCxcbiAgICAgICAgd2lkdGg6IHdpZHRoSW50LFxuICAgICAgICBxdWFsaXR5OiBxdWFsaXR5SW50LFxuICAgICAgICBzaXplcyxcbiAgICAgICAgbG9hZGVyXG4gICAgfSk7XG4gICAgbGV0IHNyY1N0cmluZyA9IHNyYztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBsZXQgZnVsbFVybDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZnVsbFVybCA9IG5ldyBVUkwoaW1nQXR0cmlidXRlcy5zcmMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGZ1bGxVcmwgPSBuZXcgVVJMKGltZ0F0dHJpYnV0ZXMuc3JjLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGxJbWdzLnNldChmdWxsVXJsLmhyZWYsIHtcbiAgICAgICAgICAgICAgICBzcmMsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9uTG9hZFJlZiA9ICgwLCBfcmVhY3QudXNlUmVmKShvbkxvYWQpO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICBvbkxvYWRSZWYuY3VycmVudCA9IG9uTG9hZDtcbiAgICB9LCBbXG4gICAgICAgIG9uTG9hZFxuICAgIF0pO1xuICAgIGNvbnN0IG9uTG9hZGluZ0NvbXBsZXRlUmVmID0gKDAsIF9yZWFjdC51c2VSZWYpKG9uTG9hZGluZ0NvbXBsZXRlKTtcbiAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcbiAgICAgICAgb25Mb2FkaW5nQ29tcGxldGVSZWYuY3VycmVudCA9IG9uTG9hZGluZ0NvbXBsZXRlO1xuICAgIH0sIFtcbiAgICAgICAgb25Mb2FkaW5nQ29tcGxldGVcbiAgICBdKTtcbiAgICBjb25zdCBpbWdFbGVtZW50QXJncyA9IHtcbiAgICAgICAgaXNMYXp5LFxuICAgICAgICBpbWdBdHRyaWJ1dGVzLFxuICAgICAgICBoZWlnaHRJbnQsXG4gICAgICAgIHdpZHRoSW50LFxuICAgICAgICBxdWFsaXR5SW50LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGltZ1N0eWxlLFxuICAgICAgICBibHVyU3R5bGUsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmV0Y2hQcmlvcml0eSxcbiAgICAgICAgZmlsbCxcbiAgICAgICAgdW5vcHRpbWl6ZWQsXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBsb2FkZXIsXG4gICAgICAgIHNyY1N0cmluZyxcbiAgICAgICAgb25Mb2FkUmVmLFxuICAgICAgICBvbkxvYWRpbmdDb21wbGV0ZVJlZixcbiAgICAgICAgc2V0Qmx1ckNvbXBsZXRlLFxuICAgICAgICBzZXRTaG93QWx0VGV4dCxcbiAgICAgICAgLi4ucmVzdFxuICAgIH07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfcmVhY3QuZGVmYXVsdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qLyBfcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEltYWdlRWxlbWVudCwge1xuICAgICAgICAuLi5pbWdFbGVtZW50QXJncyxcbiAgICAgICAgcmVmOiBmb3J3YXJkZWRSZWZcbiAgICB9KSwgcHJpb3JpdHkgPyAvLyBOb3RlIGhvdyB3ZSBvbWl0IHRoZSBgaHJlZmAgYXR0cmlidXRlLCBhcyBpdCB3b3VsZCBvbmx5IGJlIHJlbGV2YW50XG4gICAgLy8gZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgYGltYWdlc3Jjc2V0YCwgYW5kIGluIHRob3NlIGNhc2VzXG4gICAgLy8gaXQgd291bGQgbGlrZWx5IGNhdXNlIHRoZSBpbmNvcnJlY3QgaW1hZ2UgdG8gYmUgcHJlbG9hZGVkLlxuICAgIC8vXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjYXR0ci1saW5rLWltYWdlc3Jjc2V0XG4gICAgLyojX19QVVJFX18qLyBfcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9oZWFkLmRlZmF1bHQsIG51bGwsIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxpbmtcIiwge1xuICAgICAgICBrZXk6IFwiX19uaW1nLVwiICsgaW1nQXR0cmlidXRlcy5zcmMgKyBpbWdBdHRyaWJ1dGVzLnNyY1NldCArIGltZ0F0dHJpYnV0ZXMuc2l6ZXMsXG4gICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgIGFzOiBcImltYWdlXCIsXG4gICAgICAgIGhyZWY6IGltZ0F0dHJpYnV0ZXMuc3JjU2V0ID8gdW5kZWZpbmVkIDogaW1nQXR0cmlidXRlcy5zcmMsXG4gICAgICAgIGltYWdlU3JjU2V0OiBpbWdBdHRyaWJ1dGVzLnNyY1NldCxcbiAgICAgICAgaW1hZ2VTaXplczogaW1nQXR0cmlidXRlcy5zaXplcyxcbiAgICAgICAgY3Jvc3NPcmlnaW46IHJlc3QuY3Jvc3NPcmlnaW4sXG4gICAgICAgIHJlZmVycmVyUG9saWN5OiByZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgICAuLi5nZXREeW5hbWljUHJvcHMoZmV0Y2hQcmlvcml0eSlcbiAgICB9KSkgOiBudWxsKTtcbn0pO1xuY29uc3QgX2RlZmF1bHQgPSBJbWFnZTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW1hZ2UuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIl9kZWZhdWx0IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJfcmVhY3QiLCJfIiwiX2hlYWQiLCJfaW1hZ2VibHVyc3ZnIiwiX2ltYWdlY29uZmlnIiwiX2ltYWdlY29uZmlnY29udGV4dCIsIl93YXJub25jZSIsIl9pbWFnZWxvYWRlciIsImNvbmZpZ0VudiIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfSU1BR0VfT1BUUyIsImFsbEltZ3MiLCJNYXAiLCJwZXJmT2JzZXJ2ZXIiLCJnbG9iYWxUaGlzIiwiX19ORVhUX0lNQUdFX0lNUE9SVEVEIiwiVkFMSURfTE9BRElOR19WQUxVRVMiLCJ1bmRlZmluZWQiLCJpc1N0YXRpY1JlcXVpcmUiLCJzcmMiLCJkZWZhdWx0IiwiaXNTdGF0aWNJbWFnZURhdGEiLCJpc1N0YXRpY0ltcG9ydCIsImdldFdpZHRocyIsInBhcmFtIiwid2lkdGgiLCJzaXplcyIsImRldmljZVNpemVzIiwiYWxsU2l6ZXMiLCJ2aWV3cG9ydFdpZHRoUmUiLCJwZXJjZW50U2l6ZXMiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwicGFyc2VJbnQiLCJsZW5ndGgiLCJzbWFsbGVzdFJhdGlvIiwiTWF0aCIsIm1pbiIsIndpZHRocyIsImZpbHRlciIsInMiLCJraW5kIiwiU2V0IiwibWFwIiwidyIsImZpbmQiLCJwIiwiZ2VuZXJhdGVJbWdBdHRycyIsImNvbmZpZyIsInVub3B0aW1pemVkIiwicXVhbGl0eSIsImxvYWRlciIsInNyY1NldCIsImxhc3QiLCJpIiwiam9pbiIsImdldEludCIsIngiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIk5hTiIsInRlc3QiLCJoYW5kbGVMb2FkaW5nIiwiaW1nIiwicGxhY2Vob2xkZXIiLCJvbkxvYWRSZWYiLCJvbkxvYWRpbmdDb21wbGV0ZVJlZiIsInNldEJsdXJDb21wbGV0ZSIsImRlY29kZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2F0Y2giLCJ0aGVuIiwicGFyZW50RWxlbWVudCIsImlzQ29ubmVjdGVkIiwiY3VycmVudCIsImV2ZW50IiwiRXZlbnQiLCJ3cml0YWJsZSIsInByZXZlbnRlZCIsInN0b3BwZWQiLCJuYXRpdmVFdmVudCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsInBlcnNpc3QiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImdldEF0dHJpYnV0ZSIsIndpZHRoVmlld3BvcnRSYXRpbyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJ3YXJuT25jZSIsInBvc2l0aW9uIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInZhbGlkIiwiaW5jbHVkZXMiLCJTdHJpbmciLCJoZWlnaHQiLCJoZWlnaHRNb2RpZmllZCIsInRvU3RyaW5nIiwid2lkdGhNb2RpZmllZCIsImdldER5bmFtaWNQcm9wcyIsImZldGNoUHJpb3JpdHkiLCJtYWpvclN0ciIsIm1pbm9yU3RyIiwidmVyc2lvbiIsInNwbGl0IiwibWFqb3IiLCJtaW5vciIsImZldGNocHJpb3JpdHkiLCJJbWFnZUVsZW1lbnQiLCJmb3J3YXJkUmVmIiwiZm9yd2FyZGVkUmVmIiwiaW1nQXR0cmlidXRlcyIsImhlaWdodEludCIsIndpZHRoSW50IiwicXVhbGl0eUludCIsImNsYXNzTmFtZSIsImltZ1N0eWxlIiwiYmx1clN0eWxlIiwiaXNMYXp5IiwiZmlsbCIsImxvYWRpbmciLCJzcmNTdHJpbmciLCJzZXRTaG93QWx0VGV4dCIsIm9uTG9hZCIsIm9uRXJyb3IiLCJyZXN0IiwiY3JlYXRlRWxlbWVudCIsImRlY29kaW5nIiwic3R5bGUiLCJyZWYiLCJ1c2VDYWxsYmFjayIsImNvbnNvbGUiLCJlcnJvciIsImNvbXBsZXRlIiwiSW1hZ2UiLCJwcmlvcml0eSIsIm9uTG9hZGluZ0NvbXBsZXRlIiwiYmx1ckRhdGFVUkwiLCJsYXlvdXQiLCJvYmplY3RGaXQiLCJvYmplY3RQb3NpdGlvbiIsImxhenlCb3VuZGFyeSIsImxhenlSb290IiwiYWxsIiwiY29uZmlnQ29udGV4dCIsInVzZUNvbnRleHQiLCJJbWFnZUNvbmZpZ0NvbnRleHQiLCJ1c2VNZW1vIiwiYyIsImltYWdlQ29uZmlnRGVmYXVsdCIsImltYWdlU2l6ZXMiLCJzb3J0IiwiYSIsImIiLCJpc0RlZmF1bHRMb2FkZXIiLCJFcnJvciIsImN1c3RvbUltYWdlTG9hZGVyIiwib2JqIiwib3B0cyIsImxheW91dFRvU3R5bGUiLCJpbnRyaW5zaWMiLCJtYXhXaWR0aCIsInJlc3BvbnNpdmUiLCJsYXlvdXRUb1NpemVzIiwibGF5b3V0U3R5bGUiLCJsYXlvdXRTaXplcyIsInN0YXRpY1NyYyIsImJsdXJXaWR0aCIsImJsdXJIZWlnaHQiLCJzdGF0aWNJbWFnZURhdGEiLCJKU09OIiwic3RyaW5naWZ5IiwicmF0aW8iLCJyb3VuZCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImRhbmdlcm91c2x5QWxsb3dTVkciLCJibHVyQ29tcGxldGUiLCJ1c2VTdGF0ZSIsInNob3dBbHRUZXh0Iiwib3V0cHV0IiwiaXNOYU4iLCJWQUxJRF9CTFVSX0VYVCIsInVybFN0ciIsInVybCIsIlVSTCIsImVyciIsInBhdGhuYW1lIiwic2VhcmNoIiwibGVnYWN5S2V5IiwibGVnYWN5VmFsdWUiLCJlbnRyaWVzIiwiUGVyZm9ybWFuY2VPYnNlcnZlciIsImVudHJ5TGlzdCIsImVudHJ5IiwiZ2V0RW50cmllcyIsIl9lbnRyeV9lbGVtZW50IiwiaW1nU3JjIiwiZWxlbWVudCIsImxjcEltYWdlIiwib2JzZXJ2ZSIsInR5cGUiLCJidWZmZXJlZCIsImFzc2lnbiIsImxlZnQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImNvbG9yIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0SW1hZ2VCbHVyU3ZnIiwiZnVsbFVybCIsImUiLCJsb2NhdGlvbiIsImhyZWYiLCJzZXQiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJpbWdFbGVtZW50QXJncyIsIkZyYWdtZW50Iiwia2V5IiwicmVsIiwiYXMiLCJpbWFnZVNyY1NldCIsImNyb3NzT3JpZ2luIiwicmVmZXJyZXJQb2xpY3kiLCJfX2VzTW9kdWxlIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-client)/./node_modules/next/dist/client/image.js\n"));
+
+/***/ }),
+
+/***/ "(app-client)/./node_modules/next/dist/shared/lib/amp-context.js":
+/*!**********************************************************!*\
+ !*** ./node_modules/next/dist/shared/lib/amp-context.js ***!
+ \**********************************************************/
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AmpStateContext\", ({\n enumerable: true,\n get: function() {\n return AmpStateContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-client)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-client)/./node_modules/next/dist/compiled/react/index.js\"));\nconst AmpStateContext = _react.default.createContext({});\nif (true) {\n AmpStateContext.displayName = \"AmpStateContext\";\n} //# sourceMappingURL=amp-context.js.map\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 prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== 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 on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = 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 (prevExports !== 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(prevExports, 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 = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1jbGllbnQpLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2FtcC1jb250ZXh0LmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTyxJQUFJO0FBQ2YsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWSxJQUFJO0lBQ2hCQyxLQUFLLFdBQVc7UUFDWixPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyx5SEFBeUM7QUFDbEYsTUFBTUMsU0FBUyxXQUFXLEdBQUdGLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyw0RUFBTztBQUN2RSxNQUFNRixrQkFBa0JHLE9BQU9FLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDLENBQUM7QUFDdEQsSUFBSUMsSUFBcUMsRUFBRTtJQUN2Q1AsZ0JBQWdCUSxXQUFXLEdBQUc7QUFDbEMsQ0FBQyxDQUVELHVDQUF1QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYW1wLWNvbnRleHQuanM/ZTVhNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFtcFN0YXRlQ29udGV4dFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQW1wU3RhdGVDb250ZXh0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IEFtcFN0YXRlQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIEFtcFN0YXRlQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiQW1wU3RhdGVDb250ZXh0XCI7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFtcC1jb250ZXh0LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJBbXBTdGF0ZUNvbnRleHQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiXyIsImRlZmF1bHQiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-client)/./node_modules/next/dist/shared/lib/amp-context.js\n"));
+
+/***/ }),
+
+/***/ "(app-client)/./node_modules/next/dist/shared/lib/amp-mode.js":
+/*!*******************************************************!*\
+ !*** ./node_modules/next/dist/shared/lib/amp-mode.js ***!
+ \*******************************************************/
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isInAmpMode\", ({\n enumerable: true,\n get: function() {\n return isInAmpMode;\n }\n}));\nfunction isInAmpMode(param) {\n let { ampFirst =false , hybrid =false , hasQuery =false } = param === void 0 ? {} : param;\n return ampFirst || hybrid && hasQuery;\n} //# sourceMappingURL=amp-mode.js.map\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 prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== 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 on update so we can compare the boundary\n // signatures.\n module.hot.dispose(function (data) {\n data.prevExports = 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 (prevExports !== 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(prevExports, 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 = prevExports !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1jbGllbnQpLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2FtcC1tb2RlLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTyxJQUFJO0FBQ2YsQ0FBQyxFQUFDO0FBQ0ZILCtDQUE4QztJQUMxQ0ksWUFBWSxJQUFJO0lBQ2hCQyxLQUFLLFdBQVc7UUFDWixPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsWUFBWUMsS0FBSyxFQUFFO0lBQ3hCLElBQUksRUFBRUMsVUFBVSxLQUFLLEdBQUdDLFFBQVEsS0FBSyxHQUFHQyxVQUFVLEtBQUssR0FBRyxHQUFHSCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUlBLEtBQUs7SUFDMUYsT0FBT0MsWUFBWUMsVUFBVUM7QUFDakMsRUFFQSxvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2FtcC1tb2RlLmpzPzYyMzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0luQW1wTW9kZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNJbkFtcE1vZGU7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBpc0luQW1wTW9kZShwYXJhbSkge1xuICAgIGxldCB7IGFtcEZpcnN0ID1mYWxzZSAsIGh5YnJpZCA9ZmFsc2UgLCBoYXNRdWVyeSA9ZmFsc2UgIH0gPSBwYXJhbSA9PT0gdm9pZCAwID8ge30gOiBwYXJhbTtcbiAgICByZXR1cm4gYW1wRmlyc3QgfHwgaHlicmlkICYmIGhhc1F1ZXJ5O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbXAtbW9kZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaXNJbkFtcE1vZGUiLCJwYXJhbSIsImFtcEZpcnN0IiwiaHlicmlkIiwiaGFzUXVlcnkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-client)/./node_modules/next/dist/shared/lib/amp-mode.js\n"));
+
+/***/ }),
+
+/***/ "(app-client)/./node_modules/next/dist/shared/lib/head.js":
+/*!***************************************************!*\
+ !*** ./node_modules/next/dist/shared/lib/head.js ***!
+ \***************************************************/
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n defaultHead: function() {\n return defaultHead;\n },\n default: function() {\n return _default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-client)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-client)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-client)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _sideeffect = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./side-effect */ \"(app-client)/./node_modules/next/dist/shared/lib/side-effect.js\"));\nconst _ampcontext = __webpack_require__(/*! ./amp-context */ \"(app-client)/./node_modules/next/dist/shared/lib/amp-context.js\");\nconst _headmanagercontext = __webpack_require__(/*! ./head-manager-context */ \"(app-client)/./node_modules/next/dist/shared/lib/head-manager-context.js\");\nconst _ampmode = __webpack_require__(/*! ./amp-mode */ \"(app-client)/./node_modules/next/dist/shared/lib/amp-mode.js\");\nconst _warnonce = __webpack_require__(/*! ./utils/warn-once */ \"(app-client)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction defaultHead(inAmpMode) {\n if (inAmpMode === void 0) inAmpMode = false;\n const head = [\n /*#__PURE__*/ _react.default.createElement(\"meta\", {\n charSet: \"utf-8\"\n })\n ];\n if (!inAmpMode) {\n head.push(/*#__PURE__*/ _react.default.createElement(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }));\n }\n return head;\n}\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === \"string\" || typeof child === \"number\") {\n return list;\n }\n // Adds support for React.Fragment\n if (child.type === _react.default.Fragment) {\n return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{\n if (typeof fragmentChild === \"string\" || typeof fragmentChild === \"number\") {\n return fragmentList;\n }\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n return list.concat(child);\n}\nconst METATYPES = [\n \"name\",\n \"httpEquiv\",\n \"charSet\",\n \"itemProp\"\n];\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like \n Also adds support for deduplicated `key` properties\n*/ function unique() {\n const keys = new Set();\n const tags = new Set();\n const metaTypes = new Set();\n const metaCategories = {};\n return (h)=>{\n let isUnique = true;\n let hasKey = false;\n if (h.key && typeof h.key !== \"number\" && h.key.indexOf(\"$\") > 0) {\n hasKey = true;\n const key = h.key.slice(h.key.indexOf(\"$\") + 1);\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n }\n // eslint-disable-next-line default-case\n switch(h.type){\n case \"title\":\n case \"base\":\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n break;\n case \"meta\":\n for(let i = 0, len = METATYPES.length; i < len; i++){\n const metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n if (metatype === \"charSet\") {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n const category = h.props[metatype];\n const categories = metaCategories[metatype] || new Set();\n if ((metatype !== \"name\" || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n break;\n }\n return isUnique;\n };\n}\n/**\n *\n * @param headChildrenElements List of children of \n */ function reduceComponents(headChildrenElements, props) {\n const { inAmpMode } = props;\n return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead(inAmpMode).reverse()).filter(unique()).reverse().map((c, i)=>{\n const key = c.key || i;\n if (false) {}\n if (true) {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === \"script\" && c.props[\"type\"] !== \"application/ld+json\") {\n const srcMessage = c.props[\"src\"] ? '