diff --git a/.next/build-manifest.json b/.next/build-manifest.json
index e4e1856b..6b0c08e1 100644
--- a/.next/build-manifest.json
+++ b/.next/build-manifest.json
@@ -15,11 +15,6 @@
],
"rootMainFiles": [],
"pages": {
- "/": [
- "static/chunks/webpack.js",
- "static/chunks/main.js",
- "static/chunks/pages/index.js"
- ],
"/_app": [
"static/chunks/webpack.js",
"static/chunks/main.js",
diff --git a/.next/cache/webpack/client-development/0.pack b/.next/cache/webpack/client-development/0.pack
index 6ea57baf..7f22cdbc 100644
Binary files a/.next/cache/webpack/client-development/0.pack and b/.next/cache/webpack/client-development/0.pack differ
diff --git a/.next/cache/webpack/client-development/1.pack b/.next/cache/webpack/client-development/1.pack
index 52454a44..2293c105 100644
Binary files a/.next/cache/webpack/client-development/1.pack and b/.next/cache/webpack/client-development/1.pack differ
diff --git a/.next/cache/webpack/client-development/10.pack b/.next/cache/webpack/client-development/10.pack
index 20116246..5496bffb 100644
Binary files a/.next/cache/webpack/client-development/10.pack and b/.next/cache/webpack/client-development/10.pack differ
diff --git a/.next/cache/webpack/client-development/11.pack b/.next/cache/webpack/client-development/11.pack
index 4d290a44..78fa9ec9 100644
Binary files a/.next/cache/webpack/client-development/11.pack and b/.next/cache/webpack/client-development/11.pack differ
diff --git a/.next/cache/webpack/client-development/2.pack b/.next/cache/webpack/client-development/2.pack
index 43de6a79..2c6f6168 100644
Binary files a/.next/cache/webpack/client-development/2.pack and b/.next/cache/webpack/client-development/2.pack differ
diff --git a/.next/cache/webpack/client-development/5.pack b/.next/cache/webpack/client-development/5.pack
index af7fe029..70f0f2e1 100644
Binary files a/.next/cache/webpack/client-development/5.pack and b/.next/cache/webpack/client-development/5.pack differ
diff --git a/.next/cache/webpack/client-development/6.pack b/.next/cache/webpack/client-development/6.pack
index 8353c554..6b2cd8d1 100644
Binary files a/.next/cache/webpack/client-development/6.pack and b/.next/cache/webpack/client-development/6.pack differ
diff --git a/.next/cache/webpack/client-development/7.pack b/.next/cache/webpack/client-development/7.pack
index f5a3a2d5..245525aa 100644
Binary files a/.next/cache/webpack/client-development/7.pack and b/.next/cache/webpack/client-development/7.pack differ
diff --git a/.next/cache/webpack/client-development/8.pack b/.next/cache/webpack/client-development/8.pack
index 65504dca..3b9ef0e2 100644
Binary files a/.next/cache/webpack/client-development/8.pack and b/.next/cache/webpack/client-development/8.pack differ
diff --git a/.next/cache/webpack/client-development/9.pack b/.next/cache/webpack/client-development/9.pack
index 2bfefda2..bc4a91a7 100644
Binary files a/.next/cache/webpack/client-development/9.pack and b/.next/cache/webpack/client-development/9.pack differ
diff --git a/.next/cache/webpack/client-development/index.pack b/.next/cache/webpack/client-development/index.pack
index c0c20f01..2fd55894 100644
Binary files a/.next/cache/webpack/client-development/index.pack and b/.next/cache/webpack/client-development/index.pack differ
diff --git a/.next/cache/webpack/client-development/index.pack.old b/.next/cache/webpack/client-development/index.pack.old
index 9df3e08c..c1765c8a 100644
Binary files a/.next/cache/webpack/client-development/index.pack.old and b/.next/cache/webpack/client-development/index.pack.old differ
diff --git a/.next/cache/webpack/server-development/0.pack b/.next/cache/webpack/server-development/0.pack
index 74a83556..b5dcd886 100644
Binary files a/.next/cache/webpack/server-development/0.pack and b/.next/cache/webpack/server-development/0.pack differ
diff --git a/.next/cache/webpack/server-development/1.pack b/.next/cache/webpack/server-development/1.pack
index b73013ad..8238021e 100644
Binary files a/.next/cache/webpack/server-development/1.pack and b/.next/cache/webpack/server-development/1.pack differ
diff --git a/.next/cache/webpack/server-development/10.pack b/.next/cache/webpack/server-development/10.pack
index 2c9b7893..1dc9f6cf 100644
Binary files a/.next/cache/webpack/server-development/10.pack and b/.next/cache/webpack/server-development/10.pack differ
diff --git a/.next/cache/webpack/server-development/2.pack b/.next/cache/webpack/server-development/2.pack
index c3757741..81ebcf60 100644
Binary files a/.next/cache/webpack/server-development/2.pack and b/.next/cache/webpack/server-development/2.pack differ
diff --git a/.next/cache/webpack/server-development/3.pack b/.next/cache/webpack/server-development/3.pack
index 2f87f006..c24d77db 100644
Binary files a/.next/cache/webpack/server-development/3.pack and b/.next/cache/webpack/server-development/3.pack differ
diff --git a/.next/cache/webpack/server-development/4.pack b/.next/cache/webpack/server-development/4.pack
index d535688c..59e57abf 100644
Binary files a/.next/cache/webpack/server-development/4.pack and b/.next/cache/webpack/server-development/4.pack differ
diff --git a/.next/cache/webpack/server-development/5.pack b/.next/cache/webpack/server-development/5.pack
index b8c7e3b3..bf730461 100644
Binary files a/.next/cache/webpack/server-development/5.pack and b/.next/cache/webpack/server-development/5.pack differ
diff --git a/.next/cache/webpack/server-development/7.pack b/.next/cache/webpack/server-development/7.pack
index 7ec4c7e8..d0490fc3 100644
Binary files a/.next/cache/webpack/server-development/7.pack and b/.next/cache/webpack/server-development/7.pack differ
diff --git a/.next/cache/webpack/server-development/9.pack b/.next/cache/webpack/server-development/9.pack
index e829c44d..978cd289 100644
Binary files a/.next/cache/webpack/server-development/9.pack and b/.next/cache/webpack/server-development/9.pack differ
diff --git a/.next/cache/webpack/server-development/index.pack b/.next/cache/webpack/server-development/index.pack
index 57ad3e28..326a6705 100644
Binary files a/.next/cache/webpack/server-development/index.pack and b/.next/cache/webpack/server-development/index.pack differ
diff --git a/.next/cache/webpack/server-development/index.pack.old b/.next/cache/webpack/server-development/index.pack.old
index c0e5aaa5..a68b4b02 100644
Binary files a/.next/cache/webpack/server-development/index.pack.old and b/.next/cache/webpack/server-development/index.pack.old differ
diff --git a/.next/server/middleware-build-manifest.js b/.next/server/middleware-build-manifest.js
index 44b4290d..d1196ce8 100644
--- a/.next/server/middleware-build-manifest.js
+++ b/.next/server/middleware-build-manifest.js
@@ -1 +1 @@
-self.__BUILD_MANIFEST={"polyfillFiles":["static/chunks/polyfills.js"],"devFiles":["static/chunks/react-refresh.js"],"ampDevFiles":["static/chunks/webpack.js","static/chunks/amp.js"],"lowPriorityFiles":["static/development/_buildManifest.js","static/development/_ssgManifest.js"],"rootMainFiles":[],"pages":{"/":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/index.js"],"/_app":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/_app.js"],"/_error":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/_error.js"],"/speed":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/speed.js"]},"ampFirstPages":[]}
\ No newline at end of file
+self.__BUILD_MANIFEST={"polyfillFiles":["static/chunks/polyfills.js"],"devFiles":["static/chunks/react-refresh.js"],"ampDevFiles":["static/chunks/webpack.js","static/chunks/amp.js"],"lowPriorityFiles":["static/development/_buildManifest.js","static/development/_ssgManifest.js"],"rootMainFiles":[],"pages":{"/_app":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/_app.js"],"/_error":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/_error.js"],"/speed":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/speed.js"]},"ampFirstPages":[]}
\ No newline at end of file
diff --git a/.next/server/pages-manifest.json b/.next/server/pages-manifest.json
index 9cec497e..dcb44459 100644
--- a/.next/server/pages-manifest.json
+++ b/.next/server/pages-manifest.json
@@ -2,6 +2,5 @@
"/_app": "pages/_app.js",
"/_error": "pages/_error.js",
"/_document": "pages/_document.js",
- "/": "pages/index.js",
"/speed": "pages/speed.js"
}
\ No newline at end of file
diff --git a/.next/server/pages/bot.js b/.next/server/pages/bot.js
deleted file mode 100644
index 5c13553b..00000000
--- a/.next/server/pages/bot.js
+++ /dev/null
@@ -1,66 +0,0 @@
-"use strict";
-/*
- * ATTENTION: An "eval-source-map" devtool has been used.
- * This devtool is neither made for production nor for readable output files.
- * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
- * or disable the default devtool with "devtool: false".
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
- */
-(() => {
-var exports = {};
-exports.id = "pages/bot";
-exports.ids = ["pages/bot"];
-exports.modules = {
-
-/***/ "./components/article.js":
-/*!*******************************!*\
- !*** ./components/article.js ***!
- \*******************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Article\": () => (/* binding */ Article)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/head */ \"next/head\");\n/* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_head__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction Article({ title , html }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_head__WEBPACK_IMPORTED_MODULE_1___default()), {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 7,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 6,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 9,\n columnNumber: 7\n }, this),\n html\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 5,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL2FydGljbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTZCO0FBRXRCLFNBQVNDLFFBQVEsRUFBRUMsTUFBSyxFQUFFQyxLQUFJLEVBQUUsRUFBRTtJQUN2QyxxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNMLGtEQUFJQTswQkFDSCw0RUFBQ0U7OEJBQU9BOzs7Ozs7Ozs7OzswQkFFViw4REFBQ0k7MEJBQUlKOzs7Ozs7WUFDSkM7Ozs7Ozs7QUFHUCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdGtwYWdlLy4vY29tcG9uZW50cy9hcnRpY2xlLmpzP2IzMmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEhlYWQgZnJvbSAnbmV4dC9oZWFkJztcblxuZXhwb3J0IGZ1bmN0aW9uIEFydGljbGUoeyB0aXRsZSwgaHRtbCB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkXCI+XG4gICAgICA8SGVhZD5cbiAgICAgICAgPHRpdGxlPnt0aXRsZX08L3RpdGxlPlxuICAgICAgPC9IZWFkPlxuICAgICAgPGgxPnt0aXRsZX08L2gxPlxuICAgICAge2h0bWx9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiSGVhZCIsIkFydGljbGUiLCJ0aXRsZSIsImh0bWwiLCJkaXYiLCJjbGFzc05hbWUiLCJoMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/article.js\n");
-
-/***/ }),
-
-/***/ "./pages/bot.js":
-/*!**********************!*\
- !*** ./pages/bot.js ***!
- \**********************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_article__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/article */ \"./components/article.js\");\n\n\nfunction Notes() {\n const note = {\n title: \"On Telegram bot development\",\n html: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n children: \"Why\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 8,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"As you may have noticed, I like taking pictures. I also like looking at others pics and encouraging people to make and share them.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 9,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"Since I'm somewhat active in the Nerdsbay community, I have decided to create a telegram channel for people to share their photos. No discussions, just photos.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 13,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"But immediately, there is a problem - how do I let people send their images to the channel - obviously, I'd like to be able to either approve or reject those pics.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 18,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n children: \"Let's start\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 23,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"So, we need a public channel, a private group where people will be able to approve images and a bot which will forward messages from the user to that group and then to the channel.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 24,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: [\n \"To create a bot, you have to interact with the\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"https://t.me/BotFather\",\n children: \"bot father\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 31,\n columnNumber: 11\n }, this),\n \" - this is pretty straight-forward and I'm gonna skip it here.\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 29,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"We'll be using node.js, let's start with adding a couple of packages we'll need.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"pre\", {\n className: \"crt\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"language-javascript\",\n children: \"npm install node-telegram-bot-api\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 39,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 38,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"pre\", {\n className: \"crt\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"language-javascript\",\n children: \"npm install locallydb\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 44,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 43,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: 'The 1st one is the api that we\\'re going to use to interact with the bot, the 2nd - a rather dumb \"database\".'\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 46,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: 'The api works pretty much like a web socket - it starts polling and lets you to subscribe to some events. First of all, we need a \"photo\" event.'\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 50,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"pre\", {\n className: \"crt\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"language-javascript\",\n children: `\r\nconst bot = new TelegramBot(token, { polling: true });\r\n\r\nbot.on('photo', (msg) => {});\r\n `\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 56,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 55,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"All the files are stored by telegram separately, so we don't actually need to download it - only memorize it's \\\"file_unique_id\\\". Let's save it to the collection:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 62,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"pre\", {\n className: \"crt\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"language-javascript\",\n children: `\r\nchatsArray.insert({\r\n user: msg.chat.id,\r\n fileId: msg.photo[0].file_unique_id,\r\n msgId: msg.message_id,\r\n});`\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 68,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 67,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"We're going to need the id of this chat to be able to respond to the user, who sent the picture.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 77,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"Now we need to forward this message to the admin group, this is pretty straightforward as well.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 81,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"pre\", {\n className: \"crt\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"language-javascript\",\n children: \"bot.forwardMessage(groupID, msg.chat.id, msg.message_id);\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 86,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 85,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"Next, the bot needs to react to the message in that group and forward the message to the channel and additionally notify the original sender that their picture has been approved (or not).\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 90,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"This is why we have saved the user id into the array - in some cases, a user can hide their username on forwarded messages - the only way to trace the user back is by the file uniq id .\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 95,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"pre\", {\n className: \"crt\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"language-javascript\",\n children: `\r\nbot.onText(/ok\\\\s?(.*)/, (msg, match) => {\r\n const comment = match[1]; // the captured \"comment\"\r\n bot.forwardMessage(channelID, msg.chat.id, msg.reply_to_message.message_id); // forwarding to the channel\r\n const savedUser = getUserByFile(fileId);\r\n bot.sendMessage(\r\n savedUser.user,\r\n 'we have approved your photo',\r\n {\r\n reply_to_message_id: savedUser.msgId,\r\n },\r\n );\r\n ...\r\nconst getUserByFile = (fileId) => {\r\n const list = chatsArray.where({ fileId });\r\n if (list.length() === 0) {\r\n return null;\r\n }\r\n\r\n return list.items[0];\r\n};\r\n `\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 101,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 100,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: 'Here the bot reacts to a message that matches the regexp (i.e. messages like \"ok we like it\") if this message came as a reply to the photo in the group.'\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 124,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"Additionally, you may want to check that this reply is indeed in the group or it has some approved users in it.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 129,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n children: \"That's it\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 133,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: [\n \"You may see this code here:\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"https://github.com/k-one-o-two/img-bot\",\n children: \"on Github.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 136,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 134,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n children: \"Wait, how do I run it?\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 138,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"The good thing is that you don't need any domain or even a static IP to host this bot backend. But if you're unhappy with running it on your machine, there's a great option.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 139,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: [\n \"You can obtain an\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"https://www.oracle.com/cloud/free/\",\n children: \"Oracle free tier\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 146,\n columnNumber: 11\n }, this),\n \" \",\n \"virtual machine. On which you can install any OS you like.\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 144,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: [\n \"After trying several options to run my little node script and detach it from the ssh terminal, I've found out that\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"https://www.npmjs.com/package/forever\",\n children: \"forever\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 152,\n columnNumber: 11\n }, this),\n \" works nest for me.\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 149,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"So, install it and run your script:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 155,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"pre\", {\n className: \"crt\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"language-javascript\",\n children: \"npm install -g forever && forever start ./app.js\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 157,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 156,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n children: \"Done\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 161,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: \"In case you'd need a telegram bot for something, you now know how to start!\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 162,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 7,\n columnNumber: 7\n }, this)\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_article__WEBPACK_IMPORTED_MODULE_1__.Article, {\n title: note.title,\n html: note.html\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\pages\\\\bot.js\",\n lineNumber: 170,\n columnNumber: 10\n }, this);\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notes);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWdlcy9ib3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBZ0Q7QUFFaEQsU0FBU0MsUUFBUTtJQUNmLE1BQU1DLE9BQU87UUFDWEMsT0FBTztRQUNQQyxvQkFDRSw4REFBQ0M7OzhCQUNDLDhEQUFDQzs4QkFBRzs7Ozs7OzhCQUNKLDhEQUFDQzs4QkFBRTs7Ozs7OzhCQUlILDhEQUFDQTs4QkFBRTs7Ozs7OzhCQUtILDhEQUFDQTs4QkFBRTs7Ozs7OzhCQUtILDhEQUFDRDs4QkFBRzs7Ozs7OzhCQUNKLDhEQUFDQzs4QkFBRTs7Ozs7OzhCQUtILDhEQUFDQTs7d0JBQUU7d0JBQzhDO3NDQUMvQyw4REFBQ0M7NEJBQUVDLE1BQUs7c0NBQXlCOzs7Ozs7d0JBQWM7Ozs7Ozs7OEJBR2pELDhEQUFDRjs4QkFBRTs7Ozs7OzhCQUlILDhEQUFDRztvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0M7d0JBQUtELFdBQVU7a0NBQXNCOzs7Ozs7Ozs7Ozs4QkFJeEMsOERBQUNEO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDQzt3QkFBS0QsV0FBVTtrQ0FBc0I7Ozs7Ozs7Ozs7OzhCQUV4Qyw4REFBQ0o7OEJBQUU7Ozs7Ozs4QkFJSCw4REFBQ0E7OEJBQUU7Ozs7Ozs4QkFLSCw4REFBQ0c7b0JBQUlDLFdBQVU7OEJBQ2IsNEVBQUNDO3dCQUFLRCxXQUFVO2tDQUF1QixDQUFDOzs7O1lBSXRDLENBQUM7Ozs7Ozs7Ozs7OzhCQUVMLDhEQUFDSjs4QkFBRTs7Ozs7OzhCQUtILDhEQUFDRztvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0M7d0JBQUtELFdBQVU7a0NBQ2IsQ0FBQzs7Ozs7R0FLWCxDQUFDOzs7Ozs7Ozs7Ozs4QkFHSSw4REFBQ0o7OEJBQUU7Ozs7Ozs4QkFJSCw4REFBQ0E7OEJBQUU7Ozs7Ozs4QkFJSCw4REFBQ0c7b0JBQUlDLFdBQVU7OEJBQ2IsNEVBQUNDO3dCQUFLRCxXQUFVO2tDQUFzQjs7Ozs7Ozs7Ozs7OEJBSXhDLDhEQUFDSjs4QkFBRTs7Ozs7OzhCQUtILDhEQUFDQTs4QkFBRTs7Ozs7OzhCQUtILDhEQUFDRztvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0M7d0JBQUtELFdBQVU7a0NBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQXFCMUMsQ0FBQzs7Ozs7Ozs7Ozs7OEJBRUQsOERBQUNKOzhCQUFFOzs7Ozs7OEJBS0gsOERBQUNBOzhCQUFFOzs7Ozs7OEJBSUgsOERBQUNEOzhCQUFHOzs7Ozs7OEJBQ0osOERBQUNDOzt3QkFBRTt3QkFDMkI7c0NBQzVCLDhEQUFDQzs0QkFBRUMsTUFBSztzQ0FBeUM7Ozs7Ozs7Ozs7Ozs4QkFFbkQsOERBQUNIOzhCQUFHOzs7Ozs7OEJBQ0osOERBQUNDOzhCQUFFOzs7Ozs7OEJBS0gsOERBQUNBOzt3QkFBRTt3QkFDaUI7c0NBQ2xCLDhEQUFDQzs0QkFBRUMsTUFBSztzQ0FBcUM7Ozs7Ozt3QkFBcUI7d0JBQUk7Ozs7Ozs7OEJBR3hFLDhEQUFDRjs7d0JBQUU7d0JBRTZDO3NDQUM5Qyw4REFBQ0M7NEJBQUVDLE1BQUs7c0NBQXdDOzs7Ozs7d0JBQVc7Ozs7Ozs7OEJBRzdELDhEQUFDRjs4QkFBRTs7Ozs7OzhCQUNILDhEQUFDRztvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0M7d0JBQUtELFdBQVU7a0NBQXNCOzs7Ozs7Ozs7Ozs4QkFJeEMsOERBQUNMOzhCQUFHOzs7Ozs7OEJBQ0osOERBQUNDOzhCQUFFOzs7Ozs7Ozs7Ozs7SUFNVDtJQUVBLHFCQUFPLDhEQUFDUCx3REFBT0E7UUFBQ0csT0FBT0QsS0FBS0MsS0FBSztRQUFFQyxNQUFNRixLQUFLRSxJQUFJOzs7Ozs7QUFDcEQ7QUFFQSxpRUFBZUgsS0FBS0EsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3RrcGFnZS8uL3BhZ2VzL2JvdC5qcz9kZTE4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFydGljbGUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9hcnRpY2xlXCI7XHJcblxyXG5mdW5jdGlvbiBOb3RlcygpIHtcclxuICBjb25zdCBub3RlID0ge1xyXG4gICAgdGl0bGU6IFwiT24gVGVsZWdyYW0gYm90IGRldmVsb3BtZW50XCIsXHJcbiAgICBodG1sOiAoXHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGgzPldoeTwvaDM+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBBcyB5b3UgbWF5IGhhdmUgbm90aWNlZCwgSSBsaWtlIHRha2luZyBwaWN0dXJlcy4gSSBhbHNvIGxpa2UgbG9va2luZ1xyXG4gICAgICAgICAgYXQgb3RoZXJzIHBpY3MgYW5kIGVuY291cmFnaW5nIHBlb3BsZSB0byBtYWtlIGFuZCBzaGFyZSB0aGVtLlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cD5cclxuICAgICAgICAgIFNpbmNlIEknbSBzb21ld2hhdCBhY3RpdmUgaW4gdGhlIE5lcmRzYmF5IGNvbW11bml0eSwgSSBoYXZlIGRlY2lkZWQgdG9cclxuICAgICAgICAgIGNyZWF0ZSBhIHRlbGVncmFtIGNoYW5uZWwgZm9yIHBlb3BsZSB0byBzaGFyZSB0aGVpciBwaG90b3MuIE5vXHJcbiAgICAgICAgICBkaXNjdXNzaW9ucywganVzdCBwaG90b3MuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwPlxyXG4gICAgICAgICAgQnV0IGltbWVkaWF0ZWx5LCB0aGVyZSBpcyBhIHByb2JsZW0gLSBob3cgZG8gSSBsZXQgcGVvcGxlIHNlbmQgdGhlaXJcclxuICAgICAgICAgIGltYWdlcyB0byB0aGUgY2hhbm5lbCAtIG9idmlvdXNseSwgSSdkIGxpa2UgdG8gYmUgYWJsZSB0byBlaXRoZXJcclxuICAgICAgICAgIGFwcHJvdmUgb3IgcmVqZWN0IHRob3NlIHBpY3MuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxoMz5MZXQncyBzdGFydDwvaDM+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBTbywgd2UgbmVlZCBhIHB1YmxpYyBjaGFubmVsLCBhIHByaXZhdGUgZ3JvdXAgd2hlcmUgcGVvcGxlIHdpbGwgYmVcclxuICAgICAgICAgIGFibGUgdG8gYXBwcm92ZSBpbWFnZXMgYW5kIGEgYm90IHdoaWNoIHdpbGwgZm9yd2FyZCBtZXNzYWdlcyBmcm9tIHRoZVxyXG4gICAgICAgICAgdXNlciB0byB0aGF0IGdyb3VwIGFuZCB0aGVuIHRvIHRoZSBjaGFubmVsLlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cD5cclxuICAgICAgICAgIFRvIGNyZWF0ZSBhIGJvdCwgeW91IGhhdmUgdG8gaW50ZXJhY3Qgd2l0aCB0aGV7XCIgXCJ9XHJcbiAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly90Lm1lL0JvdEZhdGhlclwiPmJvdCBmYXRoZXI8L2E+IC0gdGhpcyBpcyBwcmV0dHlcclxuICAgICAgICAgIHN0cmFpZ2h0LWZvcndhcmQgYW5kIEknbSBnb25uYSBza2lwIGl0IGhlcmUuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwPlxyXG4gICAgICAgICAgV2UnbGwgYmUgdXNpbmcgbm9kZS5qcywgbGV0J3Mgc3RhcnQgd2l0aCBhZGRpbmcgYSBjb3VwbGUgb2YgcGFja2FnZXNcclxuICAgICAgICAgIHdlJ2xsIG5lZWQuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwcmUgY2xhc3NOYW1lPVwiY3J0XCI+XHJcbiAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9XCJsYW5ndWFnZS1qYXZhc2NyaXB0XCI+XHJcbiAgICAgICAgICAgIG5wbSBpbnN0YWxsIG5vZGUtdGVsZWdyYW0tYm90LWFwaVxyXG4gICAgICAgICAgPC9jb2RlPlxyXG4gICAgICAgIDwvcHJlPlxyXG4gICAgICAgIDxwcmUgY2xhc3NOYW1lPVwiY3J0XCI+XHJcbiAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9XCJsYW5ndWFnZS1qYXZhc2NyaXB0XCI+bnBtIGluc3RhbGwgbG9jYWxseWRiPC9jb2RlPlxyXG4gICAgICAgIDwvcHJlPlxyXG4gICAgICAgIDxwPlxyXG4gICAgICAgICAgVGhlIDFzdCBvbmUgaXMgdGhlIGFwaSB0aGF0IHdlJ3JlIGdvaW5nIHRvIHVzZSB0byBpbnRlcmFjdCB3aXRoIHRoZVxyXG4gICAgICAgICAgYm90LCB0aGUgMm5kIC0gYSByYXRoZXIgZHVtYiBcImRhdGFiYXNlXCIuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwPlxyXG4gICAgICAgICAgVGhlIGFwaSB3b3JrcyBwcmV0dHkgbXVjaCBsaWtlIGEgd2ViIHNvY2tldCAtIGl0IHN0YXJ0cyBwb2xsaW5nIGFuZFxyXG4gICAgICAgICAgbGV0cyB5b3UgdG8gc3Vic2NyaWJlIHRvIHNvbWUgZXZlbnRzLiBGaXJzdCBvZiBhbGwsIHdlIG5lZWQgYSBcInBob3RvXCJcclxuICAgICAgICAgIGV2ZW50LlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cHJlIGNsYXNzTmFtZT1cImNydFwiPlxyXG4gICAgICAgICAgPGNvZGUgY2xhc3NOYW1lPVwibGFuZ3VhZ2UtamF2YXNjcmlwdFwiPntgXHJcbmNvbnN0IGJvdCA9IG5ldyBUZWxlZ3JhbUJvdCh0b2tlbiwgeyBwb2xsaW5nOiB0cnVlIH0pO1xyXG5cclxuYm90Lm9uKCdwaG90bycsIChtc2cpID0+IHt9KTtcclxuICAgICAgICAgICAgYH08L2NvZGU+XHJcbiAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBBbGwgdGhlIGZpbGVzIGFyZSBzdG9yZWQgYnkgdGVsZWdyYW0gc2VwYXJhdGVseSwgc28gd2UgZG9uJ3QgYWN0dWFsbHlcclxuICAgICAgICAgIG5lZWQgdG8gZG93bmxvYWQgaXQgLSBvbmx5IG1lbW9yaXplIGl0J3MgXCJmaWxlX3VuaXF1ZV9pZFwiLiBMZXQncyBzYXZlXHJcbiAgICAgICAgICBpdCB0byB0aGUgY29sbGVjdGlvbjpcclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHByZSBjbGFzc05hbWU9XCJjcnRcIj5cclxuICAgICAgICAgIDxjb2RlIGNsYXNzTmFtZT1cImxhbmd1YWdlLWphdmFzY3JpcHRcIj5cclxuICAgICAgICAgICAge2BcclxuY2hhdHNBcnJheS5pbnNlcnQoe1xyXG4gIHVzZXI6IG1zZy5jaGF0LmlkLFxyXG4gIGZpbGVJZDogbXNnLnBob3RvWzBdLmZpbGVfdW5pcXVlX2lkLFxyXG4gIG1zZ0lkOiBtc2cubWVzc2FnZV9pZCxcclxufSk7YH1cclxuICAgICAgICAgIDwvY29kZT5cclxuICAgICAgICA8L3ByZT5cclxuICAgICAgICA8cD5cclxuICAgICAgICAgIFdlJ3JlIGdvaW5nIHRvIG5lZWQgdGhlIGlkIG9mIHRoaXMgY2hhdCB0byBiZSBhYmxlIHRvIHJlc3BvbmQgdG8gdGhlXHJcbiAgICAgICAgICB1c2VyLCB3aG8gc2VudCB0aGUgcGljdHVyZS5cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBOb3cgd2UgbmVlZCB0byBmb3J3YXJkIHRoaXMgbWVzc2FnZSB0byB0aGUgYWRtaW4gZ3JvdXAsIHRoaXMgaXMgcHJldHR5XHJcbiAgICAgICAgICBzdHJhaWdodGZvcndhcmQgYXMgd2VsbC5cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHByZSBjbGFzc05hbWU9XCJjcnRcIj5cclxuICAgICAgICAgIDxjb2RlIGNsYXNzTmFtZT1cImxhbmd1YWdlLWphdmFzY3JpcHRcIj5cclxuICAgICAgICAgICAgYm90LmZvcndhcmRNZXNzYWdlKGdyb3VwSUQsIG1zZy5jaGF0LmlkLCBtc2cubWVzc2FnZV9pZCk7XHJcbiAgICAgICAgICA8L2NvZGU+XHJcbiAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBOZXh0LCB0aGUgYm90IG5lZWRzIHRvIHJlYWN0IHRvIHRoZSBtZXNzYWdlIGluIHRoYXQgZ3JvdXAgYW5kIGZvcndhcmRcclxuICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIHRoZSBjaGFubmVsIGFuZCBhZGRpdGlvbmFsbHkgbm90aWZ5IHRoZSBvcmlnaW5hbCBzZW5kZXJcclxuICAgICAgICAgIHRoYXQgdGhlaXIgcGljdHVyZSBoYXMgYmVlbiBhcHByb3ZlZCAob3Igbm90KS5cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBUaGlzIGlzIHdoeSB3ZSBoYXZlIHNhdmVkIHRoZSB1c2VyIGlkIGludG8gdGhlIGFycmF5IC0gaW4gc29tZSBjYXNlcyxcclxuICAgICAgICAgIGEgdXNlciBjYW4gaGlkZSB0aGVpciB1c2VybmFtZSBvbiBmb3J3YXJkZWQgbWVzc2FnZXMgLSB0aGUgb25seSB3YXkgdG9cclxuICAgICAgICAgIHRyYWNlIHRoZSB1c2VyIGJhY2sgaXMgYnkgdGhlIGZpbGUgdW5pcSBpZCAuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwcmUgY2xhc3NOYW1lPVwiY3J0XCI+XHJcbiAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9XCJsYW5ndWFnZS1qYXZhc2NyaXB0XCI+e2BcclxuYm90Lm9uVGV4dCgvb2tcXFxccz8oLiopLywgKG1zZywgbWF0Y2gpID0+IHtcclxuICBjb25zdCBjb21tZW50ID0gbWF0Y2hbMV07IC8vIHRoZSBjYXB0dXJlZCBcImNvbW1lbnRcIlxyXG4gIGJvdC5mb3J3YXJkTWVzc2FnZShjaGFubmVsSUQsIG1zZy5jaGF0LmlkLCBtc2cucmVwbHlfdG9fbWVzc2FnZS5tZXNzYWdlX2lkKTsgLy8gZm9yd2FyZGluZyB0byB0aGUgY2hhbm5lbFxyXG4gIGNvbnN0IHNhdmVkVXNlciA9IGdldFVzZXJCeUZpbGUoZmlsZUlkKTtcclxuICBib3Quc2VuZE1lc3NhZ2UoXHJcbiAgICBzYXZlZFVzZXIudXNlcixcclxuICAgICd3ZSBoYXZlIGFwcHJvdmVkIHlvdXIgcGhvdG8nLFxyXG4gICAge1xyXG4gICAgICByZXBseV90b19tZXNzYWdlX2lkOiBzYXZlZFVzZXIubXNnSWQsXHJcbiAgICB9LFxyXG4gICk7XHJcbiAgLi4uXHJcbmNvbnN0IGdldFVzZXJCeUZpbGUgPSAoZmlsZUlkKSA9PiB7XHJcbiAgY29uc3QgbGlzdCA9IGNoYXRzQXJyYXkud2hlcmUoeyBmaWxlSWQgfSk7XHJcbiAgaWYgKGxpc3QubGVuZ3RoKCkgPT09IDApIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGxpc3QuaXRlbXNbMF07XHJcbn07XHJcbiAgICAgICAgYH08L2NvZGU+XHJcbiAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBIZXJlIHRoZSBib3QgcmVhY3RzIHRvIGEgbWVzc2FnZSB0aGF0IG1hdGNoZXMgdGhlIHJlZ2V4cCAoaS5lLlxyXG4gICAgICAgICAgbWVzc2FnZXMgbGlrZSBcIm9rIHdlIGxpa2UgaXRcIikgaWYgdGhpcyBtZXNzYWdlIGNhbWUgYXMgYSByZXBseSB0byB0aGVcclxuICAgICAgICAgIHBob3RvIGluIHRoZSBncm91cC5cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBtYXkgd2FudCB0byBjaGVjayB0aGF0IHRoaXMgcmVwbHkgaXMgaW5kZWVkIGluIHRoZVxyXG4gICAgICAgICAgZ3JvdXAgb3IgaXQgaGFzIHNvbWUgYXBwcm92ZWQgdXNlcnMgaW4gaXQuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxoMz5UaGF0J3MgaXQ8L2gzPlxyXG4gICAgICAgIDxwPlxyXG4gICAgICAgICAgWW91IG1heSBzZWUgdGhpcyBjb2RlIGhlcmU6e1wiIFwifVxyXG4gICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9rLW9uZS1vLXR3by9pbWctYm90XCI+b24gR2l0aHViLjwvYT5cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPGgzPldhaXQsIGhvdyBkbyBJIHJ1biBpdD88L2gzPlxyXG4gICAgICAgIDxwPlxyXG4gICAgICAgICAgVGhlIGdvb2QgdGhpbmcgaXMgdGhhdCB5b3UgZG9uJ3QgbmVlZCBhbnkgZG9tYWluIG9yIGV2ZW4gYSBzdGF0aWMgSVBcclxuICAgICAgICAgIHRvIGhvc3QgdGhpcyBib3QgYmFja2VuZC4gQnV0IGlmIHlvdSdyZSB1bmhhcHB5IHdpdGggcnVubmluZyBpdCBvblxyXG4gICAgICAgICAgeW91ciBtYWNoaW5lLCB0aGVyZSdzIGEgZ3JlYXQgb3B0aW9uLlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cD5cclxuICAgICAgICAgIFlvdSBjYW4gb2J0YWluIGFue1wiIFwifVxyXG4gICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9yYWNsZS5jb20vY2xvdWQvZnJlZS9cIj5PcmFjbGUgZnJlZSB0aWVyPC9hPntcIiBcIn1cclxuICAgICAgICAgIHZpcnR1YWwgbWFjaGluZS4gT24gd2hpY2ggeW91IGNhbiBpbnN0YWxsIGFueSBPUyB5b3UgbGlrZS5cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICBBZnRlciB0cnlpbmcgc2V2ZXJhbCBvcHRpb25zIHRvIHJ1biBteSBsaXR0bGUgbm9kZSBzY3JpcHQgYW5kIGRldGFjaFxyXG4gICAgICAgICAgaXQgZnJvbSB0aGUgc3NoIHRlcm1pbmFsLCBJJ3ZlIGZvdW5kIG91dCB0aGF0e1wiIFwifVxyXG4gICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2ZvcmV2ZXJcIj5mb3JldmVyPC9hPiB3b3JrcyBuZXN0XHJcbiAgICAgICAgICBmb3IgbWUuXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwPlNvLCBpbnN0YWxsIGl0IGFuZCBydW4geW91ciBzY3JpcHQ6PC9wPlxyXG4gICAgICAgIDxwcmUgY2xhc3NOYW1lPVwiY3J0XCI+XHJcbiAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9XCJsYW5ndWFnZS1qYXZhc2NyaXB0XCI+XHJcbiAgICAgICAgICAgIG5wbSBpbnN0YWxsIC1nIGZvcmV2ZXIgJiYgZm9yZXZlciBzdGFydCAuL2FwcC5qc1xyXG4gICAgICAgICAgPC9jb2RlPlxyXG4gICAgICAgIDwvcHJlPlxyXG4gICAgICAgIDxoMz5Eb25lPC9oMz5cclxuICAgICAgICA8cD5cclxuICAgICAgICAgIEluIGNhc2UgeW91J2QgbmVlZCBhIHRlbGVncmFtIGJvdCBmb3Igc29tZXRoaW5nLCB5b3Ugbm93IGtub3cgaG93IHRvXHJcbiAgICAgICAgICBzdGFydCFcclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKSxcclxuICB9O1xyXG5cclxuICByZXR1cm4gPEFydGljbGUgdGl0bGU9e25vdGUudGl0bGV9IGh0bWw9e25vdGUuaHRtbH0+PC9BcnRpY2xlPjtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTm90ZXM7XHJcbiJdLCJuYW1lcyI6WyJBcnRpY2xlIiwiTm90ZXMiLCJub3RlIiwidGl0bGUiLCJodG1sIiwiZGl2IiwiaDMiLCJwIiwiYSIsImhyZWYiLCJwcmUiLCJjbGFzc05hbWUiLCJjb2RlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./pages/bot.js\n");
-
-/***/ }),
-
-/***/ "next/head":
-/*!****************************!*\
- !*** external "next/head" ***!
- \****************************/
-/***/ ((module) => {
-
-module.exports = require("next/head");
-
-/***/ }),
-
-/***/ "react/jsx-dev-runtime":
-/*!****************************************!*\
- !*** external "react/jsx-dev-runtime" ***!
- \****************************************/
-/***/ ((module) => {
-
-module.exports = require("react/jsx-dev-runtime");
-
-/***/ })
-
-};
-;
-
-// load runtime
-var __webpack_require__ = require("../webpack-runtime.js");
-__webpack_require__.C(exports);
-var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
-var __webpack_exports__ = (__webpack_exec__("./pages/bot.js"));
-module.exports = __webpack_exports__;
-
-})();
\ No newline at end of file
diff --git a/.next/server/pages/index.js b/.next/server/pages/index.js
deleted file mode 100644
index b729eaee..00000000
--- a/.next/server/pages/index.js
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * 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/).
- */
-(() => {
-var exports = {};
-exports.id = "pages/index";
-exports.ids = ["pages/index"];
-exports.modules = {
-
-/***/ "./node_modules/@swc/helpers/lib/_extends.js":
-/*!***************************************************!*\
- !*** ./node_modules/@swc/helpers/lib/_extends.js ***!
- \***************************************************/
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _extends;\n }\n}));\nfunction extends_() {\n extends_ = Object.assign || function(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i];\n for(var key in source){\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return extends_.apply(this, arguments);\n}\nfunction _extends() {\n return extends_.apply(this, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2xpYi9fZXh0ZW5kcy5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDJDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90a3BhZ2UvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2xpYi9fZXh0ZW5kcy5qcz8zOThhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2V4dGVuZHM7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBleHRlbmRzXygpIHtcbiAgICBleHRlbmRzXyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgIGZvcih2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHNvdXJjZSl7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICAgIHJldHVybiBleHRlbmRzXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gICAgcmV0dXJuIGV4dGVuZHNfLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/lib/_extends.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@swc/helpers/lib/_interop_require_default.js":
-/*!*******************************************************************!*\
- !*** ./node_modules/@swc/helpers/lib/_interop_require_default.js ***!
- \*******************************************************************/
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _interopRequireDefault;\n }\n}));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2xpYi9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRiwyQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdGtwYWdlLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9saWIvX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0LmpzPzliN2MiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0O1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/lib/_interop_require_default.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@swc/helpers/lib/_interop_require_wildcard.js":
-/*!********************************************************************!*\
- !*** ./node_modules/@swc/helpers/lib/_interop_require_wildcard.js ***!
- \********************************************************************/
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _interopRequireWildcard;\n }\n}));\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for(var key in obj){\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2xpYi9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsMkNBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3RrcGFnZS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvbGliL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuanM/MDUxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuICAgIHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuICAgIHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKSB7XG4gICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDtcbiAgICB9KShub2RlSW50ZXJvcCk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCk7XG4gICAgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQob2JqKTtcbiAgICB9XG4gICAgdmFyIG5ld09iaiA9IHt9O1xuICAgIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICBmb3IodmFyIGtleSBpbiBvYmope1xuICAgICAgICBpZiAoa2V5ICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG5ld09iai5kZWZhdWx0ID0gb2JqO1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgICBjYWNoZS5zZXQob2JqLCBuZXdPYmopO1xuICAgIH1cbiAgICByZXR1cm4gbmV3T2JqO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/lib/_interop_require_wildcard.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@swc/helpers/lib/_object_without_properties_loose.js":
-/*!***************************************************************************!*\
- !*** ./node_modules/@swc/helpers/lib/_object_without_properties_loose.js ***!
- \***************************************************************************/
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _objectWithoutPropertiesLoose;\n }\n}));\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2xpYi9fb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllc19sb29zZS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDJDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90a3BhZ2UvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2xpYi9fb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllc19sb29zZS5qcz80Y2I5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gICAgdmFyIHRhcmdldCA9IHt9O1xuICAgIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgICB2YXIga2V5LCBpO1xuICAgIGZvcihpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspe1xuICAgICAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/lib/_object_without_properties_loose.js\n");
-
-/***/ }),
-
-/***/ "./components/article.js":
-/*!*******************************!*\
- !*** ./components/article.js ***!
- \*******************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Article\": () => (/* binding */ Article)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/head */ \"next/head\");\n/* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_head__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction Article({ title , html , art }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__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)(\"pre\", {\n style: {\n paddingRight: \"30px\",\n paddingBottom: \"10px\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n children: art\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 6,\n columnNumber: 71\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 6,\n columnNumber: 12\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 6,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_head__WEBPACK_IMPORTED_MODULE_1___default()), {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 8,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 7,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 10,\n columnNumber: 7\n }, this),\n html\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\article.js\",\n lineNumber: 5,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL2FydGljbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTZCO0FBRXRCLFNBQVNDLFFBQVEsRUFBRUMsTUFBSyxFQUFFQyxLQUFJLEVBQUVDLElBQUcsRUFBRSxFQUFFO0lBQzVDLHFCQUNFLDhEQUFDQztRQUFJQyxXQUFVOzswQkFDYiw4REFBQ0Q7MEJBQUksNEVBQUNFO29CQUFJQyxPQUFPO3dCQUFDQyxjQUFjO3dCQUFRQyxlQUFlO29CQUFNOzhCQUFHLDRFQUFDQztrQ0FBTVA7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBQ3ZFLDhEQUFDSixrREFBSUE7MEJBQ0gsNEVBQUNFOzhCQUFPQTs7Ozs7Ozs7Ozs7MEJBRVYsOERBQUNVOzBCQUFJVjs7Ozs7O1lBQ0pDOzs7Ozs7O0FBR1AsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3RrcGFnZS8uL2NvbXBvbmVudHMvYXJ0aWNsZS5qcz9iMzJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBIZWFkIGZyb20gJ25leHQvaGVhZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBBcnRpY2xlKHsgdGl0bGUsIGh0bWwsIGFydCB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkXCI+XG4gICAgICA8ZGl2PjxwcmUgc3R5bGU9e3twYWRkaW5nUmlnaHQ6ICczMHB4JywgcGFkZGluZ0JvdHRvbTogJzEwcHgnfX0+PGNvZGU+e2FydH08L2NvZGU+PC9wcmU+PC9kaXY+XG4gICAgICA8SGVhZD5cbiAgICAgICAgPHRpdGxlPnt0aXRsZX08L3RpdGxlPlxuICAgICAgPC9IZWFkPlxuICAgICAgPGgxPnt0aXRsZX08L2gxPlxuICAgICAge2h0bWx9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsiSGVhZCIsIkFydGljbGUiLCJ0aXRsZSIsImh0bWwiLCJhcnQiLCJkaXYiLCJjbGFzc05hbWUiLCJwcmUiLCJzdHlsZSIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJjb2RlIiwiaDEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/article.js\n");
-
-/***/ }),
-
-/***/ "./components/card.js":
-/*!****************************!*\
- !*** ./components/card.js ***!
- \****************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Card\": () => (/* binding */ Card)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction Card({ title , children , link , art }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: link,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card card-l2\",\n style: {\n display: \"flex\",\n flexWrap: \"wrap\"\n },\n children: [\n /*#__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)(\"pre\", {\n style: {\n paddingRight: \"30px\",\n paddingBottom: \"10px\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n children: art\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\card.js\",\n lineNumber: 10,\n columnNumber: 73\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\card.js\",\n lineNumber: 10,\n columnNumber: 14\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\card.js\",\n lineNumber: 10,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"title\",\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\card.js\",\n lineNumber: 11,\n columnNumber: 14\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"content\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\card.js\",\n lineNumber: 12,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\card.js\",\n lineNumber: 11,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\card.js\",\n lineNumber: 6,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\card.js\",\n lineNumber: 5,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL2NhcmQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNPLFNBQVNBLEtBQUssRUFBRUMsTUFBSyxFQUFFQyxTQUFRLEVBQUVDLEtBQUksRUFBRUMsSUFBRyxFQUFFLEVBQUU7SUFFbkQscUJBQ0UsOERBQUNDO1FBQUVDLE1BQU1IO2tCQUNQLDRFQUFDSTtZQUNDQyxXQUFVO1lBQ1ZDLE9BQU87Z0JBQUNDLFNBQVM7Z0JBQVFDLFVBQVU7WUFBTTs7OEJBRXpDLDhEQUFDSjs4QkFBSSw0RUFBQ0s7d0JBQUlILE9BQU87NEJBQUNJLGNBQWM7NEJBQVFDLGVBQWU7d0JBQU07a0NBQUcsNEVBQUNDO3NDQUFNWDs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFDdkUsOERBQUNHOztzQ0FBSSw4REFBQ1M7NEJBQUdSLFdBQVU7c0NBQVNQOzs7Ozs7c0NBQzVCLDhEQUFDTTs0QkFBSUMsV0FBVTtzQ0FBV047Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSWxDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90a3BhZ2UvLi9jb21wb25lbnRzL2NhcmQuanM/NDBiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IGZ1bmN0aW9uIENhcmQoeyB0aXRsZSwgY2hpbGRyZW4sIGxpbmssIGFydCB9KSB7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8YSBocmVmPXtsaW5rfT5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT1cImNhcmQgY2FyZC1sMlwiXHJcbiAgICAgICAgc3R5bGU9e3tkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCd9fVxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdj48cHJlIHN0eWxlPXt7cGFkZGluZ1JpZ2h0OiAnMzBweCcsIHBhZGRpbmdCb3R0b206ICcxMHB4J319Pjxjb2RlPnthcnR9PC9jb2RlPjwvcHJlPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PGgyIGNsYXNzTmFtZT1cInRpdGxlXCI+e3RpdGxlfTwvaDI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50XCI+e2NoaWxkcmVufTwvZGl2PjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYT5cclxuICApO1xyXG59XHJcblxyXG4iXSwibmFtZXMiOlsiQ2FyZCIsInRpdGxlIiwiY2hpbGRyZW4iLCJsaW5rIiwiYXJ0IiwiYSIsImhyZWYiLCJkaXYiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJmbGV4V3JhcCIsInByZSIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJjb2RlIiwiaDIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/card.js\n");
-
-/***/ }),
-
-/***/ "./components/noteImage.js":
-/*!*********************************!*\
- !*** ./components/noteImage.js ***!
- \*********************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"NoteImage\": () => (/* binding */ NoteImage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/image */ \"./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction NoteImage({ src }) {\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 style: {\n position: \"relative\",\n height: \"400px\",\n cursor: \"pointer\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n popovertarget: `pop_${src}`,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_1___default()), {\n src: src,\n alt: \"Image\",\n fill: true,\n style: {\n objectFit: \"contain\"\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\noteImage.js\",\n lineNumber: 8,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\noteImage.js\",\n lineNumber: 7,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\noteImage.js\",\n lineNumber: 6,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n id: `pop_${src}`,\n className: \"img-dialog\",\n popover: \"auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"dlg-header\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n style: {\n color: \"white\"\n },\n children: src\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\noteImage.js\",\n lineNumber: 21,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"close-btn\",\n popovertarget: `pop_${src}`,\n popovertargetaction: \"hide\",\n children: \"close\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\noteImage.js\",\n lineNumber: 22,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\noteImage.js\",\n lineNumber: 20,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"img-container\",\n style: {\n background: `url(${src}) no-repeat 50% 50%`,\n backgroundSize: \"contain\"\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\noteImage.js\",\n lineNumber: 31,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\k102\\\\Documents\\\\workspace\\\\tkPage\\\\components\\\\noteImage.js\",\n lineNumber: 19,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL25vdGVJbWFnZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0I7QUFFeEIsU0FBU0MsVUFBVSxFQUFFQyxJQUFHLEVBQUUsRUFBRTtJQUNqQyxxQkFDRTs7MEJBQ0UsOERBQUNDO2dCQUFJQyxPQUFPO29CQUFFQyxVQUFVO29CQUFZQyxRQUFRO29CQUFTQyxRQUFRO2dCQUFVOzBCQUNyRSw0RUFBQ0M7b0JBQU9DLGVBQWUsQ0FBQyxJQUFJLEVBQUVQLElBQUksQ0FBQzs4QkFDakMsNEVBQUNGLG1EQUFLQTt3QkFDSkUsS0FBS0E7d0JBQ0xRLEtBQUk7d0JBQ0pDLElBQUk7d0JBQ0pQLE9BQU87NEJBQ0xRLFdBQVc7d0JBQ2I7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBS04sOERBQUNUO2dCQUFJVSxJQUFJLENBQUMsSUFBSSxFQUFFWCxJQUFJLENBQUM7Z0JBQUVZLFdBQVU7Z0JBQWFDLFNBQVE7O2tDQUNwRCw4REFBQ1o7d0JBQUlXLFdBQVU7OzBDQUNiLDhEQUFDRTtnQ0FBRVosT0FBTztvQ0FBRWEsT0FBTztnQ0FBUTswQ0FBSWY7Ozs7OzswQ0FDL0IsOERBQUNNO2dDQUNDTSxXQUFVO2dDQUNWTCxlQUFlLENBQUMsSUFBSSxFQUFFUCxJQUFJLENBQUM7Z0NBQzNCZ0IscUJBQW9COzBDQUNyQjs7Ozs7Ozs7Ozs7O2tDQUtILDhEQUFDZjt3QkFDQ1csV0FBVTt3QkFDVlYsT0FBTzs0QkFDTGUsWUFBWSxDQUFDLElBQUksRUFBRWpCLElBQUksbUJBQW1CLENBQUM7NEJBQzNDa0IsZ0JBQWdCO3dCQUNsQjs7Ozs7Ozs7Ozs7Ozs7QUFLVixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdGtwYWdlLy4vY29tcG9uZW50cy9ub3RlSW1hZ2UuanM/NWRjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSW1hZ2UgZnJvbSAnbmV4dC9pbWFnZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTm90ZUltYWdlKHsgc3JjIH0pIHtcclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgaGVpZ2h0OiAnNDAwcHgnLCBjdXJzb3I6ICdwb2ludGVyJyB9fT5cclxuICAgICAgICA8YnV0dG9uIHBvcG92ZXJ0YXJnZXQ9e2Bwb3BfJHtzcmN9YH0+XHJcbiAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgc3JjPXtzcmN9XHJcbiAgICAgICAgICAgIGFsdD1cIkltYWdlXCJcclxuICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgIG9iamVjdEZpdDogJ2NvbnRhaW4nLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGlkPXtgcG9wXyR7c3JjfWB9IGNsYXNzTmFtZT1cImltZy1kaWFsb2dcIiBwb3BvdmVyPVwiYXV0b1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGxnLWhlYWRlclwiPlxyXG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICd3aGl0ZScgfX0+e3NyY308L3A+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImNsb3NlLWJ0blwiXHJcbiAgICAgICAgICAgIHBvcG92ZXJ0YXJnZXQ9e2Bwb3BfJHtzcmN9YH1cclxuICAgICAgICAgICAgcG9wb3ZlcnRhcmdldGFjdGlvbj1cImhpZGVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBjbG9zZVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT1cImltZy1jb250YWluZXJcIlxyXG4gICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogYHVybCgke3NyY30pIG5vLXJlcGVhdCA1MCUgNTAlYCxcclxuICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb250YWluJyxcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvPlxyXG4gICk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIkltYWdlIiwiTm90ZUltYWdlIiwic3JjIiwiZGl2Iiwic3R5bGUiLCJwb3NpdGlvbiIsImhlaWdodCIsImN1cnNvciIsImJ1dHRvbiIsInBvcG92ZXJ0YXJnZXQiLCJhbHQiLCJmaWxsIiwib2JqZWN0Rml0IiwiaWQiLCJjbGFzc05hbWUiLCJwb3BvdmVyIiwicCIsImNvbG9yIiwicG9wb3ZlcnRhcmdldGFjdGlvbiIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kU2l6ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/noteImage.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/next/dist/client/image.js":
-/*!************************************************!*\
- !*** ./node_modules/next/dist/client/image.js ***!
- \************************************************/
-/***/ ((module, exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\"use client\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports[\"default\"] = void 0;\nvar _extends = (__webpack_require__(/*! @swc/helpers/lib/_extends.js */ \"./node_modules/@swc/helpers/lib/_extends.js\")[\"default\"]);\nvar _interop_require_default = (__webpack_require__(/*! @swc/helpers/lib/_interop_require_default.js */ \"./node_modules/@swc/helpers/lib/_interop_require_default.js\")[\"default\"]);\nvar _interop_require_wildcard = (__webpack_require__(/*! @swc/helpers/lib/_interop_require_wildcard.js */ \"./node_modules/@swc/helpers/lib/_interop_require_wildcard.js\")[\"default\"]);\nvar _object_without_properties_loose = (__webpack_require__(/*! @swc/helpers/lib/_object_without_properties_loose.js */ \"./node_modules/@swc/helpers/lib/_object_without_properties_loose.js\")[\"default\"]);\nvar _react = _interop_require_wildcard(__webpack_require__(/*! react */ \"react\"));\nvar _head = _interop_require_default(__webpack_require__(/*! ../shared/lib/head */ \"./node_modules/next/dist/shared/lib/head.js\"));\nvar _imageBlurSvg = __webpack_require__(/*! ../shared/lib/image-blur-svg */ \"../shared/lib/image-blur-svg\");\nvar _imageConfig = __webpack_require__(/*! ../shared/lib/image-config */ \"../shared/lib/image-config\");\nvar _imageConfigContext = __webpack_require__(/*! ../shared/lib/image-config-context */ \"../shared/lib/image-config-context\");\nvar _warnOnce = __webpack_require__(/*! ../shared/lib/utils/warn-once */ \"./utils/warn-once\");\nvar _imageLoader = _interop_require_default(__webpack_require__(/*! next/dist/shared/lib/image-loader */ \"next/dist/shared/lib/image-loader\"));\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\":true,\"domains\":[],\"remotePatterns\":[]};\nconst allImgs = new Map();\nlet perfObserver;\nif (true) {\n globalThis.__NEXT_IMAGE_IMPORTED = true;\n}\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({ deviceSizes , allSizes }, width, sizes) {\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({ config , src , unoptimized , width , quality , sizes , loader }) {\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 === \"number\" || typeof x === \"undefined\") {\n return x;\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.parentNode) {\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(_extends({}, 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}\nconst ImageElement = /*#__PURE__*/ (0, _react).forwardRef((_param, forwardedRef)=>{\n var { imgAttributes , heightInt , widthInt , qualityInt , className , imgStyle , blurStyle , isLazy , fill , placeholder , loading , srcString , config , unoptimized , loader , onLoadRef , onLoadingCompleteRef , setBlurComplete , setShowAltText , onLoad , onError } = _param, rest = _object_without_properties_loose(_param, [\n \"imgAttributes\",\n \"heightInt\",\n \"widthInt\",\n \"qualityInt\",\n \"className\",\n \"imgStyle\",\n \"blurStyle\",\n \"isLazy\",\n \"fill\",\n \"placeholder\",\n \"loading\",\n \"srcString\",\n \"config\",\n \"unoptimized\",\n \"loader\",\n \"onLoadRef\",\n \"onLoadingCompleteRef\",\n \"setBlurComplete\",\n \"setShowAltText\",\n \"onLoad\",\n \"onError\"\n ]);\n loading = isLazy ? \"lazy\" : loading;\n return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(\"img\", Object.assign({}, rest, imgAttributes, {\n width: widthInt,\n height: heightInt,\n decoding: \"async\",\n \"data-nimg\": fill ? \"fill\" : \"1\",\n className: className,\n // @ts-ignore - TODO: upgrade to `@types/react@17`\n loading: loading,\n style: _extends({}, imgStyle, blurStyle),\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});\nconst Image = /*#__PURE__*/ (0, _react).forwardRef((_param, forwardedRef)=>{\n var { src , sizes , unoptimized =false , priority =false , loading , className , quality , width , height , fill , style , onLoad , onLoadingComplete , placeholder =\"empty\" , blurDataURL , layout , objectFit , objectPosition , lazyBoundary , lazyRoot } = _param, all = _object_without_properties_loose(_param, [\n \"src\",\n \"sizes\",\n \"unoptimized\",\n \"priority\",\n \"loading\",\n \"className\",\n \"quality\",\n \"width\",\n \"height\",\n \"fill\",\n \"style\",\n \"onLoad\",\n \"onLoadingComplete\",\n \"placeholder\",\n \"blurDataURL\",\n \"layout\",\n \"objectFit\",\n \"objectPosition\",\n \"lazyBoundary\",\n \"lazyRoot\"\n ]);\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 _extends({}, 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 var _tmp;\n _tmp = (obj)=>{\n const { config: _ } = obj, opts = _object_without_properties_loose(obj, [\n \"config\"\n ]);\n return customImageLoader(opts);\n }, loader = _tmp, _tmp;\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 = _extends({}, style, layoutStyle);\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.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 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 (!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 (false) {}\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 })}\")`\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 (false) {}\n }\n const linkProps = {\n // @ts-expect-error upgrade react types to react 18\n imageSrcSet: imgAttributes.srcSet,\n imageSizes: imgAttributes.sizes,\n crossOrigin: rest.crossOrigin\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 = _extends({\n isLazy,\n imgAttributes,\n heightInt,\n widthInt,\n qualityInt,\n className,\n imgStyle,\n blurStyle,\n loading,\n config,\n fill,\n unoptimized,\n placeholder,\n loader,\n srcString,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n setShowAltText\n }, rest);\n return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(ImageElement, Object.assign({}, 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\", Object.assign({\n key: \"__nimg-\" + imgAttributes.src + imgAttributes.srcSet + imgAttributes.sizes,\n rel: \"preload\",\n as: \"image\",\n href: imgAttributes.srcSet ? undefined : imgAttributes.src\n }, linkProps))) : null);\n});\nvar _default = Image;\nexports[\"default\"] = _default;\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\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9pbWFnZS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFDYTtBQURiO0FBRUFBLDhDQUE2QztJQUN6Q0csT0FBTyxJQUFJO0FBQ2YsQ0FBQyxFQUFDO0FBQ0ZELGtCQUFlLEdBQUcsS0FBSztBQUN2QixJQUFJRyxXQUFXQyxtSEFBK0M7QUFDOUQsSUFBSUMsMkJBQTJCRCxtSkFBK0Q7QUFDOUYsSUFBSUUsNEJBQTRCRixxSkFBZ0U7QUFDaEcsSUFBSUcsbUNBQW1DSCxtS0FBdUU7QUFDOUcsSUFBSUksU0FBU0YsMEJBQTBCRixtQkFBT0EsQ0FBQyxvQkFBTztBQUN0RCxJQUFJSyxRQUFRSix5QkFBeUJELG1CQUFPQSxDQUFDLHVFQUFvQjtBQUNqRSxJQUFJTSxnQkFBZ0JOLG1CQUFPQSxDQUFDLGtFQUE4QjtBQUMxRCxJQUFJTyxlQUFlUCxtQkFBT0EsQ0FBQyw4REFBNEI7QUFDdkQsSUFBSVEsc0JBQXNCUixtQkFBT0EsQ0FBQyw4RUFBb0M7QUFDdEUsSUFBSVMsWUFBWVQsbUJBQU9BLENBQUMsd0RBQStCO0FBQ3ZELElBQUlVLGVBQWVULHlCQUF5QkQsbUJBQU9BLENBQUMsNEVBQW1DO0FBRXZGLE1BQU1XLFlBQVlDLHlOQUE2QjtBQUMvQyxNQUFNRyxVQUFVLElBQUlDO0FBQ3BCLElBQUlDO0FBQ0osSUFBSSxJQUFrQixFQUFhO0lBQy9CQyxXQUFXQyxxQkFBcUIsR0FBRyxJQUFJO0FBQzNDLENBQUM7QUFDRCxNQUFNQyx1QkFBdUI7SUFDekI7SUFDQTtJQUNBQztDQUNIO0FBQ0QsU0FBU0MsZ0JBQWdCQyxHQUFHLEVBQUU7SUFDMUIsT0FBT0EsSUFBSXpCLE9BQU8sS0FBS3VCO0FBQzNCO0FBQ0EsU0FBU0csa0JBQWtCRCxHQUFHLEVBQUU7SUFDNUIsT0FBT0EsSUFBSUEsR0FBRyxLQUFLRjtBQUN2QjtBQUNBLFNBQVNJLGVBQWVGLEdBQUcsRUFBRTtJQUN6QixPQUFPLE9BQU9BLFFBQVEsWUFBYUQsQ0FBQUEs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ZXh0L2Rpc3QvY2xpZW50L2ltYWdlLmpzPzgyZjYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZXh0ZW5kcyA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvbGliL19leHRlbmRzLmpzXCIpLmRlZmF1bHQ7XG52YXIgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9saWIvX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0LmpzXCIpLmRlZmF1bHQ7XG52YXIgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvbGliL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuanNcIikuZGVmYXVsdDtcbnZhciBfb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllc19sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvbGliL19vYmplY3Rfd2l0aG91dF9wcm9wZXJ0aWVzX2xvb3NlLmpzXCIpLmRlZmF1bHQ7XG52YXIgX3JlYWN0ID0gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9oZWFkID0gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0KHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2hlYWRcIikpO1xudmFyIF9pbWFnZUJsdXJTdmcgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9pbWFnZS1ibHVyLXN2Z1wiKTtcbnZhciBfaW1hZ2VDb25maWcgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9pbWFnZS1jb25maWdcIik7XG52YXIgX2ltYWdlQ29uZmlnQ29udGV4dCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZy1jb250ZXh0XCIpO1xudmFyIF93YXJuT25jZSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3V0aWxzL3dhcm4tb25jZVwiKTtcbnZhciBfaW1hZ2VMb2FkZXIgPSBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQocmVxdWlyZShcIm5leHQvZGlzdC9zaGFyZWQvbGliL2ltYWdlLWxvYWRlclwiKSk7XG5cbmNvbnN0IGNvbmZpZ0VudiA9IHByb2Nlc3MuZW52Ll9fTkVYVF9JTUFHRV9PUFRTO1xuY29uc3QgYWxsSW1ncyA9IG5ldyBNYXAoKTtcbmxldCBwZXJmT2JzZXJ2ZXI7XG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBnbG9iYWxUaGlzLl9fTkVYVF9JTUFHRV9JTVBPUlRFRCA9IHRydWU7XG59XG5jb25zdCBWQUxJRF9MT0FESU5HX1ZBTFVFUyA9IFtcbiAgICAnbGF6eScsXG4gICAgJ2VhZ2VyJyxcbiAgICB1bmRlZmluZWRcbl07XG5mdW5jdGlvbiBpc1N0YXRpY1JlcXVpcmUoc3JjKSB7XG4gICAgcmV0dXJuIHNyYy5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBpc1N0YXRpY0ltYWdlRGF0YShzcmMpIHtcbiAgICByZXR1cm4gc3JjLnNyYyAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaXNTdGF0aWNJbXBvcnQoc3JjKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzcmMgPT09ICdvYmplY3QnICYmIChpc1N0YXRpY1JlcXVpcmUoc3JjKSB8fCBpc1N0YXRpY0ltYWdlRGF0YShzcmMpKTtcbn1cbmZ1bmN0aW9uIGdldFdpZHRocyh7IGRldmljZVNpemVzICwgYWxsU2l6ZXMgIH0sIHdpZHRoLCBzaXplcykge1xuICAgIGlmIChzaXplcykge1xuICAgICAgICAvLyBGaW5kIGFsbCB0aGUgXCJ2d1wiIHBlcmNlbnQgc2l6ZXMgdXNlZCBpbiB0aGUgc2l6ZXMgcHJvcFxuICAgICAgICBjb25zdCB2aWV3cG9ydFdpZHRoUmUgPSAvKF58XFxzKSgxP1xcZD9cXGQpdncvZztcbiAgICAgICAgY29uc3QgcGVyY2VudFNpemVzID0gW107XG4gICAgICAgIGZvcihsZXQgbWF0Y2g7IG1hdGNoID0gdmlld3BvcnRXaWR0aFJlLmV4ZWMoc2l6ZXMpOyBtYXRjaCl7XG4gICAgICAgICAgICBwZXJjZW50U2l6ZXMucHVzaChwYXJzZUludChtYXRjaFsyXSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJjZW50U2l6ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzbWFsbGVzdFJhdGlvID0gTWF0aC5taW4oLi4ucGVyY2VudFNpemVzKSAqIDAuMDE7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoczogYWxsU2l6ZXMuZmlsdGVyKChzKT0+cyA+PSBkZXZpY2VTaXplc1swXSAqIHNtYWxsZXN0UmF0aW8pLFxuICAgICAgICAgICAgICAgIGtpbmQ6ICd3J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGhzOiBhbGxTaXplcyxcbiAgICAgICAgICAgIGtpbmQ6ICd3J1xuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGhzOiBkZXZpY2VTaXplcyxcbiAgICAgICAgICAgIGtpbmQ6ICd3J1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB3aWR0aHMgPSBbXG4gICAgICAgIC4uLm5ldyBTZXQoLy8gPiBUaGlzIG1lYW5zIHRoYXQgbW9zdCBPTEVEIHNjcmVlbnMgdGhhdCBzYXkgdGhleSBhcmUgM3ggcmVzb2x1dGlvbixcbiAgICAgICAgLy8gPiBhcmUgYWN0dWFsbHkgM3ggaW4gdGhlIGdyZWVuIGNvbG9yLCBidXQgb25seSAxLjV4IGluIHRoZSByZWQgYW5kXG4gICAgICAgIC8vID4gYmx1ZSBjb2xvcnMuIFNob3dpbmcgYSAzeCByZXNvbHV0aW9uIGltYWdlIGluIHRoZSBhcHAgdnMgYSAyeFxuICAgICAgICAvLyA+IHJlc29sdXRpb24gaW1hZ2Ugd2lsbCBiZSB2aXN1YWxseSB0aGUgc2FtZSwgdGhvdWdoIHRoZSAzeCBpbWFnZVxuICAgICAgICAvLyA+IHRha2VzIHNpZ25pZmljYW50bHkgbW9yZSBkYXRhLiBFdmVuIHRydWUgM3ggcmVzb2x1dGlvbiBzY3JlZW5zIGFyZVxuICAgICAgICAvLyA+IHdhc3RlZnVsIGFzIHRoZSBodW1hbiBleWUgY2Fubm90IHNlZSB0aGF0IGxldmVsIG9mIGRldGFpbCB3aXRob3V0XG4gICAgICAgIC8vID4gc29tZXRoaW5nIGxpa2UgYSBtYWduaWZ5aW5nIGdsYXNzLlxuICAgICAgICAvLyBodHRwczovL2Jsb2cudHdpdHRlci5jb20vZW5naW5lZXJpbmcvZW5fdXMvdG9waWNzL2luZnJhc3RydWN0dXJlLzIwMTkvY2FwcGluZy1pbWFnZS1maWRlbGl0eS1vbi11bHRyYS1oaWdoLXJlc29sdXRpb24tZGV2aWNlcy5odG1sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgd2lkdGggKiAyIC8qLCB3aWR0aCAqIDMqLyBcbiAgICAgICAgXS5tYXAoKHcpPT5hbGxTaXplcy5maW5kKChwKT0+cCA+PSB3KSB8fCBhbGxTaXplc1thbGxTaXplcy5sZW5ndGggLSAxXSkpLCBcbiAgICBdO1xuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRocyxcbiAgICAgICAga2luZDogJ3gnXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlSW1nQXR0cnMoeyBjb25maWcgLCBzcmMgLCB1bm9wdGltaXplZCAsIHdpZHRoICwgcXVhbGl0eSAsIHNpemVzICwgbG9hZGVyICB9KSB7XG4gICAgaWYgKHVub3B0aW1pemVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcmMsXG4gICAgICAgICAgICBzcmNTZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNpemVzOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgeyB3aWR0aHMgLCBraW5kICB9ID0gZ2V0V2lkdGhzKGNvbmZpZywgd2lkdGgsIHNpemVzKTtcbiAgICBjb25zdCBsYXN0ID0gd2lkdGhzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2l6ZXM6ICFzaXplcyAmJiBraW5kID09PSAndycgPyAnMTAwdncnIDogc2l6ZXMsXG4gICAgICAgIHNyY1NldDogd2lkdGhzLm1hcCgodywgaSk9PmAke2xvYWRlcih7XG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIHNyYyxcbiAgICAgICAgICAgICAgICBxdWFsaXR5LFxuICAgICAgICAgICAgICAgIHdpZHRoOiB3XG4gICAgICAgICAgICB9KX0gJHtraW5kID09PSAndycgPyB3IDogaSArIDF9JHtraW5kfWApLmpvaW4oJywgJyksXG4gICAgICAgIC8vIEl0J3MgaW50ZW5kZWQgdG8ga2VlcCBgc3JjYCB0aGUgbGFzdCBhdHRyaWJ1dGUgYmVjYXVzZSBSZWFjdCB1cGRhdGVzXG4gICAgICAgIC8vIGF0dHJpYnV0ZXMgaW4gb3JkZXIuIElmIHdlIGtlZXAgYHNyY2AgdGhlIGZpcnN0IG9uZSwgU2FmYXJpIHdpbGxcbiAgICAgICAgLy8gaW1tZWRpYXRlbHkgc3RhcnQgdG8gZmV0Y2ggYHNyY2AsIGJlZm9yZSBgc2l6ZXNgIGFuZCBgc3JjU2V0YCBhcmUgZXZlblxuICAgICAgICAvLyB1cGRhdGVkIGJ5IFJlYWN0LiBUaGF0IGNhdXNlcyBtdWx0aXBsZSB1bm5lY2Vzc2FyeSByZXF1ZXN0cyBpZiBgc3JjU2V0YFxuICAgICAgICAvLyBhbmQgYHNpemVzYCBhcmUgZGVmaW5lZC5cbiAgICAgICAgLy8gVGhpcyBidWcgY2Fubm90IGJlIHJlcHJvZHVjZWQgaW4gQ2hyb21lIG9yIEZpcmVmb3guXG4gICAgICAgIHNyYzogbG9hZGVyKHtcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHNyYyxcbiAgICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgICB3aWR0aDogd2lkdGhzW2xhc3RdXG4gICAgICAgIH0pXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldEludCh4KSB7XG4gICAgaWYgKHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgeCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgL15bMC05XSskLy50ZXN0KHgpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludCh4LCAxMCk7XG4gICAgfVxuICAgIHJldHVybiBOYU47XG59XG4vLyBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzM5Nzc3ODMzLzI2NjUzNSBmb3Igd2h5IHdlIHVzZSB0aGlzIHJlZlxuLy8gaGFuZGxlciBpbnN0ZWFkIG9mIHRoZSBpbWcncyBvbkxvYWQgYXR0cmlidXRlLlxuZnVuY3Rpb24gaGFuZGxlTG9hZGluZyhpbWcsIHNyYywgcGxhY2Vob2xkZXIsIG9uTG9hZFJlZiwgb25Mb2FkaW5nQ29tcGxldGVSZWYsIHNldEJsdXJDb21wbGV0ZSwgdW5vcHRpbWl6ZWQpIHtcbiAgICBpZiAoIWltZyB8fCBpbWdbJ2RhdGEtbG9hZGVkLXNyYyddID09PSBzcmMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbWdbJ2RhdGEtbG9hZGVkLXNyYyddID0gc3JjO1xuICAgIGNvbnN0IHAgPSAnZGVjb2RlJyBpbiBpbWcgPyBpbWcuZGVjb2RlKCkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBwLmNhdGNoKCgpPT57fSkudGhlbigoKT0+e1xuICAgICAgICBpZiAoIWltZy5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAvLyBFeGl0IGVhcmx5IGluIGNhc2Ugb2YgcmFjZSBjb25kaXRpb246XG4gICAgICAgICAgICAvLyAtIG9ubG9hZCgpIGlzIGNhbGxlZFxuICAgICAgICAgICAgLy8gLSBkZWNvZGUoKSBpcyBjYWxsZWQgYnV0IGluY29tcGxldGVcbiAgICAgICAgICAgIC8vIC0gdW5tb3VudCBpcyBjYWxsZWRcbiAgICAgICAgICAgIC8vIC0gZGVjb2RlKCkgY29tcGxldGVzXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlaG9sZGVyID09PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHNldEJsdXJDb21wbGV0ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25Mb2FkUmVmID09IG51bGwgPyB2b2lkIDAgOiBvbkxvYWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgU3ludGhldGljRXZlbnQgaGVyZSxcbiAgICAgICAgICAgIC8vIHdlIG11c3QgY3JlYXRlIG9uZSB3aXRoIHRoZSBzYW1lIHNoYXBlLlxuICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ldmVudHMuaHRtbFxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ2xvYWQnKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGltZ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgcHJldmVudGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgb25Mb2FkUmVmLmN1cnJlbnQoX2V4dGVuZHMoe30sIGV2ZW50LCB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGltZyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGltZyxcbiAgICAgICAgICAgICAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6ICgpPT5wcmV2ZW50ZWQsXG4gICAgICAgICAgICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6ICgpPT5zdG9wcGVkLFxuICAgICAgICAgICAgICAgIHBlcnNpc3Q6ICgpPT57fSxcbiAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbjogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25Mb2FkaW5nQ29tcGxldGVSZWYgPT0gbnVsbCA/IHZvaWQgMCA6IG9uTG9hZGluZ0NvbXBsZXRlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIG9uTG9hZGluZ0NvbXBsZXRlUmVmLmN1cnJlbnQoaW1nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmltZycpID09PSAnZmlsbCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVub3B0aW1pemVkICYmICghaW1nLmdldEF0dHJpYnV0ZSgnc2l6ZXMnKSB8fCBpbWcuZ2V0QXR0cmlidXRlKCdzaXplcycpID09PSAnMTAwdncnKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgd2lkdGhWaWV3cG9ydFJhdGlvID0gaW1nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC8gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aFZpZXdwb3J0UmF0aW8gPCAwLjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfd2Fybk9uY2UpLndhcm5PbmNlKGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBcImZpbGxcIiBidXQgaXMgbWlzc2luZyBcInNpemVzXCIgcHJvcC4gUGxlYXNlIGFkZCBpdCB0byBpbXByb3ZlIHBhZ2UgcGVyZm9ybWFuY2UuIFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI3NpemVzYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGltZy5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcG9zaXRpb24gIH0gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbWcucGFyZW50RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmUnXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMocG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3dhcm5PbmNlKS53YXJuT25jZShgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBoYXMgXCJmaWxsXCIgYW5kIHBhcmVudCBlbGVtZW50IHdpdGggaW52YWxpZCBcInBvc2l0aW9uXCIuIFByb3ZpZGVkIFwiJHtwb3NpdGlvbn1cIiBzaG91bGQgYmUgb25lIG9mICR7dmFsaWQubWFwKFN0cmluZykuam9pbignLCcpfS5gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW1nLmhlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgX3dhcm5PbmNlKS53YXJuT25jZShgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBoYXMgXCJmaWxsXCIgYW5kIGEgaGVpZ2h0IHZhbHVlIG9mIDAuIFRoaXMgaXMgbGlrZWx5IGJlY2F1c2UgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBpbWFnZSBoYXMgbm90IGJlZW4gc3R5bGVkIHRvIGhhdmUgYSBzZXQgaGVpZ2h0LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhlaWdodE1vZGlmaWVkID0gaW1nLmhlaWdodC50b1N0cmluZygpICE9PSBpbWcuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoTW9kaWZpZWQgPSBpbWcud2lkdGgudG9TdHJpbmcoKSAhPT0gaW1nLmdldEF0dHJpYnV0ZSgnd2lkdGgnKTtcbiAgICAgICAgICAgIGlmIChoZWlnaHRNb2RpZmllZCAmJiAhd2lkdGhNb2RpZmllZCB8fCAhaGVpZ2h0TW9kaWZpZWQgJiYgd2lkdGhNb2RpZmllZCkge1xuICAgICAgICAgICAgICAgICgwLCBfd2Fybk9uY2UpLndhcm5PbmNlKGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0IG1vZGlmaWVkLCBidXQgbm90IHRoZSBvdGhlci4gSWYgeW91IHVzZSBDU1MgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHlvdXIgaW1hZ2UsIGFsc28gaW5jbHVkZSB0aGUgc3R5bGVzICd3aWR0aDogXCJhdXRvXCInIG9yICdoZWlnaHQ6IFwiYXV0b1wiJyB0byBtYWludGFpbiB0aGUgYXNwZWN0IHJhdGlvLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5jb25zdCBJbWFnZUVsZW1lbnQgPSAvKiNfX1BVUkVfXyovICgwLCBfcmVhY3QpLmZvcndhcmRSZWYoKF9wYXJhbSwgZm9yd2FyZGVkUmVmKT0+e1xuICAgIHZhciB7IGltZ0F0dHJpYnV0ZXMgLCBoZWlnaHRJbnQgLCB3aWR0aEludCAsIHF1YWxpdHlJbnQgLCBjbGFzc05hbWUgLCBpbWdTdHlsZSAsIGJsdXJTdHlsZSAsIGlzTGF6eSAsIGZpbGwgLCBwbGFjZWhvbGRlciAsIGxvYWRpbmcgLCBzcmNTdHJpbmcgLCBjb25maWcgLCB1bm9wdGltaXplZCAsIGxvYWRlciAsIG9uTG9hZFJlZiAsIG9uTG9hZGluZ0NvbXBsZXRlUmVmICwgc2V0Qmx1ckNvbXBsZXRlICwgc2V0U2hvd0FsdFRleHQgLCBvbkxvYWQgLCBvbkVycm9yICB9ID0gX3BhcmFtLCByZXN0ID0gX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2UoX3BhcmFtLCBbXG4gICAgICAgIFwiaW1nQXR0cmlidXRlc1wiLFxuICAgICAgICBcImhlaWdodEludFwiLFxuICAgICAgICBcIndpZHRoSW50XCIsXG4gICAgICAgIFwicXVhbGl0eUludFwiLFxuICAgICAgICBcImNsYXNzTmFtZVwiLFxuICAgICAgICBcImltZ1N0eWxlXCIsXG4gICAgICAgIFwiYmx1clN0eWxlXCIsXG4gICAgICAgIFwiaXNMYXp5XCIsXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIFwibG9hZGluZ1wiLFxuICAgICAgICBcInNyY1N0cmluZ1wiLFxuICAgICAgICBcImNvbmZpZ1wiLFxuICAgICAgICBcInVub3B0aW1pemVkXCIsXG4gICAgICAgIFwibG9hZGVyXCIsXG4gICAgICAgIFwib25Mb2FkUmVmXCIsXG4gICAgICAgIFwib25Mb2FkaW5nQ29tcGxldGVSZWZcIixcbiAgICAgICAgXCJzZXRCbHVyQ29tcGxldGVcIixcbiAgICAgICAgXCJzZXRTaG93QWx0VGV4dFwiLFxuICAgICAgICBcIm9uTG9hZFwiLFxuICAgICAgICBcIm9uRXJyb3JcIlxuICAgIF0pO1xuICAgIGxvYWRpbmcgPSBpc0xhenkgPyAnbGF6eScgOiBsb2FkaW5nO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovIF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3JlYWN0LmRlZmF1bHQuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImltZ1wiLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCBpbWdBdHRyaWJ1dGVzLCB7XG4gICAgICAgIHdpZHRoOiB3aWR0aEludCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHRJbnQsXG4gICAgICAgIGRlY29kaW5nOiBcImFzeW5jXCIsXG4gICAgICAgIFwiZGF0YS1uaW1nXCI6IGZpbGwgPyAnZmlsbCcgOiAnMScsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICAvLyBAdHMtaWdub3JlIC0gVE9ETzogdXBncmFkZSB0byBgQHR5cGVzL3JlYWN0QDE3YFxuICAgICAgICBsb2FkaW5nOiBsb2FkaW5nLFxuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe30sIGltZ1N0eWxlLCBibHVyU3R5bGUpLFxuICAgICAgICByZWY6ICgwLCBfcmVhY3QpLnVzZUNhbGxiYWNrKChpbWcpPT57XG4gICAgICAgICAgICBpZiAoZm9yd2FyZGVkUmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3J3YXJkZWRSZWYgPT09ICdmdW5jdGlvbicpIGZvcndhcmRlZFJlZihpbWcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmb3J3YXJkZWRSZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgLSAuY3VycmVudCBpcyByZWFkIG9ubHkgaXQncyB1c3VhbGx5IGFzc2lnbmVkIGJ5IHJlYWN0IGludGVybmFsbHlcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZGVkUmVmLmN1cnJlbnQgPSBpbWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpbWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgYW4gZXJyb3IgYmVmb3JlIHJlYWN0IGh5ZHJhdGVzLCB0aGVuIHRoZSBlcnJvciBpcyBsb3N0LlxuICAgICAgICAgICAgICAgIC8vIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHdhaXQgdW50aWwgdGhlIGltYWdlIGlzIG1vdW50ZWQgd2hpY2ggaXMgYWZ0ZXIgaHlkcmF0aW9uLFxuICAgICAgICAgICAgICAgIC8vIHRoZW4gd2Ugc2V0IHRoZSBzcmMgYWdhaW4gdG8gdHJpZ2dlciB0aGUgZXJyb3IgaGFuZGxlciAoaWYgdGhlcmUgd2FzIGFuIGVycm9yKS5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICAgICAgICAgICAgICBpbWcuc3JjID0gaW1nLnNyYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzcmNTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSW1hZ2UgaXMgbWlzc2luZyByZXF1aXJlZCBcInNyY1wiIHByb3BlcnR5OmAsIGltZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbWcuZ2V0QXR0cmlidXRlKCdhbHQnKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbWFnZSBpcyBtaXNzaW5nIHJlcXVpcmVkIFwiYWx0XCIgcHJvcGVydHkuIFBsZWFzZSBhZGQgQWx0ZXJuYXRpdmUgVGV4dCB0byBkZXNjcmliZSB0aGUgaW1hZ2UgZm9yIHNjcmVlbiByZWFkZXJzIGFuZCBzZWFyY2ggZW5naW5lcy5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW1nLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlTG9hZGluZyhpbWcsIHNyY1N0cmluZywgcGxhY2Vob2xkZXIsIG9uTG9hZFJlZiwgb25Mb2FkaW5nQ29tcGxldGVSZWYsIHNldEJsdXJDb21wbGV0ZSwgdW5vcHRpbWl6ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbXG4gICAgICAgICAgICBzcmNTdHJpbmcsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICAgIG9uTG9hZFJlZixcbiAgICAgICAgICAgIG9uTG9hZGluZ0NvbXBsZXRlUmVmLFxuICAgICAgICAgICAgc2V0Qmx1ckNvbXBsZXRlLFxuICAgICAgICAgICAgb25FcnJvcixcbiAgICAgICAgICAgIHVub3B0aW1pemVkLFxuICAgICAgICAgICAgZm9yd2FyZGVkUmVmLCBcbiAgICAgICAgXSksXG4gICAgICAgIG9uTG9hZDogKGV2ZW50KT0+e1xuICAgICAgICAgICAgY29uc3QgaW1nID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIGhhbmRsZUxvYWRpbmcoaW1nLCBzcmNTdHJpbmcsIHBsYWNlaG9sZGVyLCBvbkxvYWRSZWYsIG9uTG9hZGluZ0NvbXBsZXRlUmVmLCBzZXRCbHVyQ29tcGxldGUsIHVub3B0aW1pemVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGV2ZW50KT0+e1xuICAgICAgICAgICAgLy8gaWYgdGhlIHJlYWwgaW1hZ2UgZmFpbHMgdG8gbG9hZCwgdGhpcyB3aWxsIGVuc3VyZSBcImFsdFwiIGlzIHZpc2libGVcbiAgICAgICAgICAgIHNldFNob3dBbHRUZXh0KHRydWUpO1xuICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyID09PSAnYmx1cicpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVhbCBpbWFnZSBmYWlscyB0byBsb2FkLCB0aGlzIHdpbGwgc3RpbGwgcmVtb3ZlIHRoZSBwbGFjZWhvbGRlci5cbiAgICAgICAgICAgICAgICBzZXRCbHVyQ29tcGxldGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgICAgIG9uRXJyb3IoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpKTtcbn0pO1xuY29uc3QgSW1hZ2UgPSAvKiNfX1BVUkVfXyovICgwLCBfcmVhY3QpLmZvcndhcmRSZWYoKF9wYXJhbSwgZm9yd2FyZGVkUmVmKT0+e1xuICAgIHZhciB7IHNyYyAsIHNpemVzICwgdW5vcHRpbWl6ZWQgPWZhbHNlICwgcHJpb3JpdHkgPWZhbHNlICwgbG9hZGluZyAsIGNsYXNzTmFtZSAsIHF1YWxpdHkgLCB3aWR0aCAsIGhlaWdodCAsIGZpbGwgLCBzdHlsZSAsIG9uTG9hZCAsIG9uTG9hZGluZ0NvbXBsZXRlICwgcGxhY2Vob2xkZXIgPSdlbXB0eScgLCBibHVyRGF0YVVSTCAsIGxheW91dCAsIG9iamVjdEZpdCAsIG9iamVjdFBvc2l0aW9uICwgbGF6eUJvdW5kYXJ5ICwgbGF6eVJvb3QgIH0gPSBfcGFyYW0sIGFsbCA9IF9vYmplY3Rfd2l0aG91dF9wcm9wZXJ0aWVzX2xvb3NlKF9wYXJhbSwgW1xuICAgICAgICBcInNyY1wiLFxuICAgICAgICBcInNpemVzXCIsXG4gICAgICAgIFwidW5vcHRpbWl6ZWRcIixcbiAgICAgICAgXCJwcmlvcml0eVwiLFxuICAgICAgICBcImxvYWRpbmdcIixcbiAgICAgICAgXCJjbGFzc05hbWVcIixcbiAgICAgICAgXCJxdWFsaXR5XCIsXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgXCJvbkxvYWRcIixcbiAgICAgICAgXCJvbkxvYWRpbmdDb21wbGV0ZVwiLFxuICAgICAgICBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIFwiYmx1ckRhdGFVUkxcIixcbiAgICAgICAgXCJsYXlvdXRcIixcbiAgICAgICAgXCJvYmplY3RGaXRcIixcbiAgICAgICAgXCJvYmplY3RQb3NpdGlvblwiLFxuICAgICAgICBcImxhenlCb3VuZGFyeVwiLFxuICAgICAgICBcImxhenlSb290XCJcbiAgICBdKTtcbiAgICBjb25zdCBjb25maWdDb250ZXh0ID0gKDAsIF9yZWFjdCkudXNlQ29udGV4dChfaW1hZ2VDb25maWdDb250ZXh0LkltYWdlQ29uZmlnQ29udGV4dCk7XG4gICAgY29uc3QgY29uZmlnID0gKDAsIF9yZWFjdCkudXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBjID0gY29uZmlnRW52IHx8IGNvbmZpZ0NvbnRleHQgfHwgX2ltYWdlQ29uZmlnLmltYWdlQ29uZmlnRGVmYXVsdDtcbiAgICAgICAgY29uc3QgYWxsU2l6ZXMgPSBbXG4gICAgICAgICAgICAuLi5jLmRldmljZVNpemVzLFxuICAgICAgICAgICAgLi4uYy5pbWFnZVNpemVzXG4gICAgICAgIF0uc29ydCgoYSwgYik9PmEgLSBiKTtcbiAgICAgICAgY29uc3QgZGV2aWNlU2l6ZXMgPSBjLmRldmljZVNpemVzLnNvcnQoKGEsIGIpPT5hIC0gYik7XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYywge1xuICAgICAgICAgICAgYWxsU2l6ZXMsXG4gICAgICAgICAgICBkZXZpY2VTaXplc1xuICAgICAgICB9KTtcbiAgICB9LCBbXG4gICAgICAgIGNvbmZpZ0NvbnRleHRcbiAgICBdKTtcbiAgICBsZXQgcmVzdCA9IGFsbDtcbiAgICBsZXQgbG9hZGVyID0gcmVzdC5sb2FkZXIgfHwgX2ltYWdlTG9hZGVyLmRlZmF1bHQ7XG4gICAgLy8gUmVtb3ZlIHByb3BlcnR5IHNvIGl0J3Mgbm90IHNwcmVhZCBvbiA8aW1nPiBlbGVtZW50XG4gICAgZGVsZXRlIHJlc3QubG9hZGVyO1xuICAgIC8vIFRoaXMgc3BlY2lhbCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlclxuICAgIC8vIGRpZG4ndCBkZWZpbmUgYSBcImxvYWRlclwiIHByb3Agb3IgXCJsb2FkZXJcIiBjb25maWcuXG4gICAgY29uc3QgaXNEZWZhdWx0TG9hZGVyID0gJ19fbmV4dF9pbWdfZGVmYXVsdCcgaW4gbG9hZGVyO1xuICAgIGlmIChpc0RlZmF1bHRMb2FkZXIpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5sb2FkZXIgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaXMgbWlzc2luZyBcImxvYWRlclwiIHByb3AuYCArIGBcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtaW1hZ2UtbWlzc2luZy1sb2FkZXJgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB1c2VyIGRlZmluZWQgYSBcImxvYWRlclwiIHByb3Agb3IgY29uZmlnLlxuICAgICAgICAvLyBTaW5jZSB0aGUgY29uZmlnIG9iamVjdCBpcyBpbnRlcm5hbCBvbmx5LCB3ZVxuICAgICAgICAvLyBtdXN0IG5vdCBwYXNzIGl0IHRvIHRoZSB1c2VyLWRlZmluZWQgXCJsb2FkZXJcIi5cbiAgICAgICAgY29uc3QgY3VzdG9tSW1hZ2VMb2FkZXIgPSBsb2FkZXI7XG4gICAgICAgIHZhciBfdG1wO1xuICAgICAgICBfdG1wID0gKG9iaik9PntcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZmlnOiBfICB9ID0gb2JqLCBvcHRzID0gX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2Uob2JqLCBbXG4gICAgICAgICAgICAgICAgXCJjb25maWdcIlxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICByZXR1cm4gY3VzdG9tSW1hZ2VMb2FkZXIob3B0cyk7XG4gICAgICAgIH0sIGxvYWRlciA9IF90bXAsIF90bXA7XG4gICAgfVxuICAgIGlmIChsYXlvdXQpIHtcbiAgICAgICAgaWYgKGxheW91dCA9PT0gJ2ZpbGwnKSB7XG4gICAgICAgICAgICBmaWxsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXlvdXRUb1N0eWxlID0ge1xuICAgICAgICAgICAgaW50cmluc2ljOiB7XG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxheW91dFRvU2l6ZXMgPSB7XG4gICAgICAgICAgICByZXNwb25zaXZlOiAnMTAwdncnLFxuICAgICAgICAgICAgZmlsbDogJzEwMHZ3J1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsYXlvdXRTdHlsZSA9IGxheW91dFRvU3R5bGVbbGF5b3V0XTtcbiAgICAgICAgaWYgKGxheW91dFN0eWxlKSB7XG4gICAgICAgICAgICBzdHlsZSA9IF9leHRlbmRzKHt9LCBzdHlsZSwgbGF5b3V0U3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxheW91dFNpemVzID0gbGF5b3V0VG9TaXplc1tsYXlvdXRdO1xuICAgICAgICBpZiAobGF5b3V0U2l6ZXMgJiYgIXNpemVzKSB7XG4gICAgICAgICAgICBzaXplcyA9IGxheW91dFNpemVzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBzdGF0aWNTcmMgPSAnJztcbiAgICBsZXQgd2lkdGhJbnQgPSBnZXRJbnQod2lkdGgpO1xuICAgIGxldCBoZWlnaHRJbnQgPSBnZXRJbnQoaGVpZ2h0KTtcbiAgICBsZXQgYmx1cldpZHRoO1xuICAgIGxldCBibHVySGVpZ2h0O1xuICAgIGlmIChpc1N0YXRpY0ltcG9ydChzcmMpKSB7XG4gICAgICAgIGNvbnN0IHN0YXRpY0ltYWdlRGF0YSA9IGlzU3RhdGljUmVxdWlyZShzcmMpID8gc3JjLmRlZmF1bHQgOiBzcmM7XG4gICAgICAgIGlmICghc3RhdGljSW1hZ2VEYXRhLnNyYykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBvYmplY3Qgc2hvdWxkIG9ubHkgYmUgcGFzc2VkIHRvIHRoZSBpbWFnZSBjb21wb25lbnQgc3JjIHBhcmFtZXRlciBpZiBpdCBjb21lcyBmcm9tIGEgc3RhdGljIGltYWdlIGltcG9ydC4gSXQgbXVzdCBpbmNsdWRlIHNyYy4gUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShzdGF0aWNJbWFnZURhdGEpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdGljSW1hZ2VEYXRhLmhlaWdodCB8fCAhc3RhdGljSW1hZ2VEYXRhLndpZHRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFuIG9iamVjdCBzaG91bGQgb25seSBiZSBwYXNzZWQgdG8gdGhlIGltYWdlIGNvbXBvbmVudCBzcmMgcGFyYW1ldGVyIGlmIGl0IGNvbWVzIGZyb20gYSBzdGF0aWMgaW1hZ2UgaW1wb3J0LiBJdCBtdXN0IGluY2x1ZGUgaGVpZ2h0IGFuZCB3aWR0aC4gUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShzdGF0aWNJbWFnZURhdGEpfWApO1xuICAgICAgICB9XG4gICAgICAgIGJsdXJXaWR0aCA9IHN0YXRpY0ltYWdlRGF0YS5ibHVyV2lkdGg7XG4gICAgICAgIGJsdXJIZWlnaHQgPSBzdGF0aWNJbWFnZURhdGEuYmx1ckhlaWdodDtcbiAgICAgICAgYmx1ckRhdGFVUkwgPSBibHVyRGF0YVVSTCB8fCBzdGF0aWNJbWFnZURhdGEuYmx1ckRhdGFVUkw7XG4gICAgICAgIHN0YXRpY1NyYyA9IHN0YXRpY0ltYWdlRGF0YS5zcmM7XG4gICAgICAgIGlmICghZmlsbCkge1xuICAgICAgICAgICAgaWYgKCF3aWR0aEludCAmJiAhaGVpZ2h0SW50KSB7XG4gICAgICAgICAgICAgICAgd2lkdGhJbnQgPSBzdGF0aWNJbWFnZURhdGEud2lkdGg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW50ID0gc3RhdGljSW1hZ2VEYXRhLmhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGhJbnQgJiYgIWhlaWdodEludCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdGlvID0gd2lkdGhJbnQgLyBzdGF0aWNJbWFnZURhdGEud2lkdGg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW50ID0gTWF0aC5yb3VuZChzdGF0aWNJbWFnZURhdGEuaGVpZ2h0ICogcmF0aW8pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghd2lkdGhJbnQgJiYgaGVpZ2h0SW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF0aW8gPSBoZWlnaHRJbnQgLyBzdGF0aWNJbWFnZURhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHdpZHRoSW50ID0gTWF0aC5yb3VuZChzdGF0aWNJbWFnZURhdGEud2lkdGggKiByYXRpbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3JjID0gdHlwZW9mIHNyYyA9PT0gJ3N0cmluZycgPyBzcmMgOiBzdGF0aWNTcmM7XG4gICAgbGV0IGlzTGF6eSA9ICFwcmlvcml0eSAmJiAobG9hZGluZyA9PT0gJ2xhenknIHx8IHR5cGVvZiBsb2FkaW5nID09PSAndW5kZWZpbmVkJyk7XG4gICAgaWYgKHNyYy5zdGFydHNXaXRoKCdkYXRhOicpIHx8IHNyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gICAgICAgIHVub3B0aW1pemVkID0gdHJ1ZTtcbiAgICAgICAgaXNMYXp5ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjb25maWcudW5vcHRpbWl6ZWQpIHtcbiAgICAgICAgdW5vcHRpbWl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXNEZWZhdWx0TG9hZGVyICYmIHNyYy5lbmRzV2l0aCgnLnN2ZycpICYmICFjb25maWcuZGFuZ2Vyb3VzbHlBbGxvd1NWRykge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdG8gbWFrZSBzdmcgc2VydmUgYXMtaXMgdG8gYXZvaWQgcHJveHlpbmdcbiAgICAgICAgLy8gdGhyb3VnaCB0aGUgYnVpbHQtaW4gSW1hZ2UgT3B0aW1pemF0aW9uIEFQSS5cbiAgICAgICAgdW5vcHRpbWl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBbYmx1ckNvbXBsZXRlLCBzZXRCbHVyQ29tcGxldGVdID0gKDAsIF9yZWFjdCkudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtzaG93QWx0VGV4dCwgc2V0U2hvd0FsdFRleHRdID0gKDAsIF9yZWFjdCkudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHF1YWxpdHlJbnQgPSBnZXRJbnQocXVhbGl0eSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFzcmMpIHtcbiAgICAgICAgICAgIC8vIFJlYWN0IGRvZXNuJ3Qgc2hvdyB0aGUgc3RhY2sgdHJhY2UgYW5kIHRoZXJlJ3NcbiAgICAgICAgICAgIC8vIG5vIGBzcmNgIHRvIGhlbHAgaWRlbnRpZnkgd2hpY2ggaW1hZ2UsIHNvIHdlXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIGNvbnNvbGUuZXJyb3IocmVmKSBkdXJpbmcgbW91bnQuXG4gICAgICAgICAgICB1bm9wdGltaXplZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZmlsbCkge1xuICAgICAgICAgICAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGJvdGggXCJ3aWR0aFwiIGFuZCBcImZpbGxcIiBwcm9wZXJ0aWVzLiBPbmx5IG9uZSBzaG91bGQgYmUgdXNlZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGJvdGggXCJoZWlnaHRcIiBhbmQgXCJmaWxsXCIgcHJvcGVydGllcy4gT25seSBvbmUgc2hvdWxkIGJlIHVzZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoc3R5bGUgPT0gbnVsbCA/IHZvaWQgMCA6IHN0eWxlLnBvc2l0aW9uKSAmJiBzdHlsZS5wb3NpdGlvbiAhPT0gJ2Fic29sdXRlJykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGJvdGggXCJmaWxsXCIgYW5kIFwic3R5bGUucG9zaXRpb25cIiBwcm9wZXJ0aWVzLiBJbWFnZXMgd2l0aCBcImZpbGxcIiBhbHdheXMgdXNlIHBvc2l0aW9uIGFic29sdXRlIC0gaXQgY2Fubm90IGJlIG1vZGlmaWVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHN0eWxlID09IG51bGwgPyB2b2lkIDAgOiBzdHlsZS53aWR0aCkgJiYgc3R5bGUud2lkdGggIT09ICcxMDAlJykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGJvdGggXCJmaWxsXCIgYW5kIFwic3R5bGUud2lkdGhcIiBwcm9wZXJ0aWVzLiBJbWFnZXMgd2l0aCBcImZpbGxcIiBhbHdheXMgdXNlIHdpZHRoIDEwMCUgLSBpdCBjYW5ub3QgYmUgbW9kaWZpZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoc3R5bGUgPT0gbnVsbCA/IHZvaWQgMCA6IHN0eWxlLmhlaWdodCkgJiYgc3R5bGUuaGVpZ2h0ICE9PSAnMTAwJScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBib3RoIFwiZmlsbFwiIGFuZCBcInN0eWxlLmhlaWdodFwiIHByb3BlcnRpZXMuIEltYWdlcyB3aXRoIFwiZmlsbFwiIGFsd2F5cyB1c2UgaGVpZ2h0IDEwMCUgLSBpdCBjYW5ub3QgYmUgbW9kaWZpZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpZHRoSW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaXMgbWlzc2luZyByZXF1aXJlZCBcIndpZHRoXCIgcHJvcGVydHkuYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc05hTih3aWR0aEludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBpbnZhbGlkIFwid2lkdGhcIiBwcm9wZXJ0eS4gRXhwZWN0ZWQgYSBudW1lcmljIHZhbHVlIGluIHBpeGVscyBidXQgcmVjZWl2ZWQgXCIke3dpZHRofVwiLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGhlaWdodEludCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGlzIG1pc3NpbmcgcmVxdWlyZWQgXCJoZWlnaHRcIiBwcm9wZXJ0eS5gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKGhlaWdodEludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcGVydHkuIEV4cGVjdGVkIGEgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMgYnV0IHJlY2VpdmVkIFwiJHtoZWlnaHR9XCIuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghVkFMSURfTE9BRElOR19WQUxVRVMuaW5jbHVkZXMobG9hZGluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBoYXMgaW52YWxpZCBcImxvYWRpbmdcIiBwcm9wZXJ0eS4gUHJvdmlkZWQgXCIke2xvYWRpbmd9XCIgc2hvdWxkIGJlIG9uZSBvZiAke1ZBTElEX0xPQURJTkdfVkFMVUVTLm1hcChTdHJpbmcpLmpvaW4oJywnKX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yaXR5ICYmIGxvYWRpbmcgPT09ICdsYXp5Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBib3RoIFwicHJpb3JpdHlcIiBhbmQgXCJsb2FkaW5nPSdsYXp5J1wiIHByb3BlcnRpZXMuIE9ubHkgb25lIHNob3VsZCBiZSB1c2VkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZWhvbGRlciA9PT0gJ2JsdXInKSB7XG4gICAgICAgICAgICBpZiAod2lkdGhJbnQgJiYgaGVpZ2h0SW50ICYmIHdpZHRoSW50ICogaGVpZ2h0SW50IDwgMTYwMCkge1xuICAgICAgICAgICAgICAgICgwLCBfd2Fybk9uY2UpLndhcm5PbmNlKGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGlzIHNtYWxsZXIgdGhhbiA0MHg0MC4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIFwicGxhY2Vob2xkZXI9J2JsdXInXCIgcHJvcGVydHkgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYmx1ckRhdGFVUkwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBWQUxJRF9CTFVSX0VYVCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ2pwZWcnLFxuICAgICAgICAgICAgICAgICAgICAncG5nJyxcbiAgICAgICAgICAgICAgICAgICAgJ3dlYnAnLFxuICAgICAgICAgICAgICAgICAgICAnYXZpZidcbiAgICAgICAgICAgICAgICBdIC8vIHNob3VsZCBtYXRjaCBuZXh0LWltYWdlLWxvYWRlclxuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIFwicGxhY2Vob2xkZXI9J2JsdXInXCIgcHJvcGVydHkgYnV0IGlzIG1pc3NpbmcgdGhlIFwiYmx1ckRhdGFVUkxcIiBwcm9wZXJ0eS5cbiAgICAgICAgICBQb3NzaWJsZSBzb2x1dGlvbnM6XG4gICAgICAgICAgICAtIEFkZCBhIFwiYmx1ckRhdGFVUkxcIiBwcm9wZXJ0eSwgdGhlIGNvbnRlbnRzIHNob3VsZCBiZSBhIHNtYWxsIERhdGEgVVJMIHRvIHJlcHJlc2VudCB0aGUgaW1hZ2VcbiAgICAgICAgICAgIC0gQ2hhbmdlIHRoZSBcInNyY1wiIHByb3BlcnR5IHRvIGEgc3RhdGljIGltcG9ydCB3aXRoIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZpbGUgdHlwZXM6ICR7VkFMSURfQkxVUl9FWFQuam9pbignLCcpfVxuICAgICAgICAgICAgLSBSZW1vdmUgdGhlIFwicGxhY2Vob2xkZXJcIiBwcm9wZXJ0eSwgZWZmZWN0aXZlbHkgbm8gYmx1ciBlZmZlY3RcbiAgICAgICAgICBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3BsYWNlaG9sZGVyLWJsdXItZGF0YS11cmxgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJ3JlZicgaW4gcmVzdCkge1xuICAgICAgICAgICAgKDAsIF93YXJuT25jZSkud2Fybk9uY2UoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaXMgdXNpbmcgdW5zdXBwb3J0ZWQgXCJyZWZcIiBwcm9wZXJ0eS4gQ29uc2lkZXIgdXNpbmcgdGhlIFwib25Mb2FkaW5nQ29tcGxldGVcIiBwcm9wZXJ0eSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdW5vcHRpbWl6ZWQgJiYgbG9hZGVyICE9PSBfaW1hZ2VMb2FkZXIuZGVmYXVsdCkge1xuICAgICAgICAgICAgY29uc3QgdXJsU3RyID0gbG9hZGVyKHtcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aEludCB8fCA0MDAsXG4gICAgICAgICAgICAgICAgcXVhbGl0eTogcXVhbGl0eUludCB8fCA3NVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgdXJsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB1cmwgPSBuZXcgVVJMKHVybFN0cik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgICAgICBpZiAodXJsU3RyID09PSBzcmMgfHwgdXJsICYmIHVybC5wYXRobmFtZSA9PT0gc3JjICYmICF1cmwuc2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgKDAsIF93YXJuT25jZSkud2Fybk9uY2UoYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGEgXCJsb2FkZXJcIiBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCB3aWR0aC4gUGxlYXNlIGltcGxlbWVudCBpdCBvciB1c2UgdGhlIFwidW5vcHRpbWl6ZWRcIiBwcm9wZXJ0eSBpbnN0ZWFkLmAgKyBgXFxuUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uZXh0LWltYWdlLW1pc3NpbmctbG9hZGVyLXdpZHRoYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbbGVnYWN5S2V5LCBsZWdhY3lWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoe1xuICAgICAgICAgICAgbGF5b3V0LFxuICAgICAgICAgICAgb2JqZWN0Rml0LFxuICAgICAgICAgICAgb2JqZWN0UG9zaXRpb24sXG4gICAgICAgICAgICBsYXp5Qm91bmRhcnksXG4gICAgICAgICAgICBsYXp5Um9vdFxuICAgICAgICB9KSl7XG4gICAgICAgICAgICBpZiAobGVnYWN5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3dhcm5PbmNlKS53YXJuT25jZShgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBoYXMgbGVnYWN5IHByb3AgXCIke2xlZ2FjeUtleX1cIi4gRGlkIHlvdSBmb3JnZXQgdG8gcnVuIHRoZSBjb2RlbW9kP2AgKyBgXFxuUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uZXh0LWltYWdlLXVwZ3JhZGUtdG8tMTNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIXBlcmZPYnNlcnZlciAmJiB3aW5kb3cuUGVyZm9ybWFuY2VPYnNlcnZlcikge1xuICAgICAgICAgICAgcGVyZk9ic2VydmVyID0gbmV3IFBlcmZvcm1hbmNlT2JzZXJ2ZXIoKGVudHJ5TGlzdCk9PntcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJ5TGlzdC5nZXRFbnRyaWVzKCkpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVmO1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIC0gbWlzc2luZyBcIkxhcmdlc3RDb250ZW50ZnVsUGFpbnRcIiBjbGFzcyB3aXRoIFwiZWxlbWVudFwiIHByb3BcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nU3JjID0gKGVudHJ5ID09IG51bGwgPyB2b2lkIDAgOiAocmVmID0gZW50cnkuZWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHJlZi5zcmMpIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsY3BJbWFnZSA9IGFsbEltZ3MuZ2V0KGltZ1NyYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsY3BJbWFnZSAmJiAhbGNwSW1hZ2UucHJpb3JpdHkgJiYgbGNwSW1hZ2UucGxhY2Vob2xkZXIgIT09ICdibHVyJyAmJiAhbGNwSW1hZ2Uuc3JjLnN0YXJ0c1dpdGgoJ2RhdGE6JykgJiYgIWxjcEltYWdlLnNyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3dlYi5kZXYvbGNwLyNtZWFzdXJlLWxjcC1pbi1qYXZhc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3dhcm5PbmNlKS53YXJuT25jZShgSW1hZ2Ugd2l0aCBzcmMgXCIke2xjcEltYWdlLnNyY31cIiB3YXMgZGV0ZWN0ZWQgYXMgdGhlIExhcmdlc3QgQ29udGVudGZ1bCBQYWludCAoTENQKS4gUGxlYXNlIGFkZCB0aGUgXCJwcmlvcml0eVwiIHByb3BlcnR5IGlmIHRoaXMgaW1hZ2UgaXMgYWJvdmUgdGhlIGZvbGQuYCArIGBcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNwcmlvcml0eWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBlcmZPYnNlcnZlci5vYnNlcnZlKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xhcmdlc3QtY29udGVudGZ1bC1wYWludCcsXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBMb2cgZXJyb3IgYnV0IGRvbid0IGNyYXNoIHRoZSBhcHBcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW1nU3R5bGUgPSBPYmplY3QuYXNzaWduKGZpbGwgPyB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICByaWdodDogMCxcbiAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICBvYmplY3RGaXQsXG4gICAgICAgIG9iamVjdFBvc2l0aW9uXG4gICAgfSA6IHt9LCBzaG93QWx0VGV4dCA/IHt9IDoge1xuICAgICAgICBjb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH0sIHN0eWxlKTtcbiAgICBjb25zdCBibHVyU3R5bGUgPSBwbGFjZWhvbGRlciA9PT0gJ2JsdXInICYmIGJsdXJEYXRhVVJMICYmICFibHVyQ29tcGxldGUgPyB7XG4gICAgICAgIGJhY2tncm91bmRTaXplOiBpbWdTdHlsZS5vYmplY3RGaXQgfHwgJ2NvdmVyJyxcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiBpbWdTdHlsZS5vYmplY3RQb3NpdGlvbiB8fCAnNTAlIDUwJScsXG4gICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICduby1yZXBlYXQnLFxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwkeygwLCBfaW1hZ2VCbHVyU3ZnKS5nZXRJbWFnZUJsdXJTdmcoe1xuICAgICAgICAgICAgd2lkdGhJbnQsXG4gICAgICAgICAgICBoZWlnaHRJbnQsXG4gICAgICAgICAgICBibHVyV2lkdGgsXG4gICAgICAgICAgICBibHVySGVpZ2h0LFxuICAgICAgICAgICAgYmx1ckRhdGFVUkxcbiAgICAgICAgfSl9XCIpYFxuICAgIH0gOiB7fTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgaWYgKGJsdXJTdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgJiYgKGJsdXJEYXRhVVJMID09IG51bGwgPyB2b2lkIDAgOiBibHVyRGF0YVVSTC5zdGFydHNXaXRoKCcvJykpKSB7XG4gICAgICAgICAgICAvLyBEdXJpbmcgYG5leHQgZGV2YCwgd2UgZG9uJ3Qgd2FudCB0byBnZW5lcmF0ZSBibHVyIHBsYWNlaG9sZGVycyB3aXRoIHdlYnBhY2tcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQgY2FuIGRlbGF5IHN0YXJ0aW5nIHRoZSBkZXYgc2VydmVyLiBJbnN0ZWFkLCBgbmV4dC1pbWFnZS1sb2FkZXIuanNgXG4gICAgICAgICAgICAvLyB3aWxsIGlubGluZSBhIHNwZWNpYWwgdXJsIHRvIGxhemlseSBnZW5lcmF0ZSB0aGUgYmx1ciBwbGFjZWhvbGRlciBhdCByZXF1ZXN0IHRpbWUuXG4gICAgICAgICAgICBibHVyU3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybChcIiR7Ymx1ckRhdGFVUkx9XCIpYDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpbWdBdHRyaWJ1dGVzID0gZ2VuZXJhdGVJbWdBdHRycyh7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgc3JjLFxuICAgICAgICB1bm9wdGltaXplZCxcbiAgICAgICAgd2lkdGg6IHdpZHRoSW50LFxuICAgICAgICBxdWFsaXR5OiBxdWFsaXR5SW50LFxuICAgICAgICBzaXplcyxcbiAgICAgICAgbG9hZGVyXG4gICAgfSk7XG4gICAgbGV0IHNyY1N0cmluZyA9IHNyYztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCBmdWxsVXJsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmdWxsVXJsID0gbmV3IFVSTChpbWdBdHRyaWJ1dGVzLnNyYyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZnVsbFVybCA9IG5ldyBVUkwoaW1nQXR0cmlidXRlcy5zcmMsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsbEltZ3Muc2V0KGZ1bGxVcmwuaHJlZiwge1xuICAgICAgICAgICAgICAgIHNyYyxcbiAgICAgICAgICAgICAgICBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbGlua1Byb3BzID0ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHVwZ3JhZGUgcmVhY3QgdHlwZXMgdG8gcmVhY3QgMThcbiAgICAgICAgaW1hZ2VTcmNTZXQ6IGltZ0F0dHJpYnV0ZXMuc3JjU2V0LFxuICAgICAgICBpbWFnZVNpemVzOiBpbWdBdHRyaWJ1dGVzLnNpemVzLFxuICAgICAgICBjcm9zc09yaWdpbjogcmVzdC5jcm9zc09yaWdpblxuICAgIH07XG4gICAgY29uc3Qgb25Mb2FkUmVmID0gKDAsIF9yZWFjdCkudXNlUmVmKG9uTG9hZCk7XG4gICAgKDAsIF9yZWFjdCkudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIG9uTG9hZFJlZi5jdXJyZW50ID0gb25Mb2FkO1xuICAgIH0sIFtcbiAgICAgICAgb25Mb2FkXG4gICAgXSk7XG4gICAgY29uc3Qgb25Mb2FkaW5nQ29tcGxldGVSZWYgPSAoMCwgX3JlYWN0KS51c2VSZWYob25Mb2FkaW5nQ29tcGxldGUpO1xuICAgICgwLCBfcmVhY3QpLnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBvbkxvYWRpbmdDb21wbGV0ZVJlZi5jdXJyZW50ID0gb25Mb2FkaW5nQ29tcGxldGU7XG4gICAgfSwgW1xuICAgICAgICBvbkxvYWRpbmdDb21wbGV0ZVxuICAgIF0pO1xuICAgIGNvbnN0IGltZ0VsZW1lbnRBcmdzID0gX2V4dGVuZHMoe1xuICAgICAgICBpc0xhenksXG4gICAgICAgIGltZ0F0dHJpYnV0ZXMsXG4gICAgICAgIGhlaWdodEludCxcbiAgICAgICAgd2lkdGhJbnQsXG4gICAgICAgIHF1YWxpdHlJbnQsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgaW1nU3R5bGUsXG4gICAgICAgIGJsdXJTdHlsZSxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxsLFxuICAgICAgICB1bm9wdGltaXplZCxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGxvYWRlcixcbiAgICAgICAgc3JjU3RyaW5nLFxuICAgICAgICBvbkxvYWRSZWYsXG4gICAgICAgIG9uTG9hZGluZ0NvbXBsZXRlUmVmLFxuICAgICAgICBzZXRCbHVyQ29tcGxldGUsXG4gICAgICAgIHNldFNob3dBbHRUZXh0XG4gICAgfSwgcmVzdCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfcmVhY3QuZGVmYXVsdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qLyBfcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEltYWdlRWxlbWVudCwgT2JqZWN0LmFzc2lnbih7fSwgaW1nRWxlbWVudEFyZ3MsIHtcbiAgICAgICAgcmVmOiBmb3J3YXJkZWRSZWZcbiAgICB9KSksIHByaW9yaXR5ID8gLy8gTm90ZSBob3cgd2Ugb21pdCB0aGUgYGhyZWZgIGF0dHJpYnV0ZSwgYXMgaXQgd291bGQgb25seSBiZSByZWxldmFudFxuICAgIC8vIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IGBpbWFnZXNyY3NldGAsIGFuZCBpbiB0aG9zZSBjYXNlc1xuICAgIC8vIGl0IHdvdWxkIGxpa2VseSBjYXVzZSB0aGUgaW5jb3JyZWN0IGltYWdlIHRvIGJlIHByZWxvYWRlZC5cbiAgICAvL1xuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI2F0dHItbGluay1pbWFnZXNyY3NldFxuICAgIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfaGVhZC5kZWZhdWx0LCBudWxsLCAvKiNfX1BVUkVfXyovIF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBrZXk6ICdfX25pbWctJyArIGltZ0F0dHJpYnV0ZXMuc3JjICsgaW1nQXR0cmlidXRlcy5zcmNTZXQgKyBpbWdBdHRyaWJ1dGVzLnNpemVzLFxuICAgICAgICByZWw6IFwicHJlbG9hZFwiLFxuICAgICAgICBhczogXCJpbWFnZVwiLFxuICAgICAgICBocmVmOiBpbWdBdHRyaWJ1dGVzLnNyY1NldCA/IHVuZGVmaW5lZCA6IGltZ0F0dHJpYnV0ZXMuc3JjXG4gICAgfSwgbGlua1Byb3BzKSkpIDogbnVsbCk7XG59KTtcbnZhciBfZGVmYXVsdCA9IEltYWdlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltYWdlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJfZXh0ZW5kcyIsInJlcXVpcmUiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwiX29iamVjdF93aXRob3V0X3Byb3BlcnRpZXNfbG9vc2UiLCJfcmVhY3QiLCJfaGVhZCIsIl9pbWFnZUJsdXJTdmciLCJfaW1hZ2VDb25maWciLCJfaW1hZ2VDb25maWdDb250ZXh0IiwiX3dhcm5PbmNlIiwiX2ltYWdlTG9hZGVyIiwiY29uZmlnRW52IiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9JTUFHRV9PUFRTIiwiYWxsSW1ncyIsIk1hcCIsInBlcmZPYnNlcnZlciIsImdsb2JhbFRoaXMiLCJfX05FWFRfSU1BR0VfSU1QT1JURUQiLCJWQUxJRF9MT0FESU5HX1ZBTFVFUyIsInVuZGVmaW5lZCIsImlzU3RhdGljUmVxdWlyZSIsInNyYyIsImlzU3RhdGljSW1hZ2VEYXRhIiwiaXNTdGF0aWNJbXBvcnQiLCJnZXRXaWR0aHMiLCJkZXZpY2VTaXplcyIsImFsbFNpemVzIiwid2lkdGgiLCJzaXplcyIsInZpZXdwb3J0V2lkdGhSZSIsInBlcmNlbnRTaXplcyIsIm1hdGNoIiwiZXhlYyIsInB1c2giLCJwYXJzZUludCIsImxlbmd0aCIsInNtYWxsZXN0UmF0aW8iLCJNYXRoIiwibWluIiwid2lkdGhzIiwiZmlsdGVyIiwicyIsImtpbmQiLCJTZXQiLCJtYXAiLCJ3IiwiZmluZCIsInAiLCJnZW5lcmF0ZUltZ0F0dHJzIiwiY29uZmlnIiwidW5vcHRpbWl6ZWQiLCJxdWFsaXR5IiwibG9hZGVyIiwic3JjU2V0IiwibGFzdCIsImkiLCJqb2luIiwiZ2V0SW50IiwieCIsInRlc3QiLCJOYU4iLCJoYW5kbGVMb2FkaW5nIiwiaW1nIiwicGxhY2Vob2xkZXIiLCJvbkxvYWRSZWYiLCJvbkxvYWRpbmdDb21wbGV0ZVJlZiIsInNldEJsdXJDb21wbGV0ZSIsImRlY29kZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2F0Y2giLCJ0aGVuIiwicGFyZW50Tm9kZSIsImN1cnJlbnQiLCJldmVudCIsIkV2ZW50Iiwid3JpdGFibGUiLCJwcmV2ZW50ZWQiLCJzdG9wcGVkIiwibmF0aXZlRXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwiaXNEZWZhdWx0UHJldmVudGVkIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJwZXJzaXN0IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJnZXRBdHRyaWJ1dGUiLCJ3aWR0aFZpZXdwb3J0UmF0aW8iLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwid2Fybk9uY2UiLCJwYXJlbnRFbGVtZW50IiwicG9zaXRpb24iLCJnZXRDb21wdXRlZFN0eWxlIiwidmFsaWQiLCJpbmNsdWRlcyIsIlN0cmluZyIsImhlaWdodCIsImhlaWdodE1vZGlmaWVkIiwidG9TdHJpbmciLCJ3aWR0aE1vZGlmaWVkIiwiSW1hZ2VFbGVtZW50IiwiZm9yd2FyZFJlZiIsIl9wYXJhbSIsImZvcndhcmRlZFJlZiIsImltZ0F0dHJpYnV0ZXMiLCJoZWlnaHRJbnQiLCJ3aWR0aEludCIsInF1YWxpdHlJbnQiLCJjbGFzc05hbWUiLCJpbWdTdHlsZSIsImJsdXJTdHlsZSIsImlzTGF6eSIsImZpbGwiLCJsb2FkaW5nIiwic3JjU3RyaW5nIiwic2V0U2hvd0FsdFRleHQiLCJvbkxvYWQiLCJvbkVycm9yIiwicmVzdCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsImFzc2lnbiIsImRlY29kaW5nIiwic3R5bGUiLCJyZWYiLCJ1c2VDYWxsYmFjayIsImNvbnNvbGUiLCJlcnJvciIsImNvbXBsZXRlIiwiSW1hZ2UiLCJwcmlvcml0eSIsIm9uTG9hZGluZ0NvbXBsZXRlIiwiYmx1ckRhdGFVUkwiLCJsYXlvdXQiLCJvYmplY3RGaXQiLCJvYmplY3RQb3NpdGlvbiIsImxhenlCb3VuZGFyeSIsImxhenlSb290IiwiYWxsIiwiY29uZmlnQ29udGV4dCIsInVzZUNvbnRleHQiLCJJbWFnZUNvbmZpZ0NvbnRleHQiLCJ1c2VNZW1vIiwiYyIsImltYWdlQ29uZmlnRGVmYXVsdCIsImltYWdlU2l6ZXMiLCJzb3J0IiwiYSIsImIiLCJpc0RlZmF1bHRMb2FkZXIiLCJFcnJvciIsImN1c3RvbUltYWdlTG9hZGVyIiwiX3RtcCIsIm9iaiIsIl8iLCJvcHRzIiwibGF5b3V0VG9TdHlsZSIsImludHJpbnNpYyIsIm1heFdpZHRoIiwicmVzcG9uc2l2ZSIsImxheW91dFRvU2l6ZXMiLCJsYXlvdXRTdHlsZSIsImxheW91dFNpemVzIiwic3RhdGljU3JjIiwiYmx1cldpZHRoIiwiYmx1ckhlaWdodCIsInN0YXRpY0ltYWdlRGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyYXRpbyIsInJvdW5kIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyIsImJsdXJDb21wbGV0ZSIsInVzZVN0YXRlIiwic2hvd0FsdFRleHQiLCJpc05hTiIsIlZBTElEX0JMVVJfRVhUIiwidXJsU3RyIiwidXJsIiwiVVJMIiwiZXJyIiwicGF0aG5hbWUiLCJzZWFyY2giLCJsZWdhY3lLZXkiLCJsZWdhY3lWYWx1ZSIsImVudHJpZXMiLCJQZXJmb3JtYW5jZU9ic2VydmVyIiwiZW50cnlMaXN0IiwiZW50cnkiLCJnZXRFbnRyaWVzIiwiaW1nU3JjIiwiZWxlbWVudCIsImxjcEltYWdlIiwiZ2V0Iiwib2JzZXJ2ZSIsInR5cGUiLCJidWZmZXJlZCIsImxlZnQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImNvbG9yIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0SW1hZ2VCbHVyU3ZnIiwiZnVsbFVybCIsImUiLCJsb2NhdGlvbiIsImhyZWYiLCJzZXQiLCJsaW5rUHJvcHMiLCJpbWFnZVNyY1NldCIsImNyb3NzT3JpZ2luIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaW1nRWxlbWVudEFyZ3MiLCJrZXkiLCJyZWwiLCJhcyIsIl9kZWZhdWx0IiwiX19lc01vZHVsZSIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/image.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/next/dist/shared/lib/head.js":
-/*!***************************************************!*\
- !*** ./node_modules/next/dist/shared/lib/head.js ***!
- \***************************************************/
-/***/ ((module, exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\"use client\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.defaultHead = defaultHead;\nexports[\"default\"] = void 0;\nvar _extends = (__webpack_require__(/*! @swc/helpers/lib/_extends.js */ \"./node_modules/@swc/helpers/lib/_extends.js\")[\"default\"]);\nvar _interop_require_default = (__webpack_require__(/*! @swc/helpers/lib/_interop_require_default.js */ \"./node_modules/@swc/helpers/lib/_interop_require_default.js\")[\"default\"]);\nvar _interop_require_wildcard = (__webpack_require__(/*! @swc/helpers/lib/_interop_require_wildcard.js */ \"./node_modules/@swc/helpers/lib/_interop_require_wildcard.js\")[\"default\"]);\nvar _react = _interop_require_wildcard(__webpack_require__(/*! react */ \"react\"));\nvar _sideEffect = _interop_require_default(__webpack_require__(/*! ./side-effect */ \"./side-effect\"));\nvar _ampContext = __webpack_require__(/*! ./amp-context */ \"./amp-context\");\nvar _headManagerContext = __webpack_require__(/*! ./head-manager-context */ \"./head-manager-context\");\nvar _ampMode = __webpack_require__(/*! ./amp-mode */ \"./amp-mode\");\nvar _warnOnce = __webpack_require__(/*! ./utils/warn-once */ \"./utils/warn-once\");\nfunction defaultHead(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