35 lines
70 KiB
JavaScript
35 lines
70 KiB
JavaScript
"use strict";
|
|
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
exports.id = "components_MapComponent_js";
|
|
exports.ids = ["components_MapComponent_js"];
|
|
exports.modules = {
|
|
|
|
/***/ "./components/MapComponent.js":
|
|
/*!************************************!*\
|
|
!*** ./components/MapComponent.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 react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var leaflet__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! leaflet */ \"leaflet\");\n/* harmony import */ var leaflet__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(leaflet__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! leaflet/dist/leaflet.css */ \"./node_modules/leaflet/dist/leaflet.css\");\n/* harmony import */ var leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! leaflet-contextmenu/dist/leaflet.contextmenu.css */ \"./node_modules/leaflet-contextmenu/dist/leaflet.contextmenu.css\");\n/* harmony import */ var leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! leaflet-contextmenu */ \"leaflet-contextmenu\");\n/* harmony import */ var leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _config_config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config/config.js */ \"./config/config.js\");\n// components/MapComponent.js\n\n\n\n\n\n\n\nconst MapComponent = ({ locations, onLocationUpdate })=>{\n const mapRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); // Referenz auf das DIV-Element der Karte\n const [map, setMap] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); // Zustand der Karteninstanz\n const [online, setOnline] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(navigator.onLine); // Zustand der Internetverbindung\n const [dataStatic, setDataStatic] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); // Zustand für statische Daten\n const [dataStatus, setDataStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); // Zustand für Statusdaten\n const [dataIcons, setDataIcons] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); // Zustand für Icons\n const [dataSystem, setDataSystem] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); // Zustand für Systemdaten\n // Konstanten für die URLs\n const mapDataStaticUrl = _config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataStaticUrl;\n const mapDataStatusUrl = _config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataStatusUrl;\n const mapDataIconUrl = _config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataIconUrl;\n const mapDataSystemUrl = _config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataSystemUrl;\n console.log(\"dataStatic hier :\", dataStatic);\n console.log(\"map:\", map);\n //------------------------------------------\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const fetchData = async ()=>{\n try {\n console.log(\"Datenabruf gestartet...\");\n const response = await fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataStaticUrl);\n const jsonResponse = await response.json();\n // Prüfen, ob die Antwort das erwartete Format hat und Daten enthält\n if (jsonResponse && jsonResponse.length > 0 && jsonResponse[0].points) {\n console.log(\"dataStatic hier :\", dataStatic);\n console.log(\"map:\", map);\n setDataStatic(jsonResponse[0].points); // Zugriff auf das erste Objekt und dessen points-Array\n } else {\n console.error('Erwartete Daten im \"points\"-Array nicht gefunden', jsonResponse);\n setDataStatic([]);\n }\n } catch (error) {\n console.error(\"Fehler beim Laden der Daten: \", error);\n setDataStatic([]);\n }\n };\n fetchData();\n }, []); // Dependency-Array ist leer, um den Effekt nur beim Mount auszuführen\n //------------------------------------------\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n // Prüfen der Internetverbindung beim Start\n console.log(\"Pr\\xfcfen der Internetverbindung...\");\n checkInternet();\n // Asynchrones Laden der Kartendaten beim Initialisieren der Komponente\n const fetchData = async ()=>{\n try {\n console.log(\"Datenabruf gestartet...\");\n const responses = await Promise.all([\n fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataStaticUrl).then((res)=>res.json()),\n fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataStatusUrl).then((res)=>res.json()),\n fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataIconUrl).then((res)=>res.json()),\n fetch(_config_config_js__WEBPACK_IMPORTED_MODULE_6__.mapDataSystemUrl).then((res)=>res.json())\n ]);\n console.log(\"Daten erfolgreich geladen.\");\n setDataStatic(responses[0].Points);\n setDataStatus(responses[1].Statis);\n setDataIcons(responses[2].List);\n setDataSystem(responses[3].Systems.filter((system)=>system.Allow === 1));\n } catch (error) {\n console.error(\"Fehler beim Laden der Daten: \", error);\n }\n };\n fetchData();\n }, []); // Leeres Abhängigkeitsarray, um nur beim ersten Mount zu laden\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (map && Array.isArray(dataStatic)) {\n dataStatic.forEach((item)=>{\n const marker = leaflet__WEBPACK_IMPORTED_MODULE_2___default().marker([\n item.y,\n item.x\n ], {\n icon: leaflet__WEBPACK_IMPORTED_MODULE_2___default().icon({\n iconUrl: \"/path/to/icon.png\",\n iconSize: [\n 25,\n 41\n ],\n iconAnchor: [\n 12,\n 41\n ],\n popupAnchor: [\n 1,\n -34\n ],\n shadowSize: [\n 41,\n 41\n ] // Größe des Schattens\n })\n }).addTo(map);\n // Anpassen des Popups um relevante Daten anzuzeigen\n marker.bindPopup(`<b>${item.lD_Name}</b><br>${item.device}`).openPopup();\n });\n }\n }, [\n map,\n dataStatic\n ]); // Abhängigkeiten des Effekts\n const offlineTileLayer = \"../TileMap/mapTiles/{z}/{x}/{y}.png\";\n const onlineTileLayer = \"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\";\n // Create map layers\n const TALAS = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const ECI = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const ULAF = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const GSMModem = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const CiscoRouter = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const WAGO = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const Siemens = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const OTDR = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const WDM = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const GMA = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const Sonstige = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n const TALASICL = new (leaflet__WEBPACK_IMPORTED_MODULE_2___default().layerGroup)();\n let initialMap = [];\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n console.log(\"Server URL from config:\", _config_config_js__WEBPACK_IMPORTED_MODULE_6__.serverURL);\n if (false) {}\n }, []);\n // Funktionen zur Überwachung der Internetverbindung\n const checkInternet = ()=>{\n console.log(\"Checking internet connectivity...\");\n fetch(\"https://tile.openstreetmap.org/1/1/1.png\", {\n method: \"HEAD\"\n }).then((response)=>setOnline(response.ok)).catch(()=>setOnline(false));\n };\n // Initialisiere die Karte\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (mapRef.current && !map) {\n initialMap = leaflet__WEBPACK_IMPORTED_MODULE_2___default().map(mapRef.current, {\n center: [\n 53.111111,\n 8.4625\n ],\n zoom: 10,\n layers: [\n TALAS,\n ECI,\n ULAF,\n GSMModem,\n CiscoRouter,\n WAGO,\n Siemens,\n OTDR,\n WDM,\n GMA,\n Sonstige,\n TALASICL\n ],\n zoomControl: false,\n contextmenu: true,\n contextmenuItems: [\n {\n text: \"Station hinzuf\\xfcgen\",\n callback: showAddStationPopup\n },\n {\n text: \"Station \\xf6ffnen (Tab)\",\n icon: \"img/screen_new.png\",\n callback: newLink\n },\n {\n text: \"Station \\xf6ffnen\",\n icon: \"img/screen_same.png\",\n callback: sameLink\n },\n {\n text: \"Koordinaten\",\n icon: \"img/screen_same.png\",\n callback: lata\n },\n \"-\",\n {\n text: \"Reinzoomen\",\n callback: zoomIn\n },\n {\n text: \"Rauszoomen\",\n callback: zoomOut\n },\n {\n text: \"Hier zentrieren\",\n callback: centerHere\n }\n ]\n });\n leaflet__WEBPACK_IMPORTED_MODULE_2___default().tileLayer(online ? onlineTileLayer : offlineTileLayer, {\n attribution: '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n }).addTo(initialMap);\n setMap(initialMap);\n }\n }, [\n mapRef,\n map\n ]);\n // Handle online/offline status\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n window.addEventListener(\"online\", checkInternet);\n window.addEventListener(\"offline\", checkInternet);\n return ()=>{\n window.removeEventListener(\"online\", checkInternet);\n window.removeEventListener(\"offline\", checkInternet);\n };\n }, []);\n // Update map layers based on online status\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (map) {\n const newLayer = leaflet__WEBPACK_IMPORTED_MODULE_2___default().tileLayer(online ? onlineTileLayer : offlineTileLayer, {\n minZoom: 7,\n maxZoom: online ? 19 : 14,\n attribution: 'Map data \\xa9 <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n });\n map.eachLayer((layer)=>{\n if (layer instanceof (leaflet__WEBPACK_IMPORTED_MODULE_2___default().TileLayer)) {\n map.removeLayer(layer);\n }\n });\n newLayer.addTo(map);\n }\n }, [\n online,\n map\n ]);\n // Marker handling\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n // Remove old markers\n if (map) {\n map.eachLayer((layer)=>{\n if (layer instanceof (leaflet__WEBPACK_IMPORTED_MODULE_2___default().Marker)) {\n map.removeLayer(layer);\n }\n });\n // Add new markers\n locations.forEach((location)=>{\n const { latitude, longitude } = parsePoint(location.position);\n const marker = leaflet__WEBPACK_IMPORTED_MODULE_2___default().marker([\n latitude,\n longitude\n ], {\n icon: leaflet__WEBPACK_IMPORTED_MODULE_2___default().icon({\n iconUrl: \"/location.svg\",\n iconSize: [\n 34,\n 34\n ],\n iconAnchor: [\n 17,\n 34\n ],\n popupAnchor: [\n 0,\n -34\n ]\n }),\n draggable: true,\n id: location.idPoi\n });\n marker.bindPopup(`<b>${location.description || \"Unbekannt\"}</b><br>Type: ${location.idPoiTyp || \"N/A\"}<br>Lat: ${latitude.toFixed(5)}, Lng: ${longitude.toFixed(5)}`);\n marker.on(\"dragend\", function(e) {\n const newLat = e.target.getLatLng().lat;\n const newLng = e.target.getLatLng().lng;\n const markerId = e.target.options.id;\n updateLocationInDatabase(markerId, newLat, newLng).then(()=>{\n onLocationUpdate(markerId, newLat, newLng);\n });\n });\n marker.addTo(map);\n });\n }\n }, [\n map,\n locations,\n onLocationUpdate\n ]);\n //------------------------------------------\n function parsePoint(pointString) {\n const match = pointString.match(/POINT\\s*\\((\\d+(\\.\\d+)?)\\s+(\\d+(\\.\\d+)?)\\)/);\n if (match) {\n return {\n longitude: parseFloat(match[1]),\n latitude: parseFloat(match[3])\n };\n } else {\n // Handle the error or return a default/fallback value\n console.error(\"Invalid POINT format:\", pointString);\n return null; // Oder eine sinnvolle Standardantwort\n }\n }\n //----------------------------------\n //-----Kontextmenu----------------\n const newLink = (e)=>{\n try {\n if (!e.relatedTarget || !e.relatedTarget.options) {\n throw new Error(\"relatedTarget or options not defined\");\n }\n alert(\"Neues Fenster: \" + e.relatedTarget.options.test);\n window.open(`../devices/${e.relatedTarget.options.test}`, \"_blank\").focus();\n } catch (error) {\n console.error(\"Failed in newLink function:\", error);\n }\n };\n const sameLink = (e)=>{\n alert(e.relatedTarget.options.test);\n window.open(\"../devices/\" + e.relatedTarget.options.test, \"_parent\").focus();\n };\n const lata = (e)=>{\n alert(\"Breitengrad: \" + e.latlng.lat);\n };\n const zoomIn = (e)=>{\n initialMap.flyTo(e.latlng, 12);\n };\n const zoomOut = (e)=>{\n fly();\n };\n const centerHere = (e)=>{\n initialMap.panTo(e.latlng);\n };\n const showCoordinates = (e)=>{\n alert(\"Breitengrad: \" + e.latlng.lat + \"\\nL\\xe4ngengrad: \" + e.latlng.lng);\n };\n const showData = (e)=>{\n console.log(e);\n };\n const showTalas = (e)=>{\n map.addLayer(TALAS);\n loadData();\n };\n const hideTalas = (e)=>{\n map.removeLayer(TALAS);\n loadData();\n };\n const showGSM = (e)=>{\n map.addLayer(GMA);\n loadData();\n };\n const hideGSM = (e)=>{\n map.removeLayer(GMA);\n loadData();\n };\n //-----Kontextmenu----ende------------\n // Ensure this function is only called when map is initialized and available\n const showAddStationPopup = (e)=>{\n if (!initialMap) {\n console.log(\"Map is not initialized.\");\n return;\n }\n const popupContent = leaflet__WEBPACK_IMPORTED_MODULE_2___default().DomUtil.create(\"div\");\n popupContent.innerHTML = `\r\n <form id=\"addStationForm\" class=\"m-0 p-2 w-full\">\r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"name\" class=\"block mr-2 flex-none\">Name:</label>\r\n <input\r\n type=\"text\"\r\n id=\"name\"\r\n name=\"name\"\r\n placeholder=\"Name der Station\"\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"type\" class=\"block mr-3 flex-none\">Type:</label>\r\n <input\r\n type=\"text\"\r\n id=\"type\"\r\n name=\"type\"\r\n placeholder=\"Typ der Station\"\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\">\r\n <label for=\"lat\" class=\"block mr-2 flex-none\">Breitengrad:</label>\r\n <input\r\n type=\"text\"\r\n id=\"lat\"\r\n name=\"lat\"\r\n value=\"${e.latlng.lat.toFixed(5)}\"\r\n readonly\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"lng\" class=\"block mr-2 flex-none\">Längengrad:</label>\r\n <input\r\n type=\"text\"\r\n id=\"lng\"\r\n name=\"lng\"\r\n value=\"${e.latlng.lng.toFixed(5)}\"\r\n readonly\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <button\r\n type=\"submit\"\r\n class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full\"\r\n >\r\n Station hinzufügen\r\n </button>\r\n</form>\r\n `;\n leaflet__WEBPACK_IMPORTED_MODULE_2___default().popup().setLatLng(e.latlng).setContent(popupContent).openOn(initialMap);\n // Attach event listener here\n leaflet__WEBPACK_IMPORTED_MODULE_2___default().DomEvent.on(popupContent, \"submit\", handleSubmit);\n };\n /*\r\n const handleSubmit = (event) => {\r\n event.preventDefault();\r\n const form = event.target;\r\n const data = {\r\n name: form.name.value,\r\n type: form.type.value,\r\n latitude: form.lat.value,\r\n longitude: form.lng.value,\r\n };\r\n\r\n onAddLocation(name, type, lat, lng);\r\n console.log(\"Name: \", name, \"Type: \", type, \"Lat: \", lat, \"Lng: \", lng);\r\n map.closePopup();\r\n };\r\n*/ // Funktion zum Hinzufügen eines neuen Standorts\n async function handleSubmit(event) {\n event.preventDefault();\n const form = event.target;\n const data = {\n name: form.name.value,\n type: form.type.value,\n latitude: form.lat.value,\n longitude: form.lng.value\n };\n try {\n const response = await fetch(\"/api/addLocation\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(data)\n });\n const result = await response.json();\n if (response.ok) {\n console.log(\"Standort hinzugef\\xfcgt:\", result);\n alert(\"Standort erfolgreich hinzugef\\xfcgt!\");\n form.reset(); // Formular zurücksetzen\n // Hier könntest du weitere Aktionen durchführen, wie das Schließen des Popups oder das Aktualisieren der Marker auf der Karte\n } else {\n throw new Error(result.error || \"Ein unbekannter Fehler ist aufgetreten.\");\n }\n } catch (error) {\n console.error(\"Fehler beim Hinzuf\\xfcgen des Standorts:\", error);\n alert(error.message);\n }\n }\n function fly(stationValue) {\n var x = 51.41321407879154;\n var y = 7.739617925303934;\n var zoom = 7;\n /* for (var i = 0; i < dataStaticlength; i++) {\r\n var gisStatics = dataStatic[i];\r\n if (stationValue === gisStatics.Area_Name) {\r\n //console.log(gisStatics.X+\",\"+gisStatics.Y);\r\n x = gisStatics.X;\r\n y = gisStatics.Y;\r\n }\r\n }\r\n if (y === 7.739617925303934) {\r\n zoom = 8;\r\n } */ initialMap.flyTo([\n x,\n y\n ], zoom);\n /* var popup = new L.Popup();\r\n oms.addListener(\"click\", function (marker) {\r\n popup.setContent(marker.desc);\r\n popup.setLatLng(marker.getLatLng());\r\n map.openPopup(popup);\r\n });\r\n\r\n for (var i = 0; i < window.mapData.length; i++) {\r\n var datum = window.mapData[i];\r\n var loc = new L.LatLng(datum.lat, datum.lon);\r\n var marker = new L.Marker(loc);\r\n marker.desc = datum.d;\r\n map.addLayer(marker);\r\n //oms.addMarker(marker); // <-- here\r\n } */ }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n id: \"map\",\n ref: mapRef,\n style: {\n height: \"100vh\",\n width: \"100vw\",\n overflow: \"hidden\"\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\isa.LTW\\\\Desktop\\\\16.04.2024\\\\wwwrootTalas5NodeMap\\\\components\\\\MapComponent.js\",\n lineNumber: 487,\n columnNumber: 5\n }, undefined);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MapComponent);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QkFDZjVELFFBQVFDLEdBQUcsQ0FBQyw0QkFBeUIwSjtnQkFDckNyQyxNQUFNO2dCQUNONEIsS0FBS1UsS0FBSyxJQUFJLHdCQUF3QjtZQUN0Qyw4SEFBOEg7WUFDaEksT0FBTztnQkFDTCxNQUFNLElBQUl2QyxNQUNSc0MsT0FBT2xKLEtBQUssSUFBSTtZQUVwQjtRQUNGLEVBQUUsT0FBT0EsT0FBTztZQUNkVCxRQUFRUyxLQUFLLENBQUMsNENBQXlDQTtZQUN2RDZHLE1BQU03RyxNQUFNb0osT0FBTztRQUNyQjtJQUNGO0lBRUEsU0FBU2pDLElBQUlrQyxZQUFZO1FBQ3ZCLElBQUlqSSxJQUFJO1FBQ1IsSUFBSUQsSUFBSTtRQUNSLElBQUlvQyxPQUFPO1FBRVg7Ozs7Ozs7Ozs7TUFVRSxHQUNGUixXQUFXbUUsS0FBSyxDQUFDO1lBQUM5RjtZQUFHRDtTQUFFLEVBQUVvQztJQUV6Qjs7Ozs7Ozs7Ozs7Ozs7TUFjRSxHQUNKO0lBRUEscUJBQ0UsOERBQUMrRjtRQUNDOUQsSUFBRztRQUNIK0QsS0FBS25MO1FBQ0xvTCxPQUFPO1lBQUVDLFFBQVE7WUFBU0MsT0FBTztZQUFTQyxVQUFVO1FBQVM7Ozs7OztBQUduRTtBQUVBLGlFQUFlMUwsWUFBWUEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NvbXBvbmVudHMvTWFwQ29tcG9uZW50LmpzP2QwN2QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gY29tcG9uZW50cy9NYXBDb21wb25lbnQuanNcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgTCBmcm9tIFwibGVhZmxldFwiO1xyXG5pbXBvcnQgXCJsZWFmbGV0L2Rpc3QvbGVhZmxldC5jc3NcIjtcclxuaW1wb3J0IFwibGVhZmxldC1jb250ZXh0bWVudS9kaXN0L2xlYWZsZXQuY29udGV4dG1lbnUuY3NzXCI7XHJcbmltcG9ydCBcImxlYWZsZXQtY29udGV4dG1lbnVcIjtcclxuaW1wb3J0ICogYXMgY29uZmlnIGZyb20gJy4uL2NvbmZpZy9jb25maWcuanMnO1xyXG5jb25zdCBNYXBDb21wb25lbnQgPSAoeyBsb2NhdGlvbnMsIG9uTG9jYXRpb25VcGRhdGUgfSkgPT4ge1xyXG4gIGNvbnN0IG1hcFJlZiA9IHVzZVJlZihudWxsKTsgLy8gUmVmZXJlbnogYXVmIGRhcyBESVYtRWxlbWVudCBkZXIgS2FydGVcclxuICBjb25zdCBbbWFwLCBzZXRNYXBdID0gdXNlU3RhdGUobnVsbCk7IC8vIFp1c3RhbmQgZGVyIEthcnRlbmluc3RhbnpcclxuICBjb25zdCBbb25saW5lLCBzZXRPbmxpbmVdID0gdXNlU3RhdGUobmF2aWdhdG9yLm9uTGluZSk7IC8vIFp1c3RhbmQgZGVyIEludGVybmV0dmVyYmluZHVuZ1xyXG4gIGNvbnN0IFtkYXRhU3RhdGljLCBzZXREYXRhU3RhdGljXSA9IHVzZVN0YXRlKFtdKTsgLy8gWnVzdGFuZCBmw7xyIHN0YXRpc2NoZSBEYXRlblxyXG4gIGNvbnN0IFtkYXRhU3RhdHVzLCBzZXREYXRhU3RhdHVzXSA9IHVzZVN0YXRlKFtdKTsgLy8gWnVzdGFuZCBmw7xyIFN0YXR1c2RhdGVuXHJcbiAgY29uc3QgW2RhdGFJY29ucywgc2V0RGF0YUljb25zXSA9IHVzZVN0YXRlKFtdKTsgLy8gWnVzdGFuZCBmw7xyIEljb25zXHJcbiAgY29uc3QgW2RhdGFTeXN0ZW0sIHNldERhdGFTeXN0ZW1dID0gdXNlU3RhdGUoW10pOyAvLyBadXN0YW5kIGbDvHIgU3lzdGVtZGF0ZW5cclxuXHJcbiAgICAvLyBLb25zdGFudGVuIGbDvHIgZGllIFVSTHNcclxuICAgIGNvbnN0IG1hcERhdGFTdGF0aWNVcmwgPSBjb25maWcubWFwRGF0YVN0YXRpY1VybDtcclxuICAgIGNvbnN0IG1hcERhdGFTdGF0dXNVcmwgPSBjb25maWcubWFwRGF0YVN0YXR1c1VybDtcclxuICAgIGNvbnN0IG1hcERhdGFJY29uVXJsID0gY29uZmlnLm1hcERhdGFJY29uVXJsO1xyXG4gICAgY29uc3QgbWFwRGF0YVN5c3RlbVVybCA9IGNvbmZpZy5tYXBEYXRhU3lzdGVtVXJsO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdkYXRhU3RhdGljIGhpZXIgOicsIGRhdGFTdGF0aWMpO1xyXG4gICAgY29uc29sZS5sb2coJ21hcDonLCBtYXApO1xyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJEYXRlbmFicnVmIGdlc3RhcnRldC4uLlwiKTtcclxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goY29uZmlnLm1hcERhdGFTdGF0aWNVcmwpO1xyXG4gICAgICAgICAgY29uc3QganNvblJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgXHJcbiAgICAgICAgICAvLyBQcsO8ZmVuLCBvYiBkaWUgQW50d29ydCBkYXMgZXJ3YXJ0ZXRlIEZvcm1hdCBoYXQgdW5kIERhdGVuIGVudGjDpGx0XHJcbiAgICAgICAgICBpZiAoanNvblJlc3BvbnNlICYmIGpzb25SZXNwb25zZS5sZW5ndGggPiAwICYmIGpzb25SZXNwb25zZVswXS5wb2ludHMpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2RhdGFTdGF0aWMgaGllciA6JywgZGF0YVN0YXRpYyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXA6JywgbWFwKTtcclxuICAgICAgICAgICAgc2V0RGF0YVN0YXRpYyhqc29uUmVzcG9uc2VbMF0ucG9pbnRzKTsgLy8gWnVncmlmZiBhdWYgZGFzIGVyc3RlIE9iamVrdCB1bmQgZGVzc2VuIHBvaW50cy1BcnJheVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJ3YXJ0ZXRlIERhdGVuIGltIFwicG9pbnRzXCItQXJyYXkgbmljaHQgZ2VmdW5kZW4nLCBqc29uUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICBzZXREYXRhU3RhdGljKFtdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkZlaGxlciBiZWltIExhZGVuIGRlciBEYXRlbjogXCIsIGVycm9yKTtcclxuICAgICAgICAgIHNldERhdGFTdGF0aWMoW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIFxyXG4gICAgICBmZXRjaERhdGEoKTtcclxuICAgIH0sIFtdKTsgLy8gRGVwZW5kZW5jeS1BcnJheSBpc3QgbGVlciwgdW0gZGVuIEVmZmVrdCBudXIgYmVpbSBNb3VudCBhdXN6dWbDvGhyZW5cclxuICAgIFxyXG4gICAgICAgIFxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgLy8gUHLDvGZlbiBkZXIgSW50ZXJuZXR2ZXJiaW5kdW5nIGJlaW0gU3RhcnRcclxuICAgICAgY29uc29sZS5sb2coXCJQcsO8ZmVuIGRlciBJbnRlcm5ldHZlcmJpbmR1bmcuLi5cIik7XHJcbiAgICAgIGNoZWNrSW50ZXJuZXQoKTtcclxuICBcclxuICAgICAgLy8gQXN5bmNocm9uZXMgTGFkZW4gZGVyIEthcnRlbmRhdGVuIGJlaW0gSW5pdGlhbGlzaWVyZW4gZGVyIEtvbXBvbmVudGVcclxuICAgICAgY29uc3QgZmV0Y2hEYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGVuYWJydWYgZ2VzdGFydGV0Li4uXCIpO1xyXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICBmZXRjaChjb25maWcubWFwRGF0YVN0YXRpY1VybCkudGhlbihyZXMgPT4gcmVzLmpzb24oKSksXHJcbiAgICAgICAgICAgIGZldGNoKGNvbmZpZy5tYXBEYXRhU3RhdHVzVXJsKS50aGVuKHJlcyA9PiByZXMuanNvbigpKSxcclxuICAgICAgICAgICAgZmV0Y2goY29uZmlnLm1hcERhdGFJY29uVXJsKS50aGVuKHJlcyA9PiByZXMuanNvbigpKSxcclxuICAgICAgICAgICAgZmV0Y2goY29uZmlnLm1hcERhdGFTeXN0ZW1VcmwpLnRoZW4ocmVzID0+IHJlcy5qc29uKCkpXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0ZW4gZXJmb2xncmVpY2ggZ2VsYWRlbi5cIik7XHJcbiAgICAgICAgICBzZXREYXRhU3RhdGljKHJlc3BvbnNlc1swXS5Qb2ludHMpO1xyXG4gICAgICAgICAgc2V0RGF0YVN0YXR1cyhyZXNwb25zZXNbMV0uU3RhdGlzKTtcclxuICAgICAgICAgIHNldERhdGFJY29ucyhyZXNwb25zZXNbMl0uTGlzdCk7XHJcbiAgICAgICAgICBzZXREYXRhU3lzdGVtKHJlc3BvbnNlc1szXS5TeXN0ZW1zLmZpbHRlcihzeXN0ZW0gPT4gc3lzdGVtLkFsbG93ID09PSAxKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGZWhsZXIgYmVpbSBMYWRlbiBkZXIgRGF0ZW46IFwiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICBmZXRjaERhdGEoKTtcclxuICAgIH0sIFtdKTsvLyBMZWVyZXMgQWJow6RuZ2lna2VpdHNhcnJheSwgdW0gbnVyIGJlaW0gZXJzdGVuIE1vdW50IHp1IGxhZGVuXHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgaWYgKG1hcCAmJiBBcnJheS5pc0FycmF5KGRhdGFTdGF0aWMpKSB7XHJcbiAgICAgICAgZGF0YVN0YXRpYy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgY29uc3QgbWFya2VyID0gTC5tYXJrZXIoW2l0ZW0ueSwgaXRlbS54XSwgeyAgLy8gVmVyd2VuZHVuZyB2b24gaXRlbS55IHVuZCBpdGVtLnggc3RhdHQgaXRlbS5sYXRpdHVkZSB1bmQgaXRlbS5sb25naXR1ZGVcclxuICAgICAgICAgICAgaWNvbjogTC5pY29uKHtcclxuICAgICAgICAgICAgICBpY29uVXJsOiAnL3BhdGgvdG8vaWNvbi5wbmcnLCAgLy8gUGZhZCB6dW0gSWNvblxyXG4gICAgICAgICAgICAgIGljb25TaXplOiBbMjUsIDQxXSwgICAgICAgICAgICAvLyBHcsO2w59lIGRlcyBJY29uc1xyXG4gICAgICAgICAgICAgIGljb25BbmNob3I6IFsxMiwgNDFdLCAgICAgICAgICAvLyBBbmtlcnB1bmt0IGRlcyBJY29uc1xyXG4gICAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMSwgLTM0XSwgICAgICAgICAvLyBQb3NpdGlvbiBkZXMgUG9wdXBzIHJlbGF0aXYgenVtIEljb25cclxuICAgICAgICAgICAgICBzaGFkb3dTaXplOiBbNDEsIDQxXSAgICAgICAgICAgLy8gR3LDtsOfZSBkZXMgU2NoYXR0ZW5zXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KS5hZGRUbyhtYXApO1xyXG4gICAgXHJcbiAgICAgICAgICAvLyBBbnBhc3NlbiBkZXMgUG9wdXBzIHVtIHJlbGV2YW50ZSBEYXRlbiBhbnp1emVpZ2VuXHJcbiAgICAgICAgICBtYXJrZXIuYmluZFBvcHVwKGA8Yj4ke2l0ZW0ubERfTmFtZX08L2I+PGJyPiR7aXRlbS5kZXZpY2V9YCkub3BlblBvcHVwKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIFttYXAsIGRhdGFTdGF0aWNdKTsgLy8gQWJow6RuZ2lna2VpdGVuIGRlcyBFZmZla3RzXHJcbiAgICBcclxuXHJcbiAgY29uc3Qgb2ZmbGluZVRpbGVMYXllciA9IFwiLi4vVGlsZU1hcC9tYXBUaWxlcy97en0ve3h9L3t5fS5wbmdcIjtcclxuICBjb25zdCBvbmxpbmVUaWxlTGF5ZXIgPSBcImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nXCI7XHJcbiAgICAvLyBDcmVhdGUgbWFwIGxheWVyc1xyXG4gICAgY29uc3QgVEFMQVMgPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcbiAgICBjb25zdCBFQ0kgPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcbiAgICBjb25zdCBVTEFGID0gbmV3IEwubGF5ZXJHcm91cCgpO1xyXG4gICAgY29uc3QgR1NNTW9kZW0gPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcbiAgICBjb25zdCBDaXNjb1JvdXRlciA9IG5ldyBMLmxheWVyR3JvdXAoKTtcclxuICAgIGNvbnN0IFdBR08gPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcbiAgICBjb25zdCBTaWVtZW5zID0gbmV3IEwubGF5ZXJHcm91cCgpO1xyXG4gICAgY29uc3QgT1REUiA9IG5ldyBMLmxheWVyR3JvdXAoKTtcclxuICAgIGNvbnN0IFdETSA9IG5ldyBMLmxheWVyR3JvdXAoKTtcclxuICAgIGNvbnN0IEdNQSA9IG5ldyBMLmxheWVyR3JvdXAoKTtcclxuICAgIGNvbnN0IFNvbnN0aWdlID0gbmV3IEwubGF5ZXJHcm91cCgpO1xyXG4gICAgY29uc3QgVEFMQVNJQ0wgPSBuZXcgTC5sYXllckdyb3VwKCk7XHJcblxyXG4gIGxldCBpbml0aWFsTWFwID0gW107XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlNlcnZlciBVUkwgZnJvbSBjb25maWc6XCIsIGNvbmZpZy5zZXJ2ZXJVUkwpO1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIldpbmRvdyBoZWlnaHQgZnJvbSBjb25maWc6XCIsIGNvbmZpZy53aW5kb3dIZWlnaHQpO1xyXG4gICAgfVxyXG59LCBbXSk7XHJcblxyXG4gIC8vIEZ1bmt0aW9uZW4genVyIMOcYmVyd2FjaHVuZyBkZXIgSW50ZXJuZXR2ZXJiaW5kdW5nXHJcbiAgY29uc3QgY2hlY2tJbnRlcm5ldCA9ICgpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwiQ2hlY2tpbmcgaW50ZXJuZXQgY29ubmVjdGl2aXR5Li4uXCIpO1xyXG4gICAgZmV0Y2goXCJodHRwczovL3RpbGUub3BlbnN0cmVldG1hcC5vcmcvMS8xLzEucG5nXCIsIHsgbWV0aG9kOiBcIkhFQURcIiB9KVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHNldE9ubGluZShyZXNwb25zZS5vaykpXHJcbiAgICAgIC5jYXRjaCgoKSA9PiBzZXRPbmxpbmUoZmFsc2UpKTtcclxuICB9O1xyXG4gIC8vIEluaXRpYWxpc2llcmUgZGllIEthcnRlXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChtYXBSZWYuY3VycmVudCAmJiAhbWFwKSB7XHJcbiAgICAgIGluaXRpYWxNYXAgPSBMLm1hcChtYXBSZWYuY3VycmVudCwge1xyXG4gICAgICAgIGNlbnRlcjogWzUzLjExMTExMSwgOC40NjI1XSxcclxuICAgICAgICB6b29tOiAxMCxcclxuICAgICAgICBsYXllcnM6IFtUQUxBUywgRUNJLCBVTEFGLCBHU01Nb2RlbSwgQ2lzY29Sb3V0ZXIsIFdBR08sIFNpZW1lbnMsIE9URFIsIFdETSwgR01BLCBTb25zdGlnZSwgVEFMQVNJQ0xdLFxyXG4gICAgICAgIHpvb21Db250cm9sOiBmYWxzZSwgLy8gRGVha3RpdmllcmUgZGllIFN0YW5kYXJkLVpvb21zdGV1ZXJ1bmdcclxuICAgICAgICBjb250ZXh0bWVudTogdHJ1ZSxcclxuICAgICAgICBjb250ZXh0bWVudUl0ZW1zOiBbXHJcbiAgICAgICAgICB7IHRleHQ6IFwiU3RhdGlvbiBoaW56dWbDvGdlblwiLCBjYWxsYmFjazogc2hvd0FkZFN0YXRpb25Qb3B1cCB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlN0YXRpb24gw7ZmZm5lbiAoVGFiKVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImltZy9zY3JlZW5fbmV3LnBuZ1wiLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogbmV3TGluayxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiU3RhdGlvbiDDtmZmbmVuXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiaW1nL3NjcmVlbl9zYW1lLnBuZ1wiLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogc2FtZUxpbmssXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIktvb3JkaW5hdGVuXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiaW1nL3NjcmVlbl9zYW1lLnBuZ1wiLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogbGF0YSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIi1cIiwgLy8gRGl2aWRlclxyXG4gICAgICAgICAgeyB0ZXh0OiBcIlJlaW56b29tZW5cIiwgY2FsbGJhY2s6IHpvb21JbiB9LFxyXG4gICAgICAgICAgeyB0ZXh0OiBcIlJhdXN6b29tZW5cIiwgY2FsbGJhY2s6IHpvb21PdXQgfSxcclxuICAgICAgICAgIHsgdGV4dDogXCJIaWVyIHplbnRyaWVyZW5cIiwgY2FsbGJhY2s6IGNlbnRlckhlcmUgfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9KTtcclxuICAgICAgTC50aWxlTGF5ZXIob25saW5lID8gb25saW5lVGlsZUxheWVyIDogb2ZmbGluZVRpbGVMYXllciwge1xyXG4gICAgICAgIGF0dHJpYnV0aW9uOlxyXG4gICAgICAgICAgJyZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJyxcclxuICAgICAgfSkuYWRkVG8oaW5pdGlhbE1hcCk7XHJcblxyXG4gICAgICBzZXRNYXAoaW5pdGlhbE1hcCk7XHJcbiAgICB9XHJcbiAgfSwgW21hcFJlZiwgbWFwXSk7XHJcblxyXG4gIC8vIEhhbmRsZSBvbmxpbmUvb2ZmbGluZSBzdGF0dXNcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgY2hlY2tJbnRlcm5ldCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgY2hlY2tJbnRlcm5ldCk7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCBjaGVja0ludGVybmV0KTtcclxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIGNoZWNrSW50ZXJuZXQpO1xyXG4gICAgfTtcclxuICB9LCBbXSk7XHJcblxyXG4gIC8vIFVwZGF0ZSBtYXAgbGF5ZXJzIGJhc2VkIG9uIG9ubGluZSBzdGF0dXNcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKG1hcCkge1xyXG4gICAgICBjb25zdCBuZXdMYXllciA9IEwudGlsZUxheWVyKFxyXG4gICAgICAgIG9ubGluZSA/IG9ubGluZVRpbGVMYXllciA6IG9mZmxpbmVUaWxlTGF5ZXIsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWluWm9vbTogNyxcclxuICAgICAgICAgIG1heFpvb206IG9ubGluZSA/IDE5IDogMTQsXHJcbiAgICAgICAgICBhdHRyaWJ1dGlvbjpcclxuICAgICAgICAgICAgJ01hcCBkYXRhIMKpIDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1hcC5lYWNoTGF5ZXIoKGxheWVyKSA9PiB7XHJcbiAgICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgTC5UaWxlTGF5ZXIpIHtcclxuICAgICAgICAgIG1hcC5yZW1vdmVMYXllcihsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG5ld0xheWVyLmFkZFRvKG1hcCk7XHJcbiAgICB9XHJcbiAgfSwgW29ubGluZSwgbWFwXSk7XHJcblxyXG4gIC8vIE1hcmtlciBoYW5kbGluZ1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAvLyBSZW1vdmUgb2xkIG1hcmtlcnNcclxuICAgIGlmIChtYXApIHtcclxuICAgICAgbWFwLmVhY2hMYXllcigobGF5ZXIpID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBMLk1hcmtlcikge1xyXG4gICAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gQWRkIG5ldyBtYXJrZXJzXHJcbiAgICAgIGxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSB9ID0gcGFyc2VQb2ludChsb2NhdGlvbi5wb3NpdGlvbik7XHJcbiAgICAgICAgY29uc3QgbWFya2VyID0gTC5tYXJrZXIoW2xhdGl0dWRlLCBsb25naXR1ZGVdLCB7XHJcbiAgICAgICAgICBpY29uOiBMLmljb24oe1xyXG4gICAgICAgICAgICBpY29uVXJsOiBcIi9sb2NhdGlvbi5zdmdcIixcclxuICAgICAgICAgICAgaWNvblNpemU6IFszNCwgMzRdLFxyXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMTcsIDM0XSxcclxuICAgICAgICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzRdLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBkcmFnZ2FibGU6IHRydWUsXHJcbiAgICAgICAgICBpZDogbG9jYXRpb24uaWRQb2ksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG1hcmtlci5iaW5kUG9wdXAoXHJcbiAgICAgICAgICBgPGI+JHtsb2NhdGlvbi5kZXNjcmlwdGlvbiB8fCBcIlVuYmVrYW5udFwifTwvYj48YnI+VHlwZTogJHtsb2NhdGlvbi5pZFBvaVR5cCB8fCBcIk4vQVwifTxicj5MYXQ6ICR7bGF0aXR1ZGUudG9GaXhlZCg1KX0sIExuZzogJHtsb25naXR1ZGUudG9GaXhlZCg1KX1gXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbWFya2VyLm9uKFwiZHJhZ2VuZFwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgY29uc3QgbmV3TGF0ID0gZS50YXJnZXQuZ2V0TGF0TG5nKCkubGF0O1xyXG4gICAgICAgICAgY29uc3QgbmV3TG5nID0gZS50YXJnZXQuZ2V0TGF0TG5nKCkubG5nO1xyXG4gICAgICAgICAgY29uc3QgbWFya2VySWQgPSBlLnRhcmdldC5vcHRpb25zLmlkO1xyXG4gICAgICAgICAgdXBkYXRlTG9jYXRpb25JbkRhdGFiYXNlKG1hcmtlcklkLCBuZXdMYXQsIG5ld0xuZykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIG9uTG9jYXRpb25VcGRhdGUobWFya2VySWQsIG5ld0xhdCwgbmV3TG5nKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBtYXJrZXIuYWRkVG8obWFwKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSwgW21hcCwgbG9jYXRpb25zLCBvbkxvY2F0aW9uVXBkYXRlXSk7XHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgZnVuY3Rpb24gcGFyc2VQb2ludChwb2ludFN0cmluZykge1xyXG4gICAgY29uc3QgbWF0Y2ggPSBwb2ludFN0cmluZy5tYXRjaChcclxuICAgICAgL1BPSU5UXFxzKlxcKChcXGQrKFxcLlxcZCspPylcXHMrKFxcZCsoXFwuXFxkKyk/KVxcKS9cclxuICAgICk7XHJcbiAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBsb25naXR1ZGU6IHBhcnNlRmxvYXQobWF0Y2hbMV0pLFxyXG4gICAgICAgIGxhdGl0dWRlOiBwYXJzZUZsb2F0KG1hdGNoWzNdKSwgLy8gQWNodHVuZzogSW5kZXggMyBmw7xyIGRpZSB6d2VpdGUgS29vcmRpbmF0ZSwgd2VnZW4gZGVyIEdydXBwZSAoXFwuXFxkKyk/XHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBIYW5kbGUgdGhlIGVycm9yIG9yIHJldHVybiBhIGRlZmF1bHQvZmFsbGJhY2sgdmFsdWVcclxuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgUE9JTlQgZm9ybWF0OlwiLCBwb2ludFN0cmluZyk7XHJcbiAgICAgIHJldHVybiBudWxsOyAvLyBPZGVyIGVpbmUgc2lubnZvbGxlIFN0YW5kYXJkYW50d29ydFxyXG4gICAgfVxyXG4gIH1cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLy0tLS0tS29udGV4dG1lbnUtLS0tLS0tLS0tLS0tLS0tXHJcbiAgY29uc3QgbmV3TGluayA9IChlKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIWUucmVsYXRlZFRhcmdldCB8fCAhZS5yZWxhdGVkVGFyZ2V0Lm9wdGlvbnMpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWxhdGVkVGFyZ2V0IG9yIG9wdGlvbnMgbm90IGRlZmluZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgYWxlcnQoXCJOZXVlcyBGZW5zdGVyOiBcIiArIGUucmVsYXRlZFRhcmdldC5vcHRpb25zLnRlc3QpO1xyXG4gICAgICB3aW5kb3dcclxuICAgICAgICAub3BlbihgLi4vZGV2aWNlcy8ke2UucmVsYXRlZFRhcmdldC5vcHRpb25zLnRlc3R9YCwgXCJfYmxhbmtcIilcclxuICAgICAgICAuZm9jdXMoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgaW4gbmV3TGluayBmdW5jdGlvbjpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNhbWVMaW5rID0gKGUpID0+IHtcclxuICAgIGFsZXJ0KGUucmVsYXRlZFRhcmdldC5vcHRpb25zLnRlc3QpO1xyXG4gICAgd2luZG93XHJcbiAgICAgIC5vcGVuKFwiLi4vZGV2aWNlcy9cIiArIGUucmVsYXRlZFRhcmdldC5vcHRpb25zLnRlc3QsIFwiX3BhcmVudFwiKVxyXG4gICAgICAuZm9jdXMoKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBsYXRhID0gKGUpID0+IHtcclxuICAgIGFsZXJ0KFwiQnJlaXRlbmdyYWQ6IFwiICsgZS5sYXRsbmcubGF0KTtcclxuICB9O1xyXG5cclxuICBjb25zdCB6b29tSW4gPSAoZSkgPT4ge1xyXG4gICAgaW5pdGlhbE1hcC5mbHlUbyhlLmxhdGxuZywgMTIpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHpvb21PdXQgPSAoZSkgPT4ge1xyXG4gICAgZmx5KCk7XHJcbiAgfTtcclxuICBjb25zdCBjZW50ZXJIZXJlID0gKGUpID0+IHtcclxuICAgIGluaXRpYWxNYXAucGFuVG8oZS5sYXRsbmcpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNob3dDb29yZGluYXRlcyA9IChlKSA9PiB7XHJcbiAgICBhbGVydChcIkJyZWl0ZW5ncmFkOiBcIiArIGUubGF0bG5nLmxhdCArIFwiXFxuTMOkbmdlbmdyYWQ6IFwiICsgZS5sYXRsbmcubG5nKTtcclxuICB9O1xyXG4gIGNvbnN0IHNob3dEYXRhID0gKGUpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gIH07XHJcbiAgY29uc3Qgc2hvd1RhbGFzID0gKGUpID0+IHtcclxuICAgIG1hcC5hZGRMYXllcihUQUxBUyk7XHJcbiAgICBsb2FkRGF0YSgpO1xyXG4gIH07XHJcbiAgY29uc3QgaGlkZVRhbGFzID0gKGUpID0+IHtcclxuICAgIG1hcC5yZW1vdmVMYXllcihUQUxBUyk7XHJcbiAgICBsb2FkRGF0YSgpO1xyXG4gIH07XHJcbiAgY29uc3Qgc2hvd0dTTSA9IChlKSA9PiB7XHJcbiAgICBtYXAuYWRkTGF5ZXIoR01BKTtcclxuICAgIGxvYWREYXRhKCk7XHJcbiAgfTtcclxuICBjb25zdCBoaWRlR1NNID0gKGUpID0+IHtcclxuICAgIG1hcC5yZW1vdmVMYXllcihHTUEpO1xyXG4gICAgbG9hZERhdGEoKTtcclxuICB9O1xyXG4gIC8vLS0tLS1Lb250ZXh0bWVudS0tLS1lbmRlLS0tLS0tLS0tLS0tXHJcbiAgLy8gRW5zdXJlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBtYXAgaXMgaW5pdGlhbGl6ZWQgYW5kIGF2YWlsYWJsZVxyXG4gIGNvbnN0IHNob3dBZGRTdGF0aW9uUG9wdXAgPSAoZSkgPT4ge1xyXG4gICAgaWYgKCFpbml0aWFsTWFwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTWFwIGlzIG5vdCBpbml0aWFsaXplZC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwb3B1cENvbnRlbnQgPSBMLkRvbVV0aWwuY3JlYXRlKFwiZGl2XCIpO1xyXG4gICAgcG9wdXBDb250ZW50LmlubmVySFRNTCA9IGBcclxuICA8Zm9ybSBpZD1cImFkZFN0YXRpb25Gb3JtXCIgY2xhc3M9XCJtLTAgcC0yIHctZnVsbFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtYi00XCI+ICAgICAgXHJcbiAgICA8bGFiZWwgZm9yPVwibmFtZVwiIGNsYXNzPVwiYmxvY2sgbXItMiBmbGV4LW5vbmVcIj5OYW1lOjwvbGFiZWw+XHJcbiAgICA8aW5wdXRcclxuICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICBuYW1lPVwibmFtZVwiXHJcbiAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSBkZXIgU3RhdGlvblwiXHJcbiAgICAgIGNsYXNzPVwiYmxvY2sgcC0yIGZsZXgtZ3JvdyBib3JkZXItMiBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1tZCB0ZXh0LXNtXCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG1iLTRcIj4gICBcclxuICAgIDxsYWJlbCBmb3I9XCJ0eXBlXCIgY2xhc3M9XCJibG9jayBtci0zIGZsZXgtbm9uZVwiPlR5cGU6PC9sYWJlbD5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIGlkPVwidHlwZVwiXHJcbiAgICAgIG5hbWU9XCJ0eXBlXCJcclxuICAgICAgcGxhY2Vob2xkZXI9XCJUeXAgZGVyIFN0YXRpb25cIlxyXG4gICAgICBjbGFzcz1cImJsb2NrIHAtMiBmbGV4LWdyb3cgYm9yZGVyLTIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbWQgdGV4dC1zbVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtYi00XCI+XHJcbiAgICA8bGFiZWwgZm9yPVwibGF0XCIgY2xhc3M9XCJibG9jayBtci0yIGZsZXgtbm9uZVwiPkJyZWl0ZW5ncmFkOjwvbGFiZWw+XHJcbiAgICA8aW5wdXRcclxuICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICBpZD1cImxhdFwiXHJcbiAgICAgIG5hbWU9XCJsYXRcIlxyXG4gICAgICB2YWx1ZT1cIiR7ZS5sYXRsbmcubGF0LnRvRml4ZWQoNSl9XCJcclxuICAgICAgcmVhZG9ubHlcclxuICAgICAgY2xhc3M9XCJibG9jayBwLTIgZmxleC1ncm93IGJvcmRlci0yIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLW1kIHRleHQtc21cIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuICAgXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG1iLTRcIj4gICBcclxuICAgIDxsYWJlbCBmb3I9XCJsbmdcIiBjbGFzcz1cImJsb2NrIG1yLTIgZmxleC1ub25lXCI+TMOkbmdlbmdyYWQ6PC9sYWJlbD5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIGlkPVwibG5nXCJcclxuICAgICAgbmFtZT1cImxuZ1wiXHJcbiAgICAgIHZhbHVlPVwiJHtlLmxhdGxuZy5sbmcudG9GaXhlZCg1KX1cIlxyXG4gICAgICByZWFkb25seVxyXG4gICAgICBjbGFzcz1cImJsb2NrIHAtMiBmbGV4LWdyb3cgYm9yZGVyLTIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbWQgdGV4dC1zbVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgY2xhc3M9XCJiZy1ibHVlLTUwMCBob3ZlcjpiZy1ibHVlLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBweS0yIHB4LTQgcm91bmRlZCB3LWZ1bGxcIlxyXG4gID5cclxuICAgIFN0YXRpb24gaGluenVmw7xnZW5cclxuICA8L2J1dHRvbj5cclxuPC9mb3JtPlxyXG4gIGA7XHJcblxyXG4gICAgTC5wb3B1cCgpLnNldExhdExuZyhlLmxhdGxuZykuc2V0Q29udGVudChwb3B1cENvbnRlbnQpLm9wZW5Pbihpbml0aWFsTWFwKTtcclxuXHJcbiAgICAvLyBBdHRhY2ggZXZlbnQgbGlzdGVuZXIgaGVyZVxyXG4gICAgTC5Eb21FdmVudC5vbihwb3B1cENvbnRlbnQsIFwic3VibWl0XCIsIGhhbmRsZVN1Ym1pdCk7XHJcbiAgfTtcclxuXHJcbiAgLypcclxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoZXZlbnQpID0+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBmb3JtID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgbmFtZTogZm9ybS5uYW1lLnZhbHVlLFxyXG4gICAgICB0eXBlOiBmb3JtLnR5cGUudmFsdWUsXHJcbiAgICAgIGxhdGl0dWRlOiBmb3JtLmxhdC52YWx1ZSxcclxuICAgICAgbG9uZ2l0dWRlOiBmb3JtLmxuZy52YWx1ZSxcclxuICAgIH07XHJcblxyXG4gICAgb25BZGRMb2NhdGlvbihuYW1lLCB0eXBlLCBsYXQsIGxuZyk7XHJcbiAgICBjb25zb2xlLmxvZyhcIk5hbWU6IFwiLCBuYW1lLCBcIlR5cGU6IFwiLCB0eXBlLCBcIkxhdDogXCIsIGxhdCwgXCJMbmc6IFwiLCBsbmcpO1xyXG4gICAgbWFwLmNsb3NlUG9wdXAoKTtcclxuICB9O1xyXG4qL1xyXG4gIC8vIEZ1bmt0aW9uIHp1bSBIaW56dWbDvGdlbiBlaW5lcyBuZXVlbiBTdGFuZG9ydHNcclxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVTdWJtaXQoZXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBmb3JtID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgbmFtZTogZm9ybS5uYW1lLnZhbHVlLFxyXG4gICAgICB0eXBlOiBmb3JtLnR5cGUudmFsdWUsXHJcbiAgICAgIGxhdGl0dWRlOiBmb3JtLmxhdC52YWx1ZSxcclxuICAgICAgbG9uZ2l0dWRlOiBmb3JtLmxuZy52YWx1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9hcGkvYWRkTG9jYXRpb25cIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlN0YW5kb3J0IGhpbnp1Z2Vmw7xndDpcIiwgcmVzdWx0KTtcclxuICAgICAgICBhbGVydChcIlN0YW5kb3J0IGVyZm9sZ3JlaWNoIGhpbnp1Z2Vmw7xndCFcIik7XHJcbiAgICAgICAgZm9ybS5yZXNldCgpOyAvLyBGb3JtdWxhciB6dXLDvGNrc2V0emVuXHJcbiAgICAgICAgLy8gSGllciBrw7ZubnRlc3QgZHUgd2VpdGVyZSBBa3Rpb25lbiBkdXJjaGbDvGhyZW4sIHdpZSBkYXMgU2NobGllw59lbiBkZXMgUG9wdXBzIG9kZXIgZGFzIEFrdHVhbGlzaWVyZW4gZGVyIE1hcmtlciBhdWYgZGVyIEthcnRlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgcmVzdWx0LmVycm9yIHx8IFwiRWluIHVuYmVrYW5udGVyIEZlaGxlciBpc3QgYXVmZ2V0cmV0ZW4uXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmVobGVyIGJlaW0gSGluenVmw7xnZW4gZGVzIFN0YW5kb3J0czpcIiwgZXJyb3IpO1xyXG4gICAgICBhbGVydChlcnJvci5tZXNzYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZseShzdGF0aW9uVmFsdWUpIHtcclxuICAgIHZhciB4ID0gNTEuNDEzMjE0MDc4NzkxNTQ7XHJcbiAgICB2YXIgeSA9IDcuNzM5NjE3OTI1MzAzOTM0O1xyXG4gICAgdmFyIHpvb20gPSA3O1xyXG5cclxuICAgIC8qICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFTdGF0aWNsZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgZ2lzU3RhdGljcyA9IGRhdGFTdGF0aWNbaV07XHJcbiAgICAgIGlmIChzdGF0aW9uVmFsdWUgPT09IGdpc1N0YXRpY3MuQXJlYV9OYW1lKSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhnaXNTdGF0aWNzLlgrXCIsXCIrZ2lzU3RhdGljcy5ZKTtcclxuICAgICAgICB4ID0gZ2lzU3RhdGljcy5YO1xyXG4gICAgICAgIHkgPSBnaXNTdGF0aWNzLlk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh5ID09PSA3LjczOTYxNzkyNTMwMzkzNCkge1xyXG4gICAgICB6b29tID0gODtcclxuICAgIH0gKi9cclxuICAgIGluaXRpYWxNYXAuZmx5VG8oW3gsIHldLCB6b29tKTtcclxuXHJcbiAgICAvKiB2YXIgcG9wdXAgPSBuZXcgTC5Qb3B1cCgpO1xyXG4gICAgb21zLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKG1hcmtlcikge1xyXG4gICAgICBwb3B1cC5zZXRDb250ZW50KG1hcmtlci5kZXNjKTtcclxuICAgICAgcG9wdXAuc2V0TGF0TG5nKG1hcmtlci5nZXRMYXRMbmcoKSk7XHJcbiAgICAgIG1hcC5vcGVuUG9wdXAocG9wdXApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aW5kb3cubWFwRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgZGF0dW0gPSB3aW5kb3cubWFwRGF0YVtpXTtcclxuICAgICAgdmFyIGxvYyA9IG5ldyBMLkxhdExuZyhkYXR1bS5sYXQsIGRhdHVtLmxvbik7XHJcbiAgICAgIHZhciBtYXJrZXIgPSBuZXcgTC5NYXJrZXIobG9jKTtcclxuICAgICAgbWFya2VyLmRlc2MgPSBkYXR1bS5kO1xyXG4gICAgICBtYXAuYWRkTGF5ZXIobWFya2VyKTtcclxuICAgICAgLy9vbXMuYWRkTWFya2VyKG1hcmtlcik7ICAvLyA8LS0gaGVyZVxyXG4gICAgfSAqL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgaWQ9XCJtYXBcIlxyXG4gICAgICByZWY9e21hcFJlZn1cclxuICAgICAgc3R5bGU9e3sgaGVpZ2h0OiBcIjEwMHZoXCIsIHdpZHRoOiBcIjEwMHZ3XCIsIG92ZXJmbG93OiBcImhpZGRlblwiIH19XHJcbiAgICA+PC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hcENvbXBvbmVudDtcclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJMIiwiY29uZmlnIiwiTWFwQ29tcG9uZW50IiwibG9jYXRpb25zIiwib25Mb2NhdGlvblVwZGF0ZSIsIm1hcFJlZiIsIm1hcCIsInNldE1hcCIsIm9ubGluZSIsInNldE9ubGluZSIsIm5hdmlnYXRvciIsIm9uTGluZSIsImRhdGFTdGF0aWMiLCJzZXREYXRhU3RhdGljIiwiZGF0YVN0YXR1cyIsInNldERhdGFTdGF0dXMiLCJkYXRhSWNvbnMiLCJzZXREYXRhSWNvbnMiLCJkYXRhU3lzdGVtIiwic2V0RGF0YVN5c3RlbSIsIm1hcERhdGFTdGF0aWNVcmwiLCJtYXBEYXRhU3RhdHVzVXJsIiwibWFwRGF0YUljb25VcmwiLCJtYXBEYXRhU3lzdGVtVXJsIiwiY29uc29sZSIsImxvZyIsImZldGNoRGF0YSIsInJlc3BvbnNlIiwiZmV0Y2giLCJqc29uUmVzcG9uc2UiLCJqc29uIiwibGVuZ3RoIiwicG9pbnRzIiwiZXJyb3IiLCJjaGVja0ludGVybmV0IiwicmVzcG9uc2VzIiwiUHJvbWlzZSIsImFsbCIsInRoZW4iLCJyZXMiLCJQb2ludHMiLCJTdGF0aXMiLCJMaXN0IiwiU3lzdGVtcyIsImZpbHRlciIsInN5c3RlbSIsIkFsbG93IiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsIml0ZW0iLCJtYXJrZXIiLCJ5IiwieCIsImljb24iLCJpY29uVXJsIiwiaWNvblNpemUiLCJpY29uQW5jaG9yIiwicG9wdXBBbmNob3IiLCJzaGFkb3dTaXplIiwiYWRkVG8iLCJiaW5kUG9wdXAiLCJsRF9OYW1lIiwiZGV2aWNlIiwib3BlblBvcHVwIiwib2ZmbGluZVRpbGVMYXllciIsIm9ubGluZVRpbGVMYXllciIsIlRBTEFTIiwibGF5ZXJHcm91cCIsIkVDSSIsIlVMQUYiLCJHU01Nb2RlbSIsIkNpc2NvUm91dGVyIiwiV0FHTyIsIlNpZW1lbnMiLCJPVERSIiwiV0RNIiwiR01BIiwiU29uc3RpZ2UiLCJUQUxBU0lDTCIsImluaXRpYWxNYXAiLCJzZXJ2ZXJVUkwiLCJ3aW5kb3dIZWlnaHQiLCJtZXRob2QiLCJvayIsImNhdGNoIiwiY3VycmVudCIsImNlbnRlciIsInpvb20iLCJsYXllcnMiLCJ6b29tQ29udHJvbCIsImNvbnRleHRtZW51IiwiY29udGV4dG1lbnVJdGVtcyIsInRleHQiLCJjYWxsYmFjayIsInNob3dBZGRTdGF0aW9uUG9wdXAiLCJuZXdMaW5rIiwic2FtZUxpbmsiLCJsYXRhIiwiem9vbUluIiwiem9vbU91dCIsImNlbnRlckhlcmUiLCJ0aWxlTGF5ZXIiLCJhdHRyaWJ1dGlvbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibmV3TGF5ZXIiLCJtaW5ab29tIiwibWF4Wm9vbSIsImVhY2hMYXllciIsImxheWVyIiwiVGlsZUxheWVyIiwicmVtb3ZlTGF5ZXIiLCJNYXJrZXIiLCJsb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwicGFyc2VQb2ludCIsInBvc2l0aW9uIiwiZHJhZ2dhYmxlIiwiaWQiLCJpZFBvaSIsImRlc2NyaXB0aW9uIiwiaWRQb2lUeXAiLCJ0b0ZpeGVkIiwib24iLCJlIiwibmV3TGF0IiwidGFyZ2V0IiwiZ2V0TGF0TG5nIiwibGF0IiwibmV3TG5nIiwibG5nIiwibWFya2VySWQiLCJvcHRpb25zIiwidXBkYXRlTG9jYXRpb25JbkRhdGFiYXNlIiwicG9pbnRTdHJpbmciLCJtYXRjaCIsInBhcnNlRmxvYXQiLCJyZWxhdGVkVGFyZ2V0IiwiRXJyb3IiLCJhbGVydCIsInRlc3QiLCJvcGVuIiwiZm9jdXMiLCJsYXRsbmciLCJmbHlUbyIsImZseSIsInBhblRvIiwic2hvd0Nvb3JkaW5hdGVzIiwic2hvd0RhdGEiLCJzaG93VGFsYXMiLCJhZGRMYXllciIsImxvYWREYXRhIiwiaGlkZVRhbGFzIiwic2hvd0dTTSIsImhpZGVHU00iLCJwb3B1cENvbnRlbnQiLCJEb21VdGlsIiwiY3JlYXRlIiwiaW5uZXJIVE1MIiwicG9wdXAiLCJzZXRMYXRMbmciLCJzZXRDb250ZW50Iiwib3Blbk9uIiwiRG9tRXZlbnQiLCJoYW5kbGVTdWJtaXQiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiZm9ybSIsImRhdGEiLCJuYW1lIiwidmFsdWUiLCJ0eXBlIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzdWx0IiwicmVzZXQiLCJtZXNzYWdlIiwic3RhdGlvblZhbHVlIiwiZGl2IiwicmVmIiwic3R5bGUiLCJoZWlnaHQiLCJ3aWR0aCIsIm92ZXJmbG93Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/MapComponent.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./config/config.js":
|
|
/*!**************************!*\
|
|
!*** ./config/config.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 */ c: () => (/* binding */ c),\n/* harmony export */ fullSideMenu: () => (/* binding */ fullSideMenu),\n/* harmony export */ mapDataIconUrl: () => (/* binding */ mapDataIconUrl),\n/* harmony export */ mapDataMeasures: () => (/* binding */ mapDataMeasures),\n/* harmony export */ mapDataStaticUrl: () => (/* binding */ mapDataStaticUrl),\n/* harmony export */ mapDataStatusUrl: () => (/* binding */ mapDataStatusUrl),\n/* harmony export */ mapDataSystemUrl: () => (/* binding */ mapDataSystemUrl),\n/* harmony export */ mapIconsOfflineURL: () => (/* binding */ mapIconsOfflineURL),\n/* harmony export */ mapMeasuresOfflineURL: () => (/* binding */ mapMeasuresOfflineURL),\n/* harmony export */ mapStaticOfflineURL: () => (/* binding */ mapStaticOfflineURL),\n/* harmony export */ mapStatusOfflineURL: () => (/* binding */ mapStatusOfflineURL),\n/* harmony export */ mapSystemOfflineURL: () => (/* binding */ mapSystemOfflineURL),\n/* harmony export */ mapVersion: () => (/* binding */ mapVersion),\n/* harmony export */ offlineData: () => (/* binding */ offlineData),\n/* harmony export */ serverURL: () => (/* binding */ serverURL),\n/* harmony export */ standardSideMenu: () => (/* binding */ standardSideMenu),\n/* harmony export */ url: () => (/* binding */ url),\n/* harmony export */ url_string: () => (/* binding */ url_string),\n/* harmony export */ user: () => (/* binding */ user),\n/* harmony export */ windowHeight: () => (/* binding */ windowHeight)\n/* harmony export */ });\n// Definieren der grundlegenden Umgebungseinstellungen und Konfigurationen der Karte\nconst mapVersion = \"0.5.3\"; // Die Version der verwendeten Karte\nconst standardSideMenu = true; // Einstellung, ob ein standardmäßiges Seitenmenü verwendet wird\nconst fullSideMenu = false; // Einstellung, ob ein vollständiges Seitenmenü verwendet wird\nconst offlineData = false; // Schalter, um anzugeben, ob Daten offline verfügbar gemacht werden sollen\nconst serverURL = \"/api\"; // Die Basis-URL des Servers, von dem Daten bezogen werden\n// Initialisieren von Variablen, die später im Browserkontext gesetzt werden\nlet windowHeight, url_string, url, c, user;\nlet mapDataStaticUrl, mapDataStatusUrl, mapDataMeasures, mapDataIconUrl, mapDataSystemUrl;\nlet mapStaticOfflineURL, mapStatusOfflineURL, mapSystemOfflineURL, mapIconsOfflineURL, mapMeasuresOfflineURL;\n// Prüfen, ob das Code im Browser ausgeführt wird\nif (false) {}\n// Export der definierten Variablen und URLs, damit sie in anderen Teilen der Anwendung verwendet werden können\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb25maWcvY29uZmlnLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0ZBQW9GO0FBQ3BGLE1BQU1BLGFBQWEsU0FBUyxvQ0FBb0M7QUFDaEUsTUFBTUMsbUJBQW1CLE1BQU0sZ0VBQWdFO0FBQy9GLE1BQU1DLGVBQWUsT0FBTyw4REFBOEQ7QUFDMUYsTUFBTUMsY0FBYyxPQUFPLDJFQUEyRTtBQUN0RyxNQUFNQyxZQUFZLFFBQVEsMERBQTBEO0FBRXBGLDRFQUE0RTtBQUM1RSxJQUFJQyxjQUFjQyxZQUFZQyxLQUFLQyxHQUFHQztBQUN0QyxJQUFJQyxrQkFDRkMsa0JBQ0FDLGlCQUNBQyxnQkFDQUM7QUFDRixJQUFJQyxxQkFDRkMscUJBQ0FDLHFCQUNBQyxvQkFDQUM7QUFFRixpREFBaUQ7QUFDakQsSUFBSSxLQUE2QixFQUFFLEVBMEJsQztBQUVELCtHQUErRztBQXNCN0ciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb25maWcvY29uZmlnLmpzP2FhMDQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gRGVmaW5pZXJlbiBkZXIgZ3J1bmRsZWdlbmRlbiBVbWdlYnVuZ3NlaW5zdGVsbHVuZ2VuIHVuZCBLb25maWd1cmF0aW9uZW4gZGVyIEthcnRlXHJcbmNvbnN0IG1hcFZlcnNpb24gPSBcIjAuNS4zXCI7IC8vIERpZSBWZXJzaW9uIGRlciB2ZXJ3ZW5kZXRlbiBLYXJ0ZVxyXG5jb25zdCBzdGFuZGFyZFNpZGVNZW51ID0gdHJ1ZTsgLy8gRWluc3RlbGx1bmcsIG9iIGVpbiBzdGFuZGFyZG3DpMOfaWdlcyBTZWl0ZW5tZW7DvCB2ZXJ3ZW5kZXQgd2lyZFxyXG5jb25zdCBmdWxsU2lkZU1lbnUgPSBmYWxzZTsgLy8gRWluc3RlbGx1bmcsIG9iIGVpbiB2b2xsc3TDpG5kaWdlcyBTZWl0ZW5tZW7DvCB2ZXJ3ZW5kZXQgd2lyZFxyXG5jb25zdCBvZmZsaW5lRGF0YSA9IGZhbHNlOyAvLyBTY2hhbHRlciwgdW0gYW56dWdlYmVuLCBvYiBEYXRlbiBvZmZsaW5lIHZlcmbDvGdiYXIgZ2VtYWNodCB3ZXJkZW4gc29sbGVuXHJcbmNvbnN0IHNlcnZlclVSTCA9IFwiL2FwaVwiOyAvLyBEaWUgQmFzaXMtVVJMIGRlcyBTZXJ2ZXJzLCB2b24gZGVtIERhdGVuIGJlem9nZW4gd2VyZGVuXHJcblxyXG4vLyBJbml0aWFsaXNpZXJlbiB2b24gVmFyaWFibGVuLCBkaWUgc3DDpHRlciBpbSBCcm93c2Vya29udGV4dCBnZXNldHp0IHdlcmRlblxyXG5sZXQgd2luZG93SGVpZ2h0LCB1cmxfc3RyaW5nLCB1cmwsIGMsIHVzZXI7XHJcbmxldCBtYXBEYXRhU3RhdGljVXJsLFxyXG4gIG1hcERhdGFTdGF0dXNVcmwsXHJcbiAgbWFwRGF0YU1lYXN1cmVzLFxyXG4gIG1hcERhdGFJY29uVXJsLFxyXG4gIG1hcERhdGFTeXN0ZW1Vcmw7XHJcbmxldCBtYXBTdGF0aWNPZmZsaW5lVVJMLFxyXG4gIG1hcFN0YXR1c09mZmxpbmVVUkwsXHJcbiAgbWFwU3lzdGVtT2ZmbGluZVVSTCxcclxuICBtYXBJY29uc09mZmxpbmVVUkwsXHJcbiAgbWFwTWVhc3VyZXNPZmZsaW5lVVJMO1xyXG5cclxuLy8gUHLDvGZlbiwgb2IgZGFzIENvZGUgaW0gQnJvd3NlciBhdXNnZWbDvGhydCB3aXJkXHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgLy8gRGllc2UgVmFyaWFibGVuIHdlcmRlbiBudXIgaW0gQnJvd3Nlci1Lb250ZXh0IGluaXRpYWxpc2llcnRcclxuICB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7IC8vIERpZSBIw7ZoZSBkZXMgQnJvd3NlcmZlbnN0ZXJzXHJcbiAgdXJsX3N0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOyAvLyBEaWUgdm9sbHN0w6RuZGlnZSBVUkwgYWxzIFN0cmluZ1xyXG4gIHVybCA9IG5ldyBVUkwodXJsX3N0cmluZyk7IC8vIERpZSBVUkwgYWxzIFVSTC1PYmpla3QsIHVtIFRlaWxlIGRlciBVUkwgZWluZmFjaGVyIHp1IGhhbmRoYWJlblxyXG4gIGMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcIm1cIikgfHwgXCIxMFwiOyAvLyBFaW4gUGFyYW1ldGVyIGF1cyBkZXIgVVJMLCBTdGFuZGFyZHdlcnQgaXN0ICcxMCdcclxuICB1c2VyID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ1XCIpIHx8IFwiNDg0XCI7IC8vIEVpbiB3ZWl0ZXJlciBQYXJhbWV0ZXIgYXVzIGRlciBVUkwsIFN0YW5kYXJkd2VydCBpc3QgJzQ4NyBvZGVyIDQ4NCdcclxuXHJcbiAgLy8gS29uc3RydWt0aW9uIHZvbiBVUkxzLCBkaWUgYXVmIHNwZXppZmlzY2hlIFJlc3NvdXJjZW4gYXVmIGRlbSBTZXJ2ZXIgemVpZ2VuXHJcbiAgbWFwRGF0YVN0YXRpY1VybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N0YXRpb25zU3RhdGljRGlzdHJpY3Q/aWRNYXA9JHtjfSZpZFVzZXI9JHt1c2VyfWA7XHJcbiAgbWFwRGF0YVN0YXR1c1VybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N0YXRpb25zU3RhdHVzRGlzdHJpY3Q/aWRNYXA9JHtjfSZpZFVzZXI9JHt1c2VyfWA7XHJcbiAgbWFwRGF0YU1lYXN1cmVzID0gYCR7c2VydmVyVVJMfS90YWxhczUvQ2xpZW50RGF0YS9XZWJzZXJ2aWNlTWFwLmFzbXgvR2lzU3RhdGlvbnNNZWFzdXJlbWVudHM/aWRNYXA9JHtjfWA7XHJcbiAgbWFwRGF0YUljb25VcmwgPSBgJHtzZXJ2ZXJVUkx9L3RhbGFzNS9DbGllbnREYXRhL1dlYnNlcnZpY2VNYXAuYXNteC9HZXRJY29uc1N0YXRpY2A7XHJcbiAgbWFwRGF0YVN5c3RlbVVybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N5c3RlbVN0YXRpYz9pZE1hcD0ke2N9JmlkVXNlcj0ke3VzZXJ9YDtcclxuXHJcbiAgLyogICBtYXBEYXRhU3RhdGljVXJsID0gYCR7c2VydmVyVVJMfS90YWxhczUvQ2xpZW50RGF0YS9XZWJzZXJ2aWNlTWFwLmFzbXgvR2lzU3RhdGlvbnNTdGF0aWNEaXN0cmljdGA7XHJcbiAgbWFwRGF0YVN0YXR1c1VybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N0YXRpb25zU3RhdHVzRGlzdHJpY3RgO1xyXG4gIG1hcERhdGFNZWFzdXJlcyA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dpc1N0YXRpb25zTWVhc3VyZW1lbnRzYDtcclxuICBtYXBEYXRhSWNvblVybCA9IGAke3NlcnZlclVSTH0vdGFsYXM1L0NsaWVudERhdGEvV2Vic2VydmljZU1hcC5hc214L0dldEljb25zU3RhdGljYDtcclxuICBtYXBEYXRhU3lzdGVtVXJsID0gYCR7c2VydmVyVVJMfS90YWxhczUvQ2xpZW50RGF0YS9XZWJzZXJ2aWNlTWFwLmFzbXgvR2lzU3lzdGVtU3RhdGljYDsgKi9cclxuICAvLyBVUkxzIHp1IE9mZmxpbmUtRGF0ZW4sIGZhbGxzIGJlbsO2dGlndFxyXG4gIG1hcFN0YXRpY09mZmxpbmVVUkwgPSBgb2ZmbGluZVRlc3REYXRhL2lkTWFwJHtjfUdpc1N0YXRpb25lblN0YXRpYy5qc29uYDtcclxuICBtYXBTdGF0dXNPZmZsaW5lVVJMID0gYG9mZmxpbmVUZXN0RGF0YS9pZE1hcCR7Y31HaXNTdGF0aW9uZW5TdGF0dXMuanNvbmA7XHJcbiAgbWFwU3lzdGVtT2ZmbGluZVVSTCA9IGBvZmZsaW5lVGVzdERhdGEvaWRNYXAke2N9R2lzU3lzdGVtU3RhdGljLmpzb25gO1xyXG4gIG1hcEljb25zT2ZmbGluZVVSTCA9IFwib2ZmbGluZVRlc3REYXRhL2ljb25zLmpzb25cIjtcclxuICBtYXBNZWFzdXJlc09mZmxpbmVVUkwgPSBgb2ZmbGluZVRlc3REYXRhL2lkTWFwJHtjfUdpc1N5c3RlbU1lYXN1cmVzLmpzb25gO1xyXG59XHJcblxyXG4vLyBFeHBvcnQgZGVyIGRlZmluaWVydGVuIFZhcmlhYmxlbiB1bmQgVVJMcywgZGFtaXQgc2llIGluIGFuZGVyZW4gVGVpbGVuIGRlciBBbndlbmR1bmcgdmVyd2VuZGV0IHdlcmRlbiBrw7ZubmVuXHJcbmV4cG9ydCB7XHJcbiAgbWFwVmVyc2lvbixcclxuICBzdGFuZGFyZFNpZGVNZW51LFxyXG4gIGZ1bGxTaWRlTWVudSxcclxuICBvZmZsaW5lRGF0YSxcclxuICBzZXJ2ZXJVUkwsXHJcbiAgd2luZG93SGVpZ2h0LFxyXG4gIHVybF9zdHJpbmcsXHJcbiAgdXJsLFxyXG4gIGMsXHJcbiAgdXNlcixcclxuICBtYXBEYXRhU3RhdGljVXJsLFxyXG4gIG1hcERhdGFTdGF0dXNVcmwsXHJcbiAgbWFwRGF0YU1lYXN1cmVzLFxyXG4gIG1hcERhdGFJY29uVXJsLFxyXG4gIG1hcERhdGFTeXN0ZW1VcmwsXHJcbiAgbWFwU3RhdGljT2ZmbGluZVVSTCxcclxuICBtYXBTdGF0dXNPZmZsaW5lVVJMLFxyXG4gIG1hcFN5c3RlbU9mZmxpbmVVUkwsXHJcbiAgbWFwSWNvbnNPZmZsaW5lVVJMLFxyXG4gIG1hcE1lYXN1cmVzT2ZmbGluZVVSTCxcclxufTtcclxuIl0sIm5hbWVzIjpbIm1hcFZlcnNpb24iLCJzdGFuZGFyZFNpZGVNZW51IiwiZnVsbFNpZGVNZW51Iiwib2ZmbGluZURhdGEiLCJzZXJ2ZXJVUkwiLCJ3aW5kb3dIZWlnaHQiLCJ1cmxfc3RyaW5nIiwidXJsIiwiYyIsInVzZXIiLCJtYXBEYXRhU3RhdGljVXJsIiwibWFwRGF0YVN0YXR1c1VybCIsIm1hcERhdGFNZWFzdXJlcyIsIm1hcERhdGFJY29uVXJsIiwibWFwRGF0YVN5c3RlbVVybCIsIm1hcFN0YXRpY09mZmxpbmVVUkwiLCJtYXBTdGF0dXNPZmZsaW5lVVJMIiwibWFwU3lzdGVtT2ZmbGluZVVSTCIsIm1hcEljb25zT2ZmbGluZVVSTCIsIm1hcE1lYXN1cmVzT2ZmbGluZVVSTCIsIndpbmRvdyIsImlubmVySGVpZ2h0IiwibG9jYXRpb24iLCJocmVmIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwiZ2V0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./config/config.js\n");
|
|
|
|
/***/ })
|
|
|
|
};
|
|
; |