From dcbd457106132bd668b50ae8a645807fb88cd521 Mon Sep 17 00:00:00 2001 From: Marcel Goerentz Date: Tue, 9 Jul 2024 08:13:08 +0200 Subject: [PATCH] Squashed commit of the following: commit 60dc82957a46d1eda23df1bdd613bfdd708361b6 Author: Marcel Goerentz Date: Tue Jul 9 07:25:22 2024 +0200 Make release commit c0488248dbdd3733e94ecf372e998fef598c5510 Author: Marcel Goerentz Date: Mon Jul 8 15:13:10 2024 +0200 Add banner in webinterface to inform user about a newer version commit c40695cea694134e0f79df75623287de3e4589f5 Author: Marcel Goerentz Date: Mon Jul 8 10:32:32 2024 +0200 Update threadfin.go commit 022d2ceddbc40d7051a8c9e21c6f912edf01b587 Author: Marcel Goerentz Date: Mon Jul 8 10:23:33 2024 +0200 Update updater commit 29cdd9388b29a791546cf07f35c1a7ee1143e52e Author: Marcel Goerentz Date: Mon Jul 8 07:36:20 2024 +0200 Rework imgcache module commit 21f1eeeeae3df2291b83213d0baad49af38386c7 Merge: 1fe2789 307d171 Author: Marcel Goerentz Date: Mon Jul 8 07:30:01 2024 +0200 Merge branch 'beta' of github.com:marcelGoerentz/Threadfin into beta commit 1fe27899adabd938b7a9c4c2c86e9c26d351c993 Author: Marcel Goerentz Date: Mon Jul 8 07:29:29 2024 +0200 Fix update bug commit 307d171527b604517e0373b1fb9b65a70cafd6dc Merge: 12151ec 31bc0b5 Author: Marcel Goerentz <57457529+marcelGoerentz@users.noreply.github.com> Date: Fri Jul 5 23:15:33 2024 +0200 Merge pull request #5 from marcelGoerentz/feature/clean_codebase Clean codebase commit 31bc0b56e60f2406bcfee16cfe8c7eb487ff8aeb Author: Marcel Goerentz Date: Fri Jul 5 23:13:38 2024 +0200 Clean codebase commit 48909e0cff52bbeb45932f3287e257052d8a98ba Author: Marcel Goerentz Date: Fri Jul 5 22:13:26 2024 +0200 Second step when reworking the cache commit df03e9e78d60429998893c393329db55d361a4ec Author: Marcel Goerentz Date: Fri Jul 5 12:30:49 2024 +0200 This is the first step to rework the image cache commit e73ebcfc0b8653fe2c6f2d8635517546e0dc491c Author: Marcel Goerentz Date: Tue Jul 2 15:27:46 2024 +0200 Update image caching commit 6b79e6ce4cea06be6822dd9914874aed5bb6fe5e Author: Marcel Goerentz Date: Tue Jul 2 13:18:22 2024 +0200 Clean codebase commit 2a77252fa08806b7d4e278de86b767ab7dd3290e Author: Marcel Goerentz Date: Fri Jun 28 22:26:37 2024 +0200 Update info command commit 1fd8f9598a59ef66e028bb0c62310b8f39db267e Author: Marcel Goerentz Date: Fri Jun 28 08:07:00 2024 +0200 Update README.md commit dcb89d9e830cebac88369fcfa21a8a93f8f50778 Author: Marcel Goerentz Date: Thu Jun 27 23:52:37 2024 +0200 Delete .vscode commit 35be82f8457d27ddf56308b2c4161ca9dc08e779 Author: Marcel Goerentz Date: Thu Jun 27 23:50:45 2024 +0200 Clean codebase commit 889d3bf235b570dbce19a1a25cef568b485685d1 Merge: d3082bd a24ba2d Author: Marcel Goerentz Date: Thu Jun 27 15:22:25 2024 +0200 Merge branch 'main' into feature/clean_codebase commit d3082bd43162d116e9c8998f9fe39ef544ebc8aa Author: Marcel Goerentz Date: Thu Jun 27 15:21:51 2024 +0200 Clean codebase and give more options for the network interface, add https server commit 81383522bbe7815b1307e4f9a205e971f2188b14 Author: Marcel Goerentz Date: Tue Jun 25 09:55:22 2024 +0200 Clean codebase and add feature to disable ports in stream urls --- .gitignore | 4 +- .vscode/launch.json | 14 - .vscode/tasks.json | 26 - README.md | 31 +- html/css/base.css | 14 + html/index.html | 11 +- html/js/authentication_ts.js | 33 - html/js/base_ts.js | 559 ------- html/js/classes_ts.js | 40 - html/js/configuration_ts.js | 131 -- html/js/logs_ts.js | 40 - html/js/menu_ts.js | 2162 ------------------------- html/js/network_ts.js | 105 -- html/js/settings_ts.js | 684 -------- html/lang/en.json | 27 +- package-lock.json | 38 + package.json | 8 + src/config.go | 14 +- src/data.go | 51 +- src/hdhr.go | 10 +- src/images.go | 2 +- src/info.go | 67 +- src/internal/imgcache/cache.go | 180 -- src/internal/imgcache/imagecache.go | 156 ++ src/internal/imgcache/tools.go | 44 +- src/internal/up2date/client/client.go | 7 + src/internal/up2date/client/update.go | 7 +- src/m3u.go | 27 +- src/screen.go | 6 + src/struct-system.go | 99 +- src/struct-webserver.go | 49 +- src/system.go | 74 +- src/update.go | 74 +- src/webUI.go | 55 +- src/webserver.go | 110 +- src/xepg.go | 70 +- threadfin.go | 14 +- ts/banner.ts | 46 + ts/base_ts.ts | 4 +- ts/menu_ts.ts | 1 + ts/network_ts.ts | 8 +- ts/settings_ts.ts | 121 +- 42 files changed, 812 insertions(+), 4411 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/tasks.json delete mode 100644 html/js/authentication_ts.js delete mode 100644 html/js/base_ts.js delete mode 100644 html/js/classes_ts.js delete mode 100644 html/js/configuration_ts.js delete mode 100644 html/js/logs_ts.js delete mode 100644 html/js/menu_ts.js delete mode 100644 html/js/network_ts.js delete mode 100644 html/js/settings_ts.js create mode 100644 package-lock.json create mode 100644 package.json delete mode 100644 src/internal/imgcache/cache.go create mode 100644 src/internal/imgcache/imagecache.go create mode 100644 ts/banner.ts diff --git a/.gitignore b/.gitignore index 5d298b3..57e6e1c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,10 @@ threadfin vendor/ .DS_Store -threadfin.exe binaries/ *.js.map .vscode/ dist/ +node_modules/ +*.exe +*.js diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 6ca18cf..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "preLaunchTask": "tsc build", - "name": "Launch Package", - "type": "go", - "request": "launch", - "mode": "auto", - "program": "${workspaceFolder}", - "args": ["-dev"] - } - ] -} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 80782d2..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "type": "typescript", - "tsconfig": "ts/tsconfig.json", - "problemMatcher": [ - "$tsc" - ], - "group": "build", - "label": "tsc build" - }, - { - "type": "go", - "command": "build", - "label": "go build" - }, - { - "label": "Build", - "dependsOn" : [ - "tsc build", - "go build" - ] - } - ] -} \ No newline at end of file diff --git a/README.md b/README.md index 22d6278..a15b80c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
- Threadfin + Threadfin

@@ -9,7 +9,7 @@ You can follow the old xTeVe documentation for now until I update it for Threadfin. Documentation for setup and configuration is [here](https://github.com/xteve-project/xTeVe-Documentation/blob/master/en/configuration.md). #### Donation -[Github Sponsor](https://github.com/sponsors/Fyb3roptik) +[Paypal/Me](https://paypal.me/MarcelGoerentz) ## Requirements ### Plex @@ -32,6 +32,7 @@ You can follow the old xTeVe documentation for now until I update it for Threadf * New Bootstrap based UI * RAM based buffer instead of File based +* HTTPS Webserver #### Filter Group * Can now add a starting channel number for the filter group @@ -68,8 +69,26 @@ You can follow the old xTeVe documentation for now until I update it for Threadf --- +## CLI arguments + +These are the currently available command line arguments: + +| arg | type | description | example | +|:-----------|:--------|:--------------------------------------------------------|:--------------------------------------------| +| -h | bool | prints the help and don't start the service | -h | +| -dev | bool | activates the developer mode | -dev | +| -config | string | sets the path to the root config folder | -config=~./.threadfin | +| -port | integer | sets the port for the webserver (also for https) | -port=34400 | +| -useHttps | bool | switches the webserver to https | -useHttps | +| -restore | string | restores the settings from the given filepath | -restore=/path/to/file/threadfin_backup.zip | +| -gitBranch | string | sets the branch from which the program is to be updated | -gitBranch=beta | +| -debug | integer | sets the debug level | -debug=3 | +| -info | bool | prints the system info | -info | + +--- + ## Docker Image -[Threadfin](https://hub.docker.com/r/fyb3roptik/threadfin) +[Threadfin](https://hub.docker.com/r/marcelGoerentz/threadfin) * Docker compose example @@ -94,7 +113,7 @@ services: --- ### Threadfin Beta branch -New features and bug fixes are only available in beta branch. Only after successful testing are they are merged into the main branch. +New features and bug fixes are only available in beta branch. Only after successful testing they are merged into the main branch. **It is not recommended to use the beta version in a production system.** @@ -102,7 +121,7 @@ With the command line argument `branch` the Git Branch can be changed. Threadfin #### Switch from master to beta branch: ``` -threadfin -branch beta +threadfin -branch=beta ... [Threadfin] GitHub: https://github.com/Threadfin/Threadfin @@ -112,7 +131,7 @@ threadfin -branch beta #### Switch from beta to master branch: ``` -threadfin -branch main +threadfin -branch=main ... [Threadfin] GitHub: https://github.com/Threadfin/Threadfin diff --git a/html/css/base.css b/html/css/base.css index eeef1f2..ba9bb50 100644 --- a/html/css/base.css +++ b/html/css/base.css @@ -448,6 +448,20 @@ table { } +.banner { + position: fixed; + top: 0; + left: 0; + width: 100%; + background-color: #000000; + color: #ffffff; + padding: 10px; + text-align: center; + font-size: 16px; + display: none; + z-index: 99999; +} + @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); diff --git a/html/index.html b/html/index.html index 85983a3..02493f6 100644 --- a/html/index.html +++ b/html/index.html @@ -1,5 +1,5 @@ - + @@ -21,6 +21,10 @@ + + @@ -32,7 +36,8 @@ @@ -131,6 +136,6 @@ + - \ No newline at end of file diff --git a/html/js/authentication_ts.js b/html/js/authentication_ts.js deleted file mode 100644 index 83bdf87..0000000 --- a/html/js/authentication_ts.js +++ /dev/null @@ -1,33 +0,0 @@ -function login() { - var err = false; - var data = new Object(); - var div = document.getElementById("content"); - var form = document.getElementById("authentication"); - var inputs = div.getElementsByTagName("INPUT"); - console.log(inputs); - for (var i = inputs.length - 1; i >= 0; i--) { - var key = inputs[i].name; - var value = inputs[i].value; - if (value.length == 0) { - inputs[i].style.borderColor = "red"; - err = true; - } - data[key] = value; - } - if (err == true) { - data = new Object(); - return; - } - if (data.hasOwnProperty("confirm")) { - if (data["confirm"] != data["password"]) { - alert("sdafsd"); - document.getElementById('password').style.borderColor = "red"; - document.getElementById('confirm').style.borderColor = "red"; - document.getElementById("err").innerHTML = "{{.account.failed}}"; - return; - } - } - console.log(data); - form.submit(); -} -//# sourceMappingURL=authentication_ts.js.map \ No newline at end of file diff --git a/html/js/base_ts.js b/html/js/base_ts.js deleted file mode 100644 index b1bdc71..0000000 --- a/html/js/base_ts.js +++ /dev/null @@ -1,559 +0,0 @@ -var SERVER = new Object(); -var BULK_EDIT = false; -var COLUMN_TO_SORT; -var INACTIVE_COLUMN_TO_SORT; -var SEARCH_MAPPING = new Object(); -var UNDO = new Object(); -var SERVER_CONNECTION = false; -var WS_AVAILABLE = false; -const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]'); -const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)); -// new ClipboardJS('.copy-btn'); -var clipboard = new ClipboardJS('.copy-btn'); -clipboard.on('success', function (e) { - const tooltip = bootstrap.Tooltip.getInstance(e.trigger); - tooltip.setContent({ '.tooltip-inner': 'Copied!' }); -}); -clipboard.on('error', function (e) { - console.log(e); -}); -var popupModal = new bootstrap.Modal(document.getElementById("popup"), { - keyboard: true, - focus: true -}); -var loadingModal = new bootstrap.Modal(document.getElementById("loading"), { - keyboard: true, - focus: true -}); -// Menü -var menuItems = new Array(); -menuItems.push(new MainMenuItem("playlist", "{{.mainMenu.item.playlist}}", "m3u.png", "{{.mainMenu.headline.playlist}}")); -menuItems.push(new MainMenuItem("xmltv", "{{.mainMenu.item.xmltv}}", "xmltv.png", "{{.mainMenu.headline.xmltv}}")); -menuItems.push(new MainMenuItem("filter", "{{.mainMenu.item.filter}}", "filter.png", "{{.mainMenu.headline.filter}}")); -menuItems.push(new MainMenuItem("mapping", "{{.mainMenu.item.mapping}}", "mapping.png", "{{.mainMenu.headline.mapping}}")); -menuItems.push(new MainMenuItem("users", "{{.mainMenu.item.users}}", "users.png", "{{.mainMenu.headline.users}}")); -menuItems.push(new MainMenuItem("settings", "{{.mainMenu.item.settings}}", "settings.png", "{{.mainMenu.headline.settings}}")); -menuItems.push(new MainMenuItem("log", "{{.mainMenu.item.log}}", "log.png", "{{.mainMenu.headline.log}}")); -menuItems.push(new MainMenuItem("logout", "{{.mainMenu.item.logout}}", "logout.png", "{{.mainMenu.headline.logout}}")); -// Kategorien für die Einstellungen -var settingsCategory = new Array(); -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.general}}", "ThreadfinAutoUpdate,ssdp,tuner,epgSource,epgCategories,epgCategoriesColors,dummy,dummyChannel,ignoreFilters,api")); -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,,xepg.replace.missing.images,xepg.replace.channel.title,enableNonAscii")); -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.network}}", "listeningIp,httpThreadfinDomain,forceHttps,httpsPort,httpsThreadfinDomain")); -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,udpxy,buffer.size.kb,storeBufferInRAM,buffer.timeout,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options")); -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep")); -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.authentication}}", "authentication.web,authentication.pms,authentication.m3u,authentication.xml,authentication.api")); -function showPopUpElement(elm) { - showElement(elm, true); - // setTimeout(function () { - // showElement("popup", true); - // }, 10); - return; -} -function showElement(elmID, type) { - if (elmID == "popup-custom" || elmID == "popup") { - switch (type) { - case true: - popupModal.show(); - break; - case false: - popupModal.hide(); - break; - } - } - if (elmID == "loading") { - switch (type) { - case true: - loadingModal.show(); - break; - case false: - loadingModal.hide(); - break; - } - } -} -function changeButtonAction(element, buttonID, attribute) { - var value = element.options[element.selectedIndex].value; - document.getElementById(buttonID).setAttribute(attribute, value); -} -function getLocalData(dataType, id) { - var data = new Object(); - switch (dataType) { - case "m3u": - data = SERVER["settings"]["files"][dataType][id]; - break; - case "hdhr": - data = SERVER["settings"]["files"][dataType][id]; - break; - case "filter": - case "custom-filter": - case "group-title": - if (id == -1) { - data["active"] = true; - data["caseSensitive"] = false; - data["description"] = ""; - data["exclude"] = ""; - data["filter"] = ""; - data["include"] = ""; - data["name"] = ""; - data["type"] = "group-title"; - data["x-category"] = ""; - SERVER["settings"]["filter"][id] = data; - } - data = SERVER["settings"]["filter"][id]; - break; - case "xmltv": - data = SERVER["settings"]["files"][dataType][id]; - break; - case "users": - data = SERVER["users"][id]["data"]; - break; - case "mapping": - data = SERVER["xepg"]["epgMapping"][id]; - break; - case "m3uGroups": - data = SERVER["data"]["playlist"]["m3u"]["groups"]; - break; - } - return data; -} -function getObjKeys(obj) { - var keys = new Array(); - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - keys.push(i); - } - } - return keys; -} -function getOwnObjProps(object) { - return object ? Object.getOwnPropertyNames(object) : []; -} -function getAllSelectedChannels() { - var channels = new Array(); - if (BULK_EDIT == false) { - return channels; - } - var trs = document.getElementById("content_table").getElementsByTagName("TR"); - for (var i = 1; i < trs.length; i++) { - if (trs[i].style.display != "none") { - if (trs[i].firstChild.firstChild.checked == true) { - channels.push(trs[i].id); - } - } - } - return channels; -} -function selectAllChannels(table_name = "content_table") { - var bulk = false; - var trs = document.getElementById(table_name).getElementsByTagName("TR"); - if (trs[0].firstChild.firstChild.checked == true) { - bulk = true; - } - for (var i = 1; i < trs.length; i++) { - if (trs[i].style.display != "none") { - switch (bulk) { - case true: - trs[i].firstChild.firstChild.checked = true; - break; - case false: - trs[i].firstChild.firstChild.checked = false; - break; - } - } - } - return; -} -function bulkEdit() { - BULK_EDIT = !BULK_EDIT; - var className; - var rows = document.getElementsByClassName("bulk"); - switch (BULK_EDIT) { - case true: - className = "bulk showBulk"; - break; - case false: - className = "bulk hideBulk"; - break; - } - for (var i = 0; i < rows.length; i++) { - rows[i].className = className; - rows[i].checked = false; - } - return; -} -function sortTable(column, table_name = "content_table") { - // console.log("COLUMN: " + column); - if ((column == COLUMN_TO_SORT && table_name == "content_table") || (column == INACTIVE_COLUMN_TO_SORT && table_name == "inactive_content_table")) { - return; - } - var table = document.getElementById(table_name); - var tableHead = table.getElementsByTagName("TR")[0]; - var tableItems = tableHead.getElementsByTagName("TD"); - var sortObj = new Object(); - var x, xValue; - var tableHeader; - var sortByString = false; - if (column > 0 && COLUMN_TO_SORT > 0 && table_name == "content_table") { - tableItems[COLUMN_TO_SORT].className = "pointer"; - tableItems[column].className = "sortThis"; - } - else if (column > 0 && INACTIVE_COLUMN_TO_SORT > 0 && table_name == "inactive_content_table") { - tableItems[INACTIVE_COLUMN_TO_SORT].className = "pointer"; - tableItems[column].className = "sortThis"; - } - if (table_name == "content_table") { - COLUMN_TO_SORT = column; - } - else if (table_name == "inactive_content_table") { - INACTIVE_COLUMN_TO_SORT = column; - } - var rows = table.rows; - if (rows[1] != undefined) { - tableHeader = rows[0]; - x = rows[1].getElementsByTagName("TD")[column]; - for (i = 1; i < rows.length; i++) { - x = rows[i].getElementsByTagName("TD")[column]; - switch (x.childNodes[0].tagName.toLowerCase()) { - case "input": - xValue = x.getElementsByTagName("INPUT")[0].value.toLowerCase(); - break; - case "p": - xValue = x.getElementsByTagName("P")[0].innerText.toLowerCase(); - break; - default: console.log(x.childNodes[0].tagName); - } - if (xValue == "") { - xValue = i; - sortObj[i] = rows[i]; - } - else { - switch (isNaN(xValue)) { - case false: - xValue = parseFloat(xValue); - sortObj[xValue] = rows[i]; - break; - case true: - sortByString = true; - sortObj[xValue.toLowerCase() + i] = rows[i]; - break; - } - } - } - while (table.firstChild) { - table.removeChild(table.firstChild); - } - var sortValues = getObjKeys(sortObj); - if (sortByString == true) { - if (column == 3) { - var collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }); - sortValues.sort(collator.compare); - } - else { - sortValues.sort(); - } - } - else { - function sortFloat(a, b) { - return a - b; - } - sortValues.sort(sortFloat); - } - table.appendChild(tableHeader); - for (var i = 0; i < sortValues.length; i++) { - table.appendChild(sortObj[sortValues[i]]); - } - } - return; -} -function createSearchObj() { - SEARCH_MAPPING = new Object(); - var data = SERVER["xepg"]["epgMapping"]; - var channels = getObjKeys(data); - var channelKeys = ["x-active", "x-channelID", "x-name", "_file.m3u.name", "x-group-title", "x-xmltv-file"]; - channels.forEach(id => { - channelKeys.forEach(key => { - if (key == "x-active") { - switch (data[id][key]) { - case true: - SEARCH_MAPPING[id] = "online "; - break; - case false: - SEARCH_MAPPING[id] = "offline "; - break; - } - } - else { - if (key == "x-xmltv-file") { - var xmltvFile = getValueFromProviderFile(data[id][key], "xmltv", "name"); - if (xmltvFile != undefined) { - SEARCH_MAPPING[id] = SEARCH_MAPPING[id] + xmltvFile + " "; - } - } - else { - SEARCH_MAPPING[id] = SEARCH_MAPPING[id] + data[id][key] + " "; - } - } - }); - }); - return; -} -function enableGroupSelection(selector) { - var lastcheck = null; // no checkboxes clicked yet - // get desired checkboxes - var checkboxes = document.querySelectorAll(selector); - // loop over checkboxes to add event listener - Array.prototype.forEach.call(checkboxes, function (cbx, idx) { - cbx.addEventListener('click', function (evt) { - // test for shift key, not first checkbox, and not same checkbox - if (evt.shiftKey && null !== lastcheck && idx !== lastcheck) { - // get range of checks between last-checkbox and shift-checkbox - // Math.min/max does our sorting for us - Array.prototype.slice.call(checkboxes, Math.min(lastcheck, idx), Math.max(lastcheck, idx)) - // and loop over each - .forEach(function (ccbx) { - ccbx.checked = true; - }); - } - lastcheck = idx; // set this checkbox as last-checked for later - }); - }); -} -function searchInMapping() { - var searchValue = document.getElementById("searchMapping").value; - var trs = document.getElementById("content_table").getElementsByTagName("TR"); - for (var i = 1; i < trs.length; ++i) { - var id = trs[i].getAttribute("id"); - var element = SEARCH_MAPPING[id]; - switch (element.toLowerCase().includes(searchValue.toLowerCase())) { - case true: - document.getElementById(id).style.display = ""; - break; - case false: - document.getElementById(id).style.display = "none"; - break; - } - } - return; -} -function changeChannelNumbers(elements) { - var starting_number_element = document.getElementsByName("x-channels-start")[0]; - var elems = elements.split(","); - var starting_number = parseFloat(starting_number_element.value); - var data = SERVER["xepg"]["epgMapping"]; - elems.forEach(element => { - var elem = document.getElementById(element); - var input = elem.childNodes[1].firstChild; - input.value = starting_number.toString(); - data[element]["x-channelID"] = starting_number.toString(); - starting_number++; - }); - if (COLUMN_TO_SORT == 1) { - COLUMN_TO_SORT = -1; - sortTable(1); - } - if (INACTIVE_COLUMN_TO_SORT == 1) { - INACTIVE_COLUMN_TO_SORT = -1; - sortTable(1, "inactive_content_page"); - } -} -function changeChannelNumber(element) { - var dbID = element.parentNode.parentNode.id; - var newNumber = parseFloat(element.value); - var channelNumbers = []; - var data = SERVER["xepg"]["epgMapping"]; - var channels = getObjKeys(data); - if (isNaN(newNumber)) { - alert("{{.alert.invalidChannelNumber}}"); - return; - } - channels.forEach(id => { - var channelNumber = parseFloat(data[id]["x-channelID"]); - channelNumbers.push(channelNumber); - }); - for (var i = 0; i < channelNumbers.length; i++) { - if (channelNumbers.indexOf(newNumber) == -1) { - break; - } - if (Math.floor(newNumber) == newNumber) { - newNumber = newNumber + 1; - } - else { - newNumber = newNumber + 0.1; - newNumber.toFixed(1); - newNumber = Math.round(newNumber * 10) / 10; - } - } - data[dbID]["x-channelID"] = newNumber.toString(); - element.value = newNumber; - if (COLUMN_TO_SORT == 1) { - COLUMN_TO_SORT = -1; - sortTable(1); - } - if (INACTIVE_COLUMN_TO_SORT == 1) { - INACTIVE_COLUMN_TO_SORT = -1; - sortTable(1, "inactive_content_page"); - } - return; -} -function backup() { - var data = new Object(); - console.log("Backup data"); - var cmd = "ThreadfinBackup"; - console.log("SEND TO SERVER"); - console.log(data); - var server = new Server(cmd); - server.request(data); - return; -} -function toggleChannelStatus(id) { - var element; - var status; - if (document.getElementById("active")) { - var checkbox = document.getElementById("active"); - status = (checkbox).checked; - } - var ids = getAllSelectedChannels(); - if (ids.length == 0) { - ids.push(id); - } - ids.forEach(id => { - var channel = SERVER["xepg"]["epgMapping"][id]; - channel["x-active"] = status; - switch (channel["x-active"]) { - case true: - if (channel["x-xmltv-file"] == "-" || channel["x-mapping"] == "-") { - if (BULK_EDIT == false) { - // alert(channel["x-name"] + ": Missing XMLTV file / channel") - checkbox.checked = true; - } - channel["x-active"] = true; - } - break; - case false: - // code... - break; - } - if (channel["x-active"] == false) { - document.getElementById(id).className = "notActiveEPG"; - } - else { - document.getElementById(id).className = "activeEPG"; - } - }); -} -function restore() { - if (document.getElementById('upload')) { - document.getElementById('upload').remove(); - } - var restore = document.createElement("INPUT"); - restore.setAttribute("type", "file"); - restore.setAttribute("class", "notVisible"); - restore.setAttribute("name", ""); - restore.id = "upload"; - document.body.appendChild(restore); - restore.click(); - restore.onchange = function () { - var filename = restore.files[0].name; - var check = confirm("File: " + filename + "\n{{.confirm.restore}}"); - if (check == true) { - var reader = new FileReader(); - var file = document.querySelector('input[type=file]').files[0]; - if (file) { - reader.readAsDataURL(file); - reader.onload = function () { - console.log(reader.result); - var data = new Object(); - var cmd = "ThreadfinRestore"; - data["base64"] = reader.result; - var server = new Server(cmd); - server.request(data); - }; - } - else { - alert("File could not be loaded"); - } - restore.remove(); - return; - } - }; - return; -} -function uploadLogo() { - if (document.getElementById('upload')) { - document.getElementById('upload').remove(); - } - var upload = document.createElement("INPUT"); - upload.setAttribute("type", "file"); - upload.setAttribute("class", "notVisible"); - upload.setAttribute("name", ""); - upload.id = "upload"; - document.body.appendChild(upload); - upload.click(); - upload.onblur = function () { - alert(); - }; - upload.onchange = function () { - var filename = upload.files[0].name; - var reader = new FileReader(); - var file = document.querySelector('input[type=file]').files[0]; - if (file) { - reader.readAsDataURL(file); - reader.onload = function () { - console.log(reader.result); - var data = new Object(); - var cmd = "uploadLogo"; - data["base64"] = reader.result; - data["filename"] = file.name; - var server = new Server(cmd); - server.request(data); - var updateLogo = document.getElementById('update-icon'); - updateLogo.checked = false; - updateLogo.className = "changed"; - }; - } - else { - alert("File could not be loaded"); - } - upload.remove(); - return; - }; -} -function checkUndo(key) { - switch (key) { - case "epgMapping": - if (UNDO.hasOwnProperty(key)) { - SERVER["xepg"][key] = JSON.parse(JSON.stringify(UNDO[key])); - } - else { - UNDO[key] = JSON.parse(JSON.stringify(SERVER["xepg"][key])); - } - break; - default: - break; - } - return; -} -function sortSelect(elem) { - var tmpAry = []; - var selectedValue = elem[elem.selectedIndex].value; - for (var i = 0; i < elem.options.length; i++) - tmpAry.push(elem.options[i]); - tmpAry.sort(function (a, b) { return (a.text < b.text) ? -1 : 1; }); - while (elem.options.length > 0) - elem.options[0] = null; - var newSelectedIndex = 0; - for (var i = 0; i < tmpAry.length; i++) { - elem.options[i] = tmpAry[i]; - if (elem.options[i].value == selectedValue) - newSelectedIndex = i; - } - elem.selectedIndex = newSelectedIndex; // Set new selected index after sorting - return; -} -function updateLog() { - console.log("TOKEN"); - var server = new Server("updateLog"); - server.request(new Object()); -} -//# sourceMappingURL=base_ts.js.map \ No newline at end of file diff --git a/html/js/classes_ts.js b/html/js/classes_ts.js deleted file mode 100644 index 80c168b..0000000 --- a/html/js/classes_ts.js +++ /dev/null @@ -1,40 +0,0 @@ -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var MainMenu = /** @class */ (function () { - function MainMenu() { - this.DocumentID = "main-menu"; - this.HTMLTag = "LI"; - } - MainMenu.prototype.create = function () { - console.log(this.DocumentID); - }; - return MainMenu; -}()); -var MainMenuItem = /** @class */ (function (_super) { - __extends(MainMenuItem, _super); - function MainMenuItem() { - return _super !== null && _super.apply(this, arguments) || this; - } - MainMenuItem.prototype.create2 = function () { - var element = document.createElement(this.HTMLTag); - element.innerText = this.Value; - console.log(element); - }; - return MainMenuItem; -}(MainMenu)); -function pageReady() { - var item = new MainMenuItem(); - item.Value = "Test"; - item.create2(); -} diff --git a/html/js/configuration_ts.js b/html/js/configuration_ts.js deleted file mode 100644 index af39951..0000000 --- a/html/js/configuration_ts.js +++ /dev/null @@ -1,131 +0,0 @@ -class WizardCategory { - constructor() { - this.DocumentID = "content"; - } - createCategoryHeadline(value) { - var element = document.createElement("H4"); - element.innerHTML = value; - return element; - } -} -class WizardItem extends WizardCategory { - constructor(key, headline) { - super(); - this.headline = headline; - this.key = key; - } - createWizard() { - var headline = this.createCategoryHeadline(this.headline); - var key = this.key; - var content = new PopupContent(); - var description; - var doc = document.getElementById(this.DocumentID); - doc.innerHTML = ""; - doc.appendChild(headline); - switch (key) { - case "tuner": - var text = new Array(); - var values = new Array(); - for (var i = 1; i <= 100; i++) { - text.push(i); - values.push(i); - } - var select = content.createSelect(text, values, "1", key); - select.setAttribute("class", "wizard"); - select.id = key; - doc.appendChild(select); - description = "{{.wizard.tuner.description}}"; - break; - case "epgSource": - var text = ["PMS", "XEPG"]; - var values = ["PMS", "XEPG"]; - var select = content.createSelect(text, values, "XEPG", key); - select.setAttribute("class", "wizard"); - select.id = key; - doc.appendChild(select); - description = "{{.wizard.epgSource.description}}"; - break; - case "m3u": - var input = content.createInput("text", key, ""); - input.setAttribute("placeholder", "{{.wizard.m3u.placeholder}}"); - input.setAttribute("class", "wizard"); - input.id = key; - doc.appendChild(input); - description = "{{.wizard.m3u.description}}"; - break; - case "xmltv": - var input = content.createInput("text", key, ""); - input.setAttribute("placeholder", "{{.wizard.xmltv.placeholder}}"); - input.setAttribute("class", "wizard"); - input.id = key; - doc.appendChild(input); - description = "{{.wizard.xmltv.description}}"; - break; - default: - console.log(key); - break; - } - var pre = document.createElement("PRE"); - pre.innerHTML = description; - doc.appendChild(pre); - console.log(headline, key); - } -} -function readyForConfiguration(wizard) { - var server = new Server("getServerConfig"); - server.request(new Object()); - showElement("loading", false); - configurationWizard[wizard].createWizard(); -} -function saveWizard() { - var cmd = "saveWizard"; - var div = document.getElementById("content"); - var config = div.getElementsByClassName("wizard"); - var wizard = new Object(); - for (var i = 0; i < config.length; i++) { - var name; - var value; - switch (config[i].tagName) { - case "SELECT": - name = config[i].name; - value = config[i].value; - // Wenn der Wert eine Zahl ist, wird dieser als Zahl gespeichert - if (isNaN(value)) { - wizard[name] = value; - } - else { - wizard[name] = parseInt(value); - } - break; - case "INPUT": - switch (config[i].type) { - case "text": - name = config[i].name; - value = config[i].value; - if (value.length == 0) { - var msg = name.toUpperCase() + ": " + "{{.alert.missingInput}}"; - alert(msg); - return; - } - wizard[name] = value; - break; - } - break; - default: - // code... - break; - } - } - var data = new Object(); - data["wizard"] = wizard; - var server = new Server(cmd); - server.request(data); - console.log(data); -} -// Wizard -var configurationWizard = new Array(); -configurationWizard.push(new WizardItem("tuner", "{{.wizard.tuner.title}}")); -configurationWizard.push(new WizardItem("epgSource", "{{.wizard.epgSource.title}}")); -configurationWizard.push(new WizardItem("m3u", "{{.wizard.m3u.title}}")); -configurationWizard.push(new WizardItem("xmltv", "{{.wizard.xmltv.title}}")); -//# sourceMappingURL=configuration_ts.js.map \ No newline at end of file diff --git a/html/js/logs_ts.js b/html/js/logs_ts.js deleted file mode 100644 index 141f9a1..0000000 --- a/html/js/logs_ts.js +++ /dev/null @@ -1,40 +0,0 @@ -class Log { - createLog(entry) { - var element = document.createElement("PRE"); - if (entry.indexOf("WARNING") != -1) { - element.className = "warningMsg"; - } - if (entry.indexOf("ERROR") != -1) { - element.className = "errorMsg"; - } - if (entry.indexOf("DEBUG") != -1) { - element.className = "debugMsg"; - } - element.innerHTML = entry; - return element; - } -} -function showLogs(bottom) { - var log = new Log(); - var logs = SERVER["log"]["log"]; - var div = document.getElementById("content_log"); - div.innerHTML = ""; - var keys = getObjKeys(logs); - keys.forEach(logID => { - var entry = log.createLog(logs[logID]); - div.append(entry); - }); - setTimeout(function () { - if (bottom == true) { - var wrapper = document.getElementById("box-wrapper"); - wrapper.scrollTop = wrapper.scrollHeight; - } - }, 10); -} -function resetLogs() { - var cmd = "resetLogs"; - var data = new Object(); - var server = new Server(cmd); - server.request(data); -} -//# sourceMappingURL=logs_ts.js.map \ No newline at end of file diff --git a/html/js/menu_ts.js b/html/js/menu_ts.js deleted file mode 100644 index 60c7405..0000000 --- a/html/js/menu_ts.js +++ /dev/null @@ -1,2162 +0,0 @@ -class MainMenu { - constructor() { - this.DocumentID = "main-menu"; - this.HTMLTag = "LI"; - this.ImagePath = "img/"; - } - createIMG(src) { - var element = document.createElement("IMG"); - element.setAttribute("src", this.ImagePath + src); - return element; - } - createValue(value) { - var element = document.createElement("P"); - element.innerHTML = value; - return element; - } -} -class MainMenuItem extends MainMenu { - constructor(menuKey, value, image, headline) { - super(); - this.menuKey = menuKey; - this.value = value; - this.imgSrc = image; - this.headline = headline; - } - createItem() { - var item = document.createElement("LI"); - item.setAttribute("onclick", "javascript: openThisMenu(this)"); - item.setAttribute("id", this.id); - item.setAttribute("class", "nav-item"); - var img = this.createIMG(this.imgSrc); - var value = this.createValue(this.value); - item.appendChild(img); - item.appendChild(value); - var doc = document.getElementById(this.DocumentID); - doc.appendChild(item); - switch (this.menuKey) { - case "playlist": - this.tableHeader = ["{{.playlist.table.playlist}}", "{{.playlist.table.tuner}}", "{{.playlist.table.lastUpdate}}", "{{.playlist.table.availability}} %", "{{.playlist.table.type}}", "{{.playlist.table.streams}}", "{{.playlist.table.groupTitle}} %", "{{.playlist.table.tvgID}} %", "{{.playlist.table.uniqueID}} %"]; - break; - case "xmltv": - this.tableHeader = ["{{.xmltv.table.guide}}", "{{.xmltv.table.lastUpdate}}", "{{.xmltv.table.availability}} %", "{{.xmltv.table.channels}}", "{{.xmltv.table.programs}}"]; - break; - case "filter": - this.tableHeader = ["{{.filter.table.name}}", "{{.filter.table.type}}", "{{.filter.table.filter}}"]; - break; - case "users": - this.tableHeader = ["{{.users.table.username}}", "{{.users.table.password}}", "{{.users.table.web}}", "{{.users.table.pms}}", "{{.users.table.m3u}}", "{{.users.table.xml}}", "{{.users.table.api}}"]; - break; - case "mapping": - this.tableHeader = ["BULK", "{{.mapping.table.chNo}}", "{{.mapping.table.logo}}", "{{.mapping.table.channelName}}", "{{.mapping.table.playlist}}", "{{.mapping.table.groupTitle}}", "{{.mapping.table.xmltvFile}}", "{{.mapping.table.xmltvID}}"]; - break; - } - //console.log(this.menuKey, this.tableHeader); - } -} -class Content { - constructor() { - this.DocumentID = "content"; - this.HeaderID = "popup_header"; - this.FooterID = "popup_footer"; - this.TableID = "content_table"; - this.InactiveTableID = "inactive_content_table"; - this.headerClass = "content_table_header"; - this.headerClassInactive = "inactive_content_table_header"; - this.interactionID = "content-interaction"; - } - createHeadline(value) { - var element = document.createElement("H3"); - element.innerHTML = value; - return element; - } - createHR() { - var element = document.createElement("HR"); - return element; - } - createBR() { - var element = document.createElement("BR"); - return element; - } - createInteraction() { - var element = document.createElement("DIV"); - element.setAttribute("id", this.interactionID); - return element; - } - createDIV() { - var element = document.createElement("DIV"); - element.id = this.DivID; - return element; - } - createTABLE() { - var element = document.createElement("TABLE"); - element.setAttribute('class', 'table'); - element.id = this.TableID; - return element; - } - createTableRow() { - var element = document.createElement("TR"); - element.className = this.headerClass; - return element; - } - createInactiveTABLE() { - var element = document.createElement("TABLE"); - element.id = this.InactiveTableID; - return element; - } - createInactiveTableRow() { - var element = document.createElement("TR"); - element.className = this.headerClassInactive; - return element; - } - createTableContent(menuKey) { - var data = new Object(); - var rows = new Array(); - switch (menuKey) { - case "playlist": - var fileTypes = new Array("m3u", "hdhr"); - fileTypes.forEach(fileType => { - data = SERVER["settings"]["files"][fileType]; - var keys = getObjKeys(data); - keys.forEach(key => { - var tr = document.createElement("TR"); - tr.id = key; - tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)'); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["name"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - if (SERVER["settings"]["buffer"] != "-") { - cell.value = data[key]["tuner"]; - } - else { - cell.value = "-"; - } - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["last.update"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["provider.availability"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["type"].toUpperCase(); - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["compatibility"]["streams"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["compatibility"]["group.title"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["compatibility"]["tvg.id"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["compatibility"]["stream.id"]; - tr.appendChild(cell.createCell()); - rows.push(tr); - }); - }); - break; - case "filter": - delete SERVER["settings"]["filter"][-1]; - data = SERVER["settings"]["filter"]; - var keys = getObjKeys(data); - keys.forEach(key => { - var tr = document.createElement("TR"); - tr.id = key; - tr.setAttribute('onclick', 'javascript: openPopUp("' + data[key]["type"] + '", this)'); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["name"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - switch (data[key]["type"]) { - case "custom-filter": - cell.value = "{{.filter.custom}}"; - break; - case "group-title": - cell.value = "{{.filter.group}}"; - break; - default: - break; - } - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["filter"]; - tr.appendChild(cell.createCell()); - rows.push(tr); - }); - break; - case "xmltv": - var fileTypes = new Array("xmltv"); - fileTypes.forEach(fileType => { - data = SERVER["settings"]["files"][fileType]; - var keys = getObjKeys(data); - keys.forEach(key => { - var tr = document.createElement("TR"); - tr.id = key; - tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)'); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["name"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["last.update"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["provider.availability"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["compatibility"]["xmltv.channels"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["compatibility"]["xmltv.programs"]; - tr.appendChild(cell.createCell()); - rows.push(tr); - }); - }); - break; - case "users": - var fileTypes = new Array("users"); - fileTypes.forEach(fileType => { - data = SERVER[fileType]; - var keys = getObjKeys(data); - keys.forEach(key => { - var tr = document.createElement("TR"); - tr.id = key; - tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)'); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["data"]["username"]; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = "******"; - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - if (data[key]["data"]["authentication.web"] == true) { - cell.value = "✓"; - } - else { - cell.value = "-"; - } - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - if (data[key]["data"]["authentication.pms"] == true) { - cell.value = "✓"; - } - else { - cell.value = "-"; - } - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - if (data[key]["data"]["authentication.m3u"] == true) { - cell.value = "✓"; - } - else { - cell.value = "-"; - } - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - if (data[key]["data"]["authentication.xml"] == true) { - cell.value = "✓"; - } - else { - cell.value = "-"; - } - tr.appendChild(cell.createCell()); - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - if (data[key]["data"]["authentication.api"] == true) { - cell.value = "✓"; - } - else { - cell.value = "-"; - } - tr.appendChild(cell.createCell()); - rows.push(tr); - }); - }); - break; - case "mapping": - BULK_EDIT = false; - createSearchObj(); - checkUndo("epgMapping"); - console.log("MAPPING"); - data = SERVER["xepg"]["epgMapping"]; - var keys = getObjKeys(data); - keys.forEach(key => { - if (data[key]["x-active"]) { - var tr = document.createElement("TR"); - tr.id = key; - tr.className = "activeEPG"; - // Bulk - var cell = new Cell(); - cell.child = true; - cell.childType = "BULK"; - cell.value = false; - tr.appendChild(cell.createCell()); - // Kanalnummer - var cell = new Cell(); - cell.child = true; - cell.childType = "INPUTCHANNEL"; - cell.value = data[key]["x-channelID"]; - //td.setAttribute('onclick', 'javascript: changeChannelNumber("' + key + '", this)') - tr.appendChild(cell.createCell()); - // Logo - var cell = new Cell(); - cell.child = true; - cell.childType = "IMG"; - cell.imageURL = data[key]["tvg-logo"]; - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // Kanalname - var cell = new Cell(); - var cats = data[key]["x-category"].split(":"); - cell.child = true; - cell.childType = "P"; - cell.className = "category"; - var catColorSettings = SERVER["settings"]["epgCategoriesColors"]; - var colors_split = catColorSettings.split("|"); - for (var i = 0; i < colors_split.length; i++) { - var catsColor_split = colors_split[i].split(":"); - if (catsColor_split[0] == cats[0]) { - cell.classColor = catsColor_split[1]; - } - } - cell.value = data[key]["x-name"]; - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // Playlist - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - //cell.value = data[key]["_file.m3u.name"] - cell.value = getValueFromProviderFile(data[key]["_file.m3u.id"], "m3u", "name"); - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // Gruppe (group-title) - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["x-group-title"]; - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // XMLTV Datei - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - if (data[key]["x-xmltv-file"] != "-") { - cell.value = getValueFromProviderFile(data[key]["x-xmltv-file"], "xmltv", "name"); - } - else { - cell.value = data[key]["x-xmltv-file"]; - } - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // XMLTV Kanal - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - //var value = str.substring(1, 4); - var value = data[key]["x-mapping"]; - if (value.length > 20) { - value = data[key]["x-mapping"].substring(0, 20) + "..."; - } - cell.value = value; - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - rows.push(tr); - } - }); - break; - case "settings": - alert(); - break; - default: - console.log("Table content (menuKey):", menuKey); - break; - } - return rows; - } - createInactiveTableContent(menuKey) { - var data = new Object(); - var rows = new Array(); - switch (menuKey) { - case "mapping": - BULK_EDIT = false; - createSearchObj(); - checkUndo("epgMapping"); - console.log("MAPPING"); - data = SERVER["xepg"]["epgMapping"]; - var keys = getObjKeys(data); - keys.forEach(key => { - if (data[key]["x-active"] === false) { - var tr = document.createElement("TR"); - tr.id = key; - tr.className = "notActiveEPG"; - // Bulk - var cell = new Cell(); - cell.child = true; - cell.childType = "BULK"; - cell.value = false; - tr.appendChild(cell.createCell()); - // Kanalnummer - var cell = new Cell(); - cell.child = true; - cell.childType = "INPUTCHANNEL"; - if (data[key]["x-active"] == true) { - cell.value = data[key]["x-channelID"]; - } - else { - cell.value = data[key]["x-channelID"] * 10; - } - //td.setAttribute('onclick', 'javascript: changeChannelNumber("' + key + '", this)') - tr.appendChild(cell.createCell()); - // Logo - var cell = new Cell(); - cell.child = true; - cell.childType = "IMG"; - cell.imageURL = data[key]["tvg-logo"]; - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // Kanalname - var cell = new Cell(); - var cats = data[key]["x-category"].split(":"); - cell.child = true; - cell.childType = "P"; - cell.className = "category"; - var catColorSettings = SERVER["settings"]["epgCategoriesColors"]; - var colors_split = catColorSettings.split("|"); - for (var i = 0; i < colors_split.length; i++) { - var catsColor_split = colors_split[i].split(":"); - if (catsColor_split[0] == cats[0]) { - cell.classColor = catsColor_split[1]; - } - } - cell.value = data[key]["x-name"]; - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // Playlist - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - //cell.value = data[key]["_file.m3u.name"] - cell.value = getValueFromProviderFile(data[key]["_file.m3u.id"], "m3u", "name"); - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // Gruppe (group-title) - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = data[key]["x-group-title"]; - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // XMLTV Datei - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - if (data[key]["x-xmltv-file"] != "-") { - cell.value = getValueFromProviderFile(data[key]["x-xmltv-file"], "xmltv", "name"); - } - else { - cell.value = data[key]["x-xmltv-file"]; - } - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - // XMLTV Kanal - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - //var value = str.substring(1, 4); - var value = data[key]["x-mapping"]; - if (value.length > 20) { - value = data[key]["x-mapping"].substring(0, 20) + "..."; - } - cell.value = value; - var td = cell.createCell(); - td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)'); - td.id = key; - tr.appendChild(td); - rows.push(tr); - } - }); - break; - case "settings": - alert(); - break; - default: - console.log("Table content (menuKey):", menuKey); - break; - } - return rows; - } -} -class Cell { - createCell() { - var td = document.createElement("TD"); - if (this.child == true) { - var element; - switch (this.childType) { - case "P": - element = document.createElement(this.childType); - element.innerHTML = this.value; - element.className = this.className; - if (this.classColor) { - element.style.borderColor = this.classColor; - } - break; - case "INPUT": - element = document.createElement(this.childType); - element.value = this.value; - element.type = "text"; - break; - case "INPUTCHANNEL": - element = document.createElement("INPUT"); - element.setAttribute("onchange", "javscript: changeChannelNumber(this)"); - element.value = this.value; - element.type = "text"; - break; - case "BULK": - element = document.createElement("INPUT"); - element.checked = this.value; - element.type = "checkbox"; - element.className = "bulk hideBulk"; - break; - case "BULK_HEAD": - element = document.createElement("INPUT"); - element.checked = this.value; - element.type = "checkbox"; - element.className = "bulk hideBulk"; - if (this.active) { - element.setAttribute("onclick", "javascript: selectAllChannels()"); - } - else { - element.setAttribute("onclick", "javascript: selectAllChannels('inactive_content_table')"); - } - break; - case "IMG": - element = document.createElement(this.childType); - element.setAttribute("src", this.imageURL); - if (this.imageURL != "") { - element.setAttribute("onerror", "javascript: this.onerror=null;this.src=''"); - //onerror="this.onerror=null;this.src='missing.gif';" - } - } - td.appendChild(element); - } - else { - td.innerHTML = this.value; - } - if (this.onclick == true) { - td.setAttribute("onclick", this.onclickFunktion); - td.className = "pointer"; - } - if (this.tdClassName != undefined) { - td.className = this.tdClassName; - } - return td; - } -} -class ShowContent extends Content { - constructor(menuID) { - super(); - this.menuID = menuID; - } - createInput(type, name, value) { - var input = document.createElement("INPUT"); - input.setAttribute("type", type); - input.setAttribute("name", name); - input.setAttribute("value", value); - return input; - } - show() { - COLUMN_TO_SORT = -1; - // Alten Inhalt löschen - var doc = document.getElementById(this.DocumentID); - doc.innerHTML = ""; - showPreview(false); - // Überschrift - var popup_header = document.getElementById(this.HeaderID); - var headline = menuItems[this.menuID].headline; - var menuKey = menuItems[this.menuID].menuKey; - var h = this.createHeadline(headline); - var existingHeader = popup_header.querySelector('h3'); - if (existingHeader) { - popup_header.replaceChild(h, existingHeader); - } - else { - popup_header.appendChild(h); - } - var hr = this.createHR(); - doc.appendChild(hr); - // Interaktion - var div = this.createInteraction(); - doc.appendChild(div); - var interaction = document.getElementById(this.interactionID); - switch (menuKey) { - case "playlist": - var input = this.createInput("button", menuKey, "{{.button.new}}"); - input.setAttribute("id", "-"); - input.setAttribute("onclick", 'javascript: openPopUp("playlist")'); - input.setAttribute('data-bs-toggle', 'modal'); - input.setAttribute('data-bs-target', '#popup'); - interaction.appendChild(input); - break; - case "filter": - var input = this.createInput("button", menuKey, "{{.button.new}}"); - input.setAttribute("id", -1); - input.setAttribute("onclick", 'javascript: openPopUp("filter", this)'); - input.setAttribute('data-bs-toggle', 'modal'); - input.setAttribute('data-bs-target', '#popup'); - interaction.appendChild(input); - break; - case "xmltv": - var input = this.createInput("button", menuKey, "{{.button.new}}"); - input.setAttribute("id", "xmltv"); - input.setAttribute("onclick", 'javascript: openPopUp("xmltv")'); - input.setAttribute('data-bs-toggle', 'modal'); - input.setAttribute('data-bs-target', '#popup'); - interaction.appendChild(input); - break; - case "users": - var input = this.createInput("button", menuKey, "{{.button.new}}"); - input.setAttribute("id", "users"); - input.setAttribute("onclick", 'javascript: openPopUp("users")'); - input.setAttribute('data-bs-toggle', 'modal'); - input.setAttribute('data-bs-target', '#popup'); - interaction.appendChild(input); - break; - case "mapping": - // showElement("loading", true) - var input = this.createInput("button", menuKey, "{{.button.save}}"); - input.setAttribute("onclick", 'javascript: savePopupData("mapping", "", "")'); - interaction.appendChild(input); - var input = this.createInput("button", menuKey, "{{.button.bulkEdit}}"); - input.setAttribute("onclick", 'javascript: bulkEdit()'); - interaction.appendChild(input); - var input = this.createInput("search", "search", ""); - input.setAttribute("id", "searchMapping"); - input.setAttribute("placeholder", "{{.button.search}}"); - input.className = "search"; - input.setAttribute("onchange", 'javascript: searchInMapping()'); - interaction.appendChild(input); - break; - case "settings": - var input = this.createInput("button", menuKey, "{{.button.save}}"); - input.setAttribute("onclick", 'javascript: saveSettings();'); - interaction.appendChild(input); - var input = this.createInput("button", menuKey, "{{.button.backup}}"); - input.setAttribute("onclick", 'javascript: backup();'); - interaction.appendChild(input); - var input = this.createInput("button", menuKey, "{{.button.restore}}"); - input.setAttribute("onclick", 'javascript: restore();'); - interaction.appendChild(input); - var wrapper = document.createElement("DIV"); - wrapper.setAttribute("id", "box-wrapper"); - doc.appendChild(wrapper); - this.DivID = "content_settings"; - var settings = this.createDIV(); - wrapper.appendChild(settings); - showSettings(); - return; - break; - case "log": - var input = this.createInput("button", menuKey, "{{.button.resetLogs}}"); - input.setAttribute("onclick", 'javascript: resetLogs();'); - interaction.appendChild(input); - var wrapper = document.createElement("DIV"); - wrapper.setAttribute("id", "box-wrapper"); - doc.appendChild(wrapper); - this.DivID = "content_log"; - var logs = this.createDIV(); - wrapper.appendChild(logs); - showLogs(true); - return; - break; - case "logout": - location.reload(); - document.cookie = "Token= ; expires = Thu, 01 Jan 1970 00:00:00 GMT"; - break; - default: - console.log("Show content (menuKey):", menuKey); - break; - } - // Tabelle erstellen (falls benötigt) - var tableHeader = menuItems[this.menuID].tableHeader; - if (tableHeader.length > 0) { - var wrapper = document.createElement("DIV"); - doc.appendChild(wrapper); - wrapper.setAttribute("id", "box-wrapper"); - var table = this.createTABLE(); - wrapper.appendChild(table); - var header = this.createTableRow(); - table.appendChild(header); - // Kopfzeile der Tablle - tableHeader.forEach(element => { - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = element; - if (element == "BULK") { - cell.childType = "BULK_HEAD"; - cell.active = true; - cell.value = false; - } - if (menuKey == "mapping") { - if (element == "{{.mapping.table.chNo}}") { - cell.onclick = true; - cell.onclickFunktion = "javascript: sortTable(1);"; - cell.tdClassName = "sortThis"; - } - if (element == "{{.mapping.table.channelName}}") { - cell.onclick = true; - cell.onclickFunktion = "javascript: sortTable(3);"; - } - if (element == "{{.mapping.table.playlist}}") { - cell.onclick = true; - cell.onclickFunktion = "javascript: sortTable(4);"; - } - if (element == "{{.mapping.table.groupTitle}}") { - cell.onclick = true; - cell.onclickFunktion = "javascript: sortTable(5);"; - } - } - header.appendChild(cell.createCell()); - }); - table.appendChild(header); - // Inhalt der Tabelle - var rows = this.createTableContent(menuKey); - rows.forEach(tr => { - table.appendChild(tr); - }); - var br = this.createBR(); - doc.appendChild(br); - // Create inactive channels for mapping - if (menuKey == "mapping") { - var inactivetable = this.createInactiveTABLE(); - wrapper.appendChild(inactivetable); - var header = this.createInactiveTableRow(); - inactivetable.appendChild(header); - // Kopfzeile der Tablle - tableHeader.forEach(element => { - var cell = new Cell(); - cell.child = true; - cell.childType = "P"; - cell.value = element; - if (element == "BULK") { - cell.childType = "BULK_HEAD"; - cell.active = false; - cell.value = false; - } - if (menuKey == "mapping") { - if (element == "{{.mapping.table.chNo}}") { - cell.onclick = true; - cell.onclickFunktion = "javascript: sortTable(1, 'inactive_content_table');"; - cell.tdClassName = "sortThis"; - } - if (element == "{{.mapping.table.channelName}}") { - cell.onclick = true; - cell.onclickFunktion = "javascript: sortTable(3, 'inactive_content_table');"; - } - if (element == "{{.mapping.table.playlist}}") { - cell.onclick = true; - cell.onclickFunktion = "javascript: sortTable(4, 'inactive_content_table');"; - } - if (element == "{{.mapping.table.groupTitle}}") { - cell.onclick = true; - cell.onclickFunktion = "javascript: sortTable(5, 'inactive_content_table');"; - } - } - header.appendChild(cell.createCell()); - }); - inactivetable.appendChild(header); - // Inhalt der Tabelle - var rows = this.createInactiveTableContent(menuKey); - rows.forEach(tr => { - inactivetable.appendChild(tr); - }); - savePopupData("mapping", "", false, 0); - } - } - switch (menuKey) { - case "mapping": - sortTable(1); - sortTable(1, "inactive_content_table"); - break; - case "filter": - showPreview(true); - sortTable(0); - break; - default: - COLUMN_TO_SORT = -1; - sortTable(0); - break; - } - showElement("loading", false); - } -} -function PageReady() { - var server = new Server("getServerConfig"); - server.request(new Object()); - setInterval(function () { - updateLog(); - }, 10000); - return; -} -function createLayout() { - // Client Info - var obj = SERVER["clientInfo"]; - var keys = getObjKeys(obj); - for (var i = 0; i < keys.length; i++) { - if (document.getElementById(keys[i])) { - document.getElementById(keys[i]).value = obj[keys[i]]; - } - } - if (!document.getElementById("main-menu")) { - return; - } - // Menü erstellen - document.getElementById("main-menu").innerHTML = ""; - for (let i = 0; i < menuItems.length; i++) { - menuItems[i].id = i; - switch (menuItems[i]["menuKey"]) { - case "users": - case "logout": - if (SERVER["settings"]["authentication.web"] == true) { - menuItems[i].createItem(); - } - break; - case "mapping": - case "xmltv": - menuItems[i].createItem(); - break; - default: - menuItems[i].createItem(); - break; - } - } - return; -} -function openThisMenu(element) { - var id = element.id; - var content = new ShowContent(id); - content.show(); - enableGroupSelection(".bulk"); - return; -} -class PopupWindow { - constructor() { - this.DocumentID = "popup-custom"; - this.InteractionID = "interaction"; - this.doc = document.getElementById(this.DocumentID); - } - createTitle(title) { - var td = document.createElement("TD"); - td.className = "left"; - td.innerHTML = title + ":"; - return td; - } - createContent(element) { - var td = document.createElement("TD"); - td.appendChild(element); - return td; - } - createInteraction() { - var div = document.createElement("div"); - div.setAttribute("id", "popup-interaction"); - div.className = "interaction"; - this.doc.appendChild(div); - } -} -class PopupContent extends PopupWindow { - constructor() { - super(...arguments); - this.table = document.createElement("TABLE"); - } - createHeadline(headline) { - this.doc.innerHTML = ""; - var element = document.createElement("H3"); - element.innerHTML = headline.toUpperCase(); - this.doc.appendChild(element); - // Tabelle erstellen - this.table = document.createElement("TABLE"); - this.doc.appendChild(this.table); - } - appendRow(title, element) { - var tr = document.createElement("TR"); - // Bezeichnung - if (title.length != 0) { - tr.appendChild(this.createTitle(title)); - } - // Content - tr.appendChild(this.createContent(element)); - this.table.appendChild(tr); - } - createInput(type, name, value) { - var input = document.createElement("INPUT"); - if (value == undefined) { - value = ""; - } - input.setAttribute("type", type); - input.setAttribute("name", name); - input.setAttribute("value", value); - return input; - } - createCheckbox(name) { - var input = document.createElement("INPUT"); - input.setAttribute("type", "checkbox"); - input.setAttribute("name", name); - return input; - } - createSelect(text, values, set, dbKey) { - var select = document.createElement("SELECT"); - select.setAttribute("name", dbKey); - for (let i = 0; i < text.length; i++) { - var option = document.createElement("OPTION"); - option.setAttribute("value", values[i]); - option.innerText = text[i]; - select.appendChild(option); - } - if (set != "") { - select.value = set; - } - if (set == undefined) { - select.value = values[0]; - } - return select; - } - selectOption(select, value) { - //select.selectedOptions = value - var s = select; - s.options[s.selectedIndex].value = value; - return select; - } - description(value) { - var tr = document.createElement("TR"); - var td = document.createElement("TD"); - var span = document.createElement("PRE"); - span.innerHTML = value; - tr.appendChild(td); - tr.appendChild(this.createContent(span)); - this.table.appendChild(tr); - } - // Interaktion - addInteraction(element) { - var interaction = document.getElementById("popup-interaction"); - interaction.appendChild(element); - } -} -function openPopUp(dataType, element) { - var data = new Object(); - var id; - switch (element) { - case undefined: - switch (dataType) { - case "group-title": - if (id == undefined) { - id = -1; - } - data = getLocalData("filter", id); - data["type"] = "group-title"; - break; - case "custom-filter": - if (id == undefined) { - id = -1; - } - data = getLocalData("filter", id); - data["type"] = "custom-filter"; - break; - default: - data["id.provider"] = "-"; - data["type"] = dataType; - id = "-"; - break; - } - break; - default: - id = element.id; - data = getLocalData(dataType, id); - break; - } - var content = new PopupContent(); - switch (dataType) { - case "playlist": - content.createHeadline("{{.playlist.playlistType.title}}"); - // Type - var text = ["M3U", "HDHomeRun"]; - var values = ["javascript: openPopUp('m3u')", "javascript: openPopUp('hdhr')"]; - var select = content.createSelect(text, values, "", "type"); - select.setAttribute("id", "type"); - select.setAttribute("onchange", 'javascript: changeButtonAction(this, "next", "onclick")'); // changeButtonAction - content.appendRow("{{.playlist.type.title}}", select); - // Interaktion - content.createInteraction(); - // Abbrechen - var input = content.createInput("button", "cancel", "{{.button.cancel}}"); - input.setAttribute("onclick", 'javascript: showElement("popup", false);'); - content.addInteraction(input); - // Weiter - var input = content.createInput("button", "next", "{{.button.next}}"); - input.setAttribute("onclick", 'javascript: openPopUp("m3u")'); - input.setAttribute("id", 'next'); - content.addInteraction(input); - break; - case "m3u": - content.createHeadline(dataType); - // Name - var dbKey = "name"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.playlist.name.placeholder}}"); - content.appendRow("{{.playlist.name.title}}", input); - // Beschreibung - var dbKey = "description"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.playlist.description.placeholder}}"); - content.appendRow("{{.playlist.description.title}}", input); - // URL - var dbKey = "file.source"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.playlist.fileM3U.placeholder}}"); - content.appendRow("{{.playlist.fileM3U.title}}", input); - // Tuner - if (SERVER["settings"]["buffer"] != "-") { - var text = new Array(); - var values = new Array(); - for (var i = 1; i <= 100; i++) { - text.push(i.toString()); - values.push(i.toString()); - } - var dbKey = "tuner"; - var select = content.createSelect(text, values, data[dbKey], dbKey); - select.setAttribute("onfocus", "javascript: return;"); - content.appendRow("{{.playlist.tuner.title}}", select); - } - else { - var dbKey = "tuner"; - if (data[dbKey] == undefined) { - data[dbKey] = 1; - } - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("readonly", "true"); - input.className = "notAvailable"; - content.appendRow("{{.playlist.tuner.title}}", input); - } - content.description("{{.playlist.tuner.description}}"); - // Interaktion - content.createInteraction(); - // Löschen - if (data["id.provider"] != "-") { - var input = content.createInput("button", "delete", "{{.button.delete}}"); - input.className = "delete"; - input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + id + '", true, 0)'); - content.addInteraction(input); - } - else { - var input = content.createInput("button", "back", "{{.button.back}}"); - input.setAttribute("onclick", 'javascript: openPopUp("playlist")'); - content.addInteraction(input); - } - // Abbrechen - var input = content.createInput("button", "cancel", "{{.button.cancel}}"); - input.setAttribute("onclick", 'javascript: showElement("popup", false);'); - content.addInteraction(input); - // Aktualisieren - if (data["id.provider"] != "-") { - var input = content.createInput("button", "update", "{{.button.update}}"); - input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + id + '", false, 1)'); - content.addInteraction(input); - } - // Speichern - var input = content.createInput("button", "save", "{{.button.save}}"); - input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + id + '", false, 0)'); - content.addInteraction(input); - break; - case "hdhr": - content.createHeadline(dataType); - // Name - var dbKey = "name"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.playlist.name.placeholder}}"); - content.appendRow("{{.playlist.name.title}}", input); - // Beschreibung - var dbKey = "description"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.playlist.description.placeholder}}"); - content.appendRow("{{.playlist.description.placeholder}}", input); - // URL - var dbKey = "file.source"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.playlist.fileHDHR.placeholder}}"); - content.appendRow("{{.playlist.fileHDHR.title}}", input); - // Tuner - if (SERVER["settings"]["buffer"] != "-") { - var text = new Array(); - var values = new Array(); - for (var i = 1; i <= 100; i++) { - text.push(i.toString()); - values.push(i.toString()); - } - var dbKey = "tuner"; - var select = content.createSelect(text, values, data[dbKey], dbKey); - select.setAttribute("onfocus", "javascript: return;"); - content.appendRow("{{.playlist.tuner.title}}", select); - } - else { - var dbKey = "tuner"; - if (data[dbKey] == undefined) { - data[dbKey] = 1; - } - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("readonly", "true"); - input.className = "notAvailable"; - content.appendRow("{{.playlist.tuner.title}}", input); - } - content.description("{{.playlist.tuner.description}}"); - // Interaktion - content.createInteraction(); - // Löschen - if (data["id.provider"] != "-") { - var input = content.createInput("button", "delete", "{{.button.delete}}"); - input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", true, 0)'); - input.className = "delete"; - content.addInteraction(input); - } - else { - var input = content.createInput("button", "back", "{{.button.back}}"); - input.setAttribute("onclick", 'javascript: openPopUp("playlist")'); - content.addInteraction(input); - } - // Abbrechen - var input = content.createInput("button", "cancel", "{{.button.cancel}}"); - input.setAttribute("onclick", 'javascript: showElement("popup", false);'); - content.addInteraction(input); - // Aktualisieren - if (data["id.provider"] != "-") { - var input = content.createInput("button", "update", "{{.button.update}}"); - input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", false, 1)'); - content.addInteraction(input); - } - // Speichern - var input = content.createInput("button", "save", "{{.button.save}}"); - input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", false, 0)'); - content.addInteraction(input); - break; - case "filter": - content.createHeadline(dataType); - // Type - var dbKey = "type"; - var text = ["M3U: " + "{{.filter.type.groupTitle}}", "Threadfin: " + "{{.filter.type.customFilter}}"]; - var values = ["javascript: openPopUp('group-title')", "javascript: openPopUp('custom-filter')"]; - var select = content.createSelect(text, values, "javascript: openPopUp('group-title')", dbKey); - select.setAttribute("id", id); - select.setAttribute("onchange", 'javascript: changeButtonAction(this, "next", "onclick");'); // changeButtonAction - content.appendRow("{{.filter.type.title}}", select); - // Interaktion - content.createInteraction(); - // Abbrechen - var input = content.createInput("button", "cancel", "{{.button.cancel}}"); - input.setAttribute("onclick", 'javascript: showElement("popup", false);'); - content.addInteraction(input); - // Weiter - var input = content.createInput("button", "next", "{{.button.next}}"); - input.setAttribute("onclick", 'javascript: openPopUp("group-title")'); - input.setAttribute("id", 'next'); - content.addInteraction(input); - break; - case "custom-filter": - case "group-title": - switch (dataType) { - case "custom-filter": - content.createHeadline("{{.filter.custom}}"); - break; - case "group-title": - content.createHeadline("{{.filter.group}}"); - break; - } - // Name - var dbKey = "name"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.filter.name.placeholder}}"); - content.appendRow("{{.filter.name.title}}", input); - // Beschreibung - var dbKey = "description"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.filter.description.placeholder}}"); - content.appendRow("{{.filter.description.title}}", input); - // Typ - var dbKey = "type"; - var input = content.createInput("hidden", dbKey, data[dbKey]); - content.appendRow("", input); - var filterType = data[dbKey]; - switch (filterType) { - case "custom-filter": - // Groß- Kleinschreibung beachten - var dbKey = "caseSensitive"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - content.appendRow("{{.filter.caseSensitive.title}}", input); - // Filterregel (Benutzerdefiniert) - var dbKey = "filter"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.filter.filterRule.placeholder}}"); - content.appendRow("{{.filter.filterRule.title}}", input); - break; - case "group-title": - //alert(dbKey + " " + filterType) - // Filter basierend auf den Gruppen in der M3U - var dbKey = "filter"; - var groupsM3U = getLocalData("m3uGroups", ""); - var text = groupsM3U["text"]; - var values = groupsM3U["value"]; - var select = content.createSelect(text, values, data[dbKey], dbKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - content.appendRow("{{.filter.filterGroup.title}}", select); - content.description("{{.filter.filterGroup.description}}"); - // Groß- Kleinschreibung beachten - var dbKey = "caseSensitive"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - content.appendRow("{{.filter.caseSensitive.title}}", input); - var dbKey = "include"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.filter.include.placeholder}}"); - content.appendRow("{{.filter.include.title}}", input); - content.description("{{.filter.include.description}}"); - var dbKey = "exclude"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.filter.exclude.placeholder}}"); - content.appendRow("{{.filter.exclude.title}}", input); - content.description("{{.filter.exclude.description}}"); - break; - default: - break; - } - // Name - var dbKey = "startingNumber"; - if (data[dbKey] !== undefined) { - var input = content.createInput("text", dbKey, data[dbKey]); - } - else { - var input = content.createInput("text", dbKey, "1000"); - } - input.setAttribute("placeholder", "{{.filter.startingnumber.placeholder}}"); - content.appendRow("{{.filter.startingnumber.title}}", input); - content.description("{{.filter.startingnumber.description}}"); - var dbKey = "x-category"; - var text = ["-"]; - var values = [""]; - var epgCategories = SERVER["settings"]["epgCategories"]; - var categories = epgCategories.split("|"); - for (i = 0; i <= categories.length; i++) { - var cat = categories[i]; - if (cat) { - var cat_split = cat.split(":"); - text.push(cat_split[0]); - values.push(cat_split[1]); - } - } - var select = content.createSelect(text, values, data[dbKey], dbKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - content.appendRow("{{.filter.category.title}}", select); - // Interaktion - content.createInteraction(); - // Löschen - var input = content.createInput("button", "delete", "{{.button.delete}}"); - input.setAttribute('onclick', 'javascript: savePopupData("filter", "' + id + '", true, 0)'); - input.className = "delete"; - content.addInteraction(input); - // Abbrechen - var input = content.createInput("button", "cancel", "{{.button.cancel}}"); - input.setAttribute("onclick", 'javascript: showElement("popup", false);'); - content.addInteraction(input); - // Speichern - var input = content.createInput("button", "save", "{{.button.save}}"); - input.setAttribute('onclick', 'javascript: savePopupData("filter", "' + id + '", false, 0)'); - content.addInteraction(input); - break; - case "xmltv": - content.createHeadline(dataType); - // Name - var dbKey = "name"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.xmltv.name.placeholder}}"); - content.appendRow("{{.xmltv.name.title}}", input); - // Beschreibung - var dbKey = "description"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.xmltv.description.placeholder}}"); - content.appendRow("{{.xmltv.description.title}}", input); - // URL - var dbKey = "file.source"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.xmltv.fileXMLTV.placeholder}}"); - content.appendRow("{{.xmltv.fileXMLTV.title}}", input); - // Interaktion - content.createInteraction(); - // Löschen - if (data["id.provider"] != "-") { - var input = content.createInput("button", "delete", "{{.button.delete}}"); - input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", true, 0)'); - input.className = "delete"; - content.addInteraction(input); - } - // Abbrechen - var input = content.createInput("button", "cancel", "{{.button.cancel}}"); - input.setAttribute("onclick", 'javascript: showElement("popup", false);'); - content.addInteraction(input); - // Aktualisieren - if (data["id.provider"] != "-") { - var input = content.createInput("button", "update", "{{.button.update}}"); - input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", false, 1)'); - content.addInteraction(input); - } - // Speichern - var input = content.createInput("button", "save", "{{.button.save}}"); - input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", false, 0)'); - content.addInteraction(input); - break; - case "users": - content.createHeadline("{{.mainMenu.item.users}}"); - // Benutzername - var dbKey = "username"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.users.username.placeholder}}"); - content.appendRow("{{.users.username.title}}", input); - // Neues Passwort - var dbKey = "password"; - var input = content.createInput("password", dbKey, ""); - input.setAttribute("placeholder", "{{.users.password.placeholder}}"); - content.appendRow("{{.users.password.title}}", input); - // Bestätigung - var dbKey = "confirm"; - var input = content.createInput("password", dbKey, ""); - input.setAttribute("placeholder", "{{.users.confirm.placeholder}}"); - content.appendRow("{{.users.confirm.title}}", input); - // Berechtigung WEB - var dbKey = "authentication.web"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - if (data["defaultUser"] == true) { - input.setAttribute("onclick", "javascript: return false"); - } - content.appendRow("{{.users.web.title}}", input); - // Berechtigung PMS - var dbKey = "authentication.pms"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - content.appendRow("{{.users.pms.title}}", input); - // Berechtigung M3U - var dbKey = "authentication.m3u"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - content.appendRow("{{.users.m3u.title}}", input); - // Berechtigung XML - var dbKey = "authentication.xml"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - content.appendRow("{{.users.xml.title}}", input); - // Berechtigung API - var dbKey = "authentication.api"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - content.appendRow("{{.users.api.title}}", input); - // Interaktion - content.createInteraction(); - // Löschen - if (data["defaultUser"] != true && id != "-") { - var input = content.createInput("button", "delete", "{{.button.delete}}"); - input.className = "delete"; - input.setAttribute('onclick', 'javascript: savePopupData("' + dataType + '", "' + id + '", true, 0)'); - content.addInteraction(input); - } - // Abbrechen - var input = content.createInput("button", "cancel", "{{.button.cancel}}"); - input.setAttribute("onclick", 'javascript: showElement("popup", false);'); - content.addInteraction(input); - // Speichern - var input = content.createInput("button", "save", "{{.button.save}}"); - input.setAttribute("onclick", 'javascript: savePopupData("' + dataType + '", "' + id + '", "false");'); - content.addInteraction(input); - break; - case "mapping": - content.createHeadline("{{.mainMenu.item.mapping}}"); - if (BULK_EDIT == true) { - var dbKey = "x-channels-start"; - var input = content.createInput("text", dbKey, data[dbKey]); - // Set the value to the first selected channel - var channels = getAllSelectedChannels(); - var channel = SERVER["xepg"]["epgMapping"][channels[0]]; - if (typeof channel !== "undefined") { - input.setAttribute("value", channel["x-channelID"]); - } - input.setAttribute("onchange", 'javascript: changeChannelNumbers("' + channels + '");'); - content.appendRow("{{.mapping.channelGroupStart.title}}", input); - } - // Aktiv - var dbKey = "x-active"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - input.id = "active"; - //input.setAttribute("onchange", "javascript: this.className = 'changed'") - input.setAttribute("onchange", "javascript: toggleChannelStatus('" + id + "', this)"); - content.appendRow("{{.mapping.active.title}}", input); - // Kanalname - var dbKey = "x-name"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - if (BULK_EDIT == true) { - input.style.border = "solid 1px red"; - input.setAttribute("readonly", "true"); - } - content.appendRow("{{.mapping.channelName.title}}", input); - content.description(data["name"]); - // Beschreibung - var dbKey = "x-description"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("placeholder", "{{.mapping.description.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - content.appendRow("{{.mapping.description.title}}", input); - // Aktualisierung des Kanalnamens - if (data.hasOwnProperty("_uuid.key")) { - if (data["_uuid.key"] != "") { - var dbKey = "x-update-channel-name"; - var input = content.createCheckbox(dbKey); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - input.checked = data[dbKey]; - content.appendRow("{{.mapping.updateChannelName.title}}", input); - } - } - // Logo URL (Kanal) - var dbKey = "tvg-logo"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - input.setAttribute("id", "channel-icon"); - content.appendRow("{{.mapping.channelLogo.title}}", input); - // Aktualisierung des Kanallogos - var dbKey = "x-update-channel-icon"; - var input = content.createCheckbox(dbKey); - input.checked = data[dbKey]; - input.setAttribute("id", "update-icon"); - input.setAttribute("onchange", "javascript: this.className = 'changed'; changeChannelLogo('" + id + "');"); - content.appendRow("{{.mapping.updateChannelLogo.title}}", input); - // Erweitern der EPG Kategorie - var dbKey = "x-category"; - var text = ["-"]; - var values = [""]; - var epgCategories = SERVER["settings"]["epgCategories"]; - var categories = epgCategories.split("|"); - for (i = 0; i <= categories.length; i++) { - var cat = categories[i]; - if (cat) { - var cat_split = cat.split(":"); - text.push(cat_split[0]); - values.push(cat_split[1]); - } - } - var select = content.createSelect(text, values, data[dbKey], dbKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - content.appendRow("{{.mapping.epgCategory.title}}", select); - // M3U Gruppentitel - var dbKey = "x-group-title"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - content.appendRow("{{.mapping.m3uGroupTitle.title}}", input); - if (data["group-title"] != undefined) { - content.description(data["group-title"]); - } - // XMLTV Datei - var dbKey = "x-xmltv-file"; - var xmlFile = data[dbKey]; - var xmltv = new XMLTVFile(); - var select = xmltv.getFiles(data[dbKey]); - select.setAttribute("name", dbKey); - select.setAttribute("id", "popup-xmltv"); - select.setAttribute("onchange", "javascript: this.className = 'changed'; setXmltvChannel('" + id + "',this, '" + data["x-mapping"] + "');"); - content.appendRow("{{.mapping.xmltvFile.title}}", select); - var file = data[dbKey]; - // XMLTV Mapping - var dbKey = "x-mapping"; - var xmltv = new XMLTVFile(); - const currentXmlTvId = data[dbKey]; - const [xmlTvIdContainer, xmlTvIdInput, xmlTvIdDatalist] = xmltv.newXmlTvIdPicker(xmlFile, currentXmlTvId); - xmlTvIdContainer.setAttribute('id', 'xmltv-id-picker-container'); - xmlTvIdInput.setAttribute('list', 'xmltv-id-picker-datalist'); - xmlTvIdInput.setAttribute('name', 'x-mapping'); // Should stay x-mapping as it will be used in donePopupData to make a server request - xmlTvIdInput.setAttribute('id', 'xmltv-id-picker-input'); - xmlTvIdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${id}', this, '${xmlFile}');`); - xmlTvIdDatalist.setAttribute('id', 'xmltv-id-picker-datalist'); - // sortSelect(xmlTvIdDatalist); // TODO: Better sort before adding - content.appendRow('{{.mapping.xmltvChannel.title}}', xmlTvIdContainer); - // Extra PPV Data - if (currentXmlTvId == "PPV") { - var dbKey = "x-ppv-extra"; - var input = content.createInput("text", dbKey, data[dbKey]); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - input.setAttribute("id", "ppv-extra"); - content.appendRow("{{.mapping.ppvextra.title}}", input); - } - var dbKey = "x-backup-channel-1"; - var xmltv = new XMLTVFile(); - const backup1XmlTvId = data[dbKey]; - const [xmlTvBackup1IdContainer, xmlTvBackup1IdInput, xmlTvBackup1IdDatalist] = xmltv.newXmlTvIdPicker(xmlFile, backup1XmlTvId); - xmlTvBackup1IdContainer.setAttribute('id', 'xmltv-id-picker-container-1'); - xmlTvBackup1IdInput.setAttribute('list', 'xmltv-id-picker-datalist'); - xmlTvBackup1IdInput.setAttribute('name', dbKey); // Should stay x-mapping as it will be used in donePopupData to make a server request - xmlTvBackup1IdInput.setAttribute("id", "backup-channel-1"); - xmlTvBackup1IdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${id}', this, '${xmlFile}');`); - xmlTvBackup1IdDatalist.setAttribute('id', 'xmltv-id-picker-datalist-backup1'); - // sortSelect(xmlTvIdDatalist); // TODO: Better sort before adding - content.appendRow('{{.mapping.backupChannel1.title}}', xmlTvBackup1IdContainer); - var dbKey = "x-backup-channel-2"; - var xmltv = new XMLTVFile(); - const backup2XmlTvId = data[dbKey]; - const [xmlTvBackup2IdContainer, xmlTvBackup2IdInput, xmlTvBackup2IdDatalist] = xmltv.newXmlTvIdPicker(xmlFile, backup2XmlTvId); - xmlTvBackup2IdContainer.setAttribute('id', 'xmltv-id-picker-container-2'); - xmlTvBackup2IdInput.setAttribute('list', 'xmltv-id-picker-datalist'); - xmlTvBackup2IdInput.setAttribute('name', dbKey); // Should stay x-mapping as it will be used in donePopupData to make a server request - xmlTvBackup2IdInput.setAttribute("id", "backup-channel-2"); - xmlTvBackup2IdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${id}', this, '${xmlFile}');`); - xmlTvBackup2IdDatalist.setAttribute('id', 'xmltv-id-picker-datalist-backup2'); - content.appendRow("{{.mapping.backupChannel2.title}}", xmlTvBackup2IdContainer); - var dbKey = "x-backup-channel-3"; - var xmltv = new XMLTVFile(); - const backup3XmlTvId = data[dbKey]; - const [xmlTvBackup3IdContainer, xmlTvBackup3IdInput, xmlTvBackup3IdDatalist] = xmltv.newXmlTvIdPicker(xmlFile, backup3XmlTvId); - xmlTvBackup3IdContainer.setAttribute('id', 'xmltv-id-picker-container-3'); - xmlTvBackup3IdInput.setAttribute('list', 'xmltv-id-picker-datalist'); - xmlTvBackup3IdInput.setAttribute('name', dbKey); // Should stay x-mapping as it will be used in donePopupData to make a server request - xmlTvBackup3IdInput.setAttribute("id", "backup-channel-3"); - xmlTvBackup3IdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${id}', this, '${xmlFile}');`); - xmlTvBackup3IdDatalist.setAttribute('id', 'xmltv-id-picker-datalist-backup3'); - content.appendRow("{{.mapping.backupChannel3.title}}", xmlTvBackup3IdContainer); - // Interaktion - content.createInteraction(); - // Logo hochladen - var input = content.createInput("button", "cancel", "{{.button.uploadLogo}}"); - input.setAttribute("onclick", 'javascript: uploadLogo();'); - content.addInteraction(input); - // Abbrechen - var input = content.createInput("button", "cancel", "{{.button.cancel}}"); - input.setAttribute("onclick", 'javascript: showElement("popup", false);'); - content.addInteraction(input); - // Fertig - var ids = new Array(); - ids = getAllSelectedChannels(); - if (ids.length == 0) { - ids.push(id); - } - var input = content.createInput("button", "save", "{{.button.done}}"); - input.setAttribute("onclick", 'javascript: donePopupData("' + dataType + '", "' + ids + '", "false");'); - content.addInteraction(input); - break; - default: - break; - } - showPopUpElement('popup-custom'); -} -class XMLTVFile { - getFiles(set) { - var fileIDs = getObjKeys(SERVER["xepg"]["xmltvMap"]); - var values = new Array("-"); - var text = new Array("-"); - for (let i = 0; i < fileIDs.length; i++) { - if (fileIDs[i] != "Threadfin Dummy") { - values.push(getValueFromProviderFile(fileIDs[i], "xmltv", "file.threadfin")); - text.push(getValueFromProviderFile(fileIDs[i], "xmltv", "name")); - } - else { - values.push(fileIDs[i]); - text.push(fileIDs[i]); - } - } - var select = document.createElement("SELECT"); - for (let i = 0; i < text.length; i++) { - var option = document.createElement("OPTION"); - option.setAttribute("value", values[i]); - option.innerText = text[i]; - select.appendChild(option); - } - if (set != "") { - select.value = set; - } - return select; - } - /** - * @param xmlTvFile XML file path to get EPG from. - * @param currentXmlTvId Current XMLTV ID to set initial input value to. - * @returns Array of, sequentially: - * 1) Container of the picker. - * 2) Input field to type at and get choice from. - * 3) Datalist containing every option. - */ - newXmlTvIdPicker(xmlTvFile, currentXmlTvId) { - const container = document.createElement('div'); - const input = document.createElement('input'); - input.setAttribute('type', 'text'); - // Initially, set value to '-' if input is empty - input.value = (currentXmlTvId) ? currentXmlTvId : '-'; - // When input is focused, remove '-' from it - input.addEventListener('focus', (evt) => { - const target = evt.target; - target.value = (target.value === '-') ? '' : target.value; - }); - // When input lose focus or take a value, if it's empty, set value to '-' - input.addEventListener('blur', setFallbackValue); - input.addEventListener('change', setFallbackValue); - function setFallbackValue(evt) { - const target = evt.target; - target.value = (target.value) ? target.value : '-'; - } - container.appendChild(input); - const datalist = document.createElement('datalist'); - const option = document.createElement('option'); - option.setAttribute('value', '-'); - option.innerText = '-'; - datalist.appendChild(option); - const epg = SERVER['xepg']['xmltvMap'][xmlTvFile]; - if (epg) { - const programIds = getOwnObjProps(epg); - programIds.forEach((programId) => { - const program = epg[programId]; - if (program.hasOwnProperty('display-name')) { - const option = document.createElement('option'); - option.setAttribute('value', programId); - option.innerText = program["display-name"]; - datalist.appendChild(option); - } - else { - const option = document.createElement('option'); - option.setAttribute('value', programId); - option.innerText = '-'; - datalist.appendChild(option); - } - }); - } - container.appendChild(datalist); - return [container, input, datalist]; - } - getPrograms(file, set, active) { - //var fileIDs:string[] = getObjKeys(SERVER["xepg"]["xmltvMap"]) - var values = getObjKeys(SERVER["xepg"]["xmltvMap"][file]); - var text = new Array(); - var displayName; - var actives = getObjKeys(SERVER["data"]["StreamPreviewUI"]["activeStreams"]); - var active_list = new Array(); - if (active == true) { - for (let i = 0; i < actives.length; i++) { - var names_split = SERVER["data"]["StreamPreviewUI"]["activeStreams"][actives[i]].split("["); - displayName = names_split[0].trim(); - if (displayName != "") { - var object = { "value": displayName, "display": displayName }; - active_list.push(object); - } - } - } - else { - for (let i = 0; i < values.length; i++) { - if (SERVER["xepg"]["xmltvMap"][file][values[i]].hasOwnProperty('display-name') == true) { - displayName = SERVER["xepg"]["xmltvMap"][file][values[i]]["display-name"]; - } - else { - displayName = "-"; - } - text[i] = displayName + " (" + values[i] + ")"; - } - } - text.unshift("-"); - values.unshift("-"); - var select = document.createElement("SELECT"); - for (let i = 0; i < text.length; i++) { - var option = document.createElement("OPTION"); - option.setAttribute("value", values[i]); - option.innerText = text[i]; - select.appendChild(option); - } - for (let i = 0; i < active_list.length; i++) { - var option = document.createElement("OPTION"); - option.setAttribute("value", active_list[i]["value"]); - option.innerText = active_list[i]["display"]; - select.appendChild(option); - } - if (set != "") { - select.value = set; - } - if (select.value != set) { - select.value = "-"; - } - return select; - } -} -function getValueFromProviderFile(file, fileType, key) { - if (file == "Threadfin Dummy") { - return file; - } - var fileID; - var indicator = file.charAt(0); - switch (indicator) { - case "M": - fileType = "m3u"; - fileID = file; - break; - case "H": - fileType = "hdhr"; - fileID = file; - break; - case "X": - fileType = "xmltv"; - fileID = file.substring(0, file.lastIndexOf('.')); - break; - } - if (SERVER["settings"]["files"][fileType].hasOwnProperty(fileID) == true) { - var data = SERVER["settings"]["files"][fileType][fileID]; - return data[key]; - } - return; -} -function setXmltvChannel(epgMapId, xmlTvFileSelect) { - const xmlTv = new XMLTVFile(); - const newXmlTvFile = xmlTvFileSelect.value; - // Remove old XMLTV ID selection box - const xmlTvIdPickerParent = document.getElementById('xmltv-id-picker-container').parentElement; - xmlTvIdPickerParent.innerHTML = ''; - // Create new XMLTV ID selection box - const tvgId = SERVER['xepg']['epgMapping'][epgMapId]['tvg-id']; - const [xmlTvIdContainer, xmlTvIdInput, xmlTvIdDatalist] = xmlTv.newXmlTvIdPicker(newXmlTvFile, tvgId); - xmlTvIdContainer.setAttribute('id', 'xmltv-id-picker-container'); - xmlTvIdInput.setAttribute('list', 'xmltv-id-picker-datalist'); - xmlTvIdInput.setAttribute('name', 'x-mapping'); // Should stay x-mapping as it will be used in donePopupData to make a server request - xmlTvIdInput.setAttribute('id', 'xmltv-id-picker-input'); - xmlTvIdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${epgMapId}', this.value, '${newXmlTvFile}');`); - xmlTvIdInput.classList.add('changed'); - xmlTvIdDatalist.setAttribute('id', 'xmltv-id-picker-datalist'); - // Add new XMLTV ID selection box to it's parent - xmlTvIdPickerParent.appendChild(xmlTvIdContainer); - checkXmltvChannel(epgMapId, xmlTvIdInput.value, newXmlTvFile); -} -function checkPPV(title, element) { - var value = element.value; - console.log("DUMMY TYPE: " + value); - if (value == "PPV") { - var td = document.getElementById("x-ppv-extra").parentElement; - td.innerHTML = ""; - var dbKey = "x-ppv-extra"; - var input = document.createElement("INPUT"); - input.setAttribute("type", "text"); - input.setAttribute("name", dbKey); - // input.setAttribute("value", value) - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - input.setAttribute("id", "ppv-extra"); - var tr = document.createElement("TR"); - // Bezeichnung - if (title.length != 0) { - var td = document.createElement("TD"); - td.className = "left"; - td.innerHTML = title + ":"; - } - // Content - td.appendChild(element); - this.table.appendChild(tr); - } -} -function checkXmltvChannel(id, element, xmlFile) { - var value = element.value; - var bool; - var checkbox = document.getElementById('active'); - var channel = SERVER["xepg"]["epgMapping"][id]; - var updateLogo; - if (value == "-") { - bool = false; - } - else { - bool = true; - } - checkbox.checked = bool; - checkbox.className = "changed"; - console.log(xmlFile); - // Kanallogo aktualisieren - /* - updateLogo = (document.getElementById("update-icon") as HTMLInputElement).checked - console.log(updateLogo); - */ - if (xmlFile != "Threadfin Dummy" && bool == true) { - //(document.getElementById("update-icon") as HTMLInputElement).checked = true; - //(document.getElementById("update-icon") as HTMLInputElement).className = "changed"; - console.log("ID", id); - changeChannelLogo(id); - return; - } - if (xmlFile == "Threadfin Dummy") { - document.getElementById("update-icon").checked = false; - document.getElementById("update-icon").className = "changed"; - } - return; -} -function changeChannelLogo(epgMapId) { - const channel = SERVER['xepg']['epgMapping'][epgMapId]; - const xmlTvFileSelect = document.getElementById('popup-xmltv'); - const xmlTvFile = xmlTvFileSelect.options[xmlTvFileSelect.selectedIndex].value; - const xmlTvIdInput = document.getElementById('xmltv-id-picker-input'); - const newXmlTvId = xmlTvIdInput.value; - const updateLogo = !BULK_EDIT || document.getElementById('update-icon').checked; - let logo; - if (updateLogo == true && xmlTvFile != 'Threadfin Dummy') { - if (SERVER['xepg']['xmltvMap'][xmlTvFile].hasOwnProperty(newXmlTvId)) { - logo = SERVER['xepg']['xmltvMap'][xmlTvFile][newXmlTvId]['icon']; - } - else { - logo = channel['tvg-logo']; - } - } -} -function savePopupData(dataType, id, remove, option) { - showElement("loading", true); - if (dataType == "mapping") { - var data = new Object(); - console.log("Save mapping data"); - cmd = "saveEpgMapping"; - data["epgMapping"] = SERVER["xepg"]["epgMapping"]; - console.log("SEND TO SERVER"); - var server = new Server(cmd); - server.request(data); - delete UNDO["epgMapping"]; - showElement("loading", false); - return; - } - console.log("Save popup data"); - var div = document.getElementById("popup-custom"); - var inputs = div.getElementsByTagName("TABLE")[0].getElementsByTagName("INPUT"); - var selects = div.getElementsByTagName("TABLE")[0].getElementsByTagName("SELECT"); - var input = new Object(); - var confirmMsg; - for (let i = 0; i < selects.length; i++) { - var name; - name = selects[i].name; - var value = selects[i].value; - switch (name) { - case "tuner": - input[name] = parseInt(value); - break; - default: - input[name] = value; - break; - } - } - for (let i = 0; i < inputs.length; i++) { - switch (inputs[i].type) { - case "checkbox": - name = inputs[i].name; - input[name] = inputs[i].checked; - break; - case "text": - case "hidden": - case "password": - name = inputs[i].name; - switch (name) { - case "tuner": - input[name] = parseInt(inputs[i].value); - break; - default: - input[name] = inputs[i].value; - break; - } - break; - } - } - var data = new Object(); - var cmd; - if (remove == true) { - input["delete"] = true; - } - switch (dataType) { - case "users": - confirmMsg = "Delete this user?"; - if (id == "-") { - cmd = "saveNewUser"; - data["userData"] = input; - } - else { - cmd = "saveUserData"; - var d = new Object(); - d[id] = input; - data["userData"] = d; - } - break; - case "m3u": - confirmMsg = "Delete this playlist?"; - switch (option) { - // Popup: Save - case 0: - cmd = "saveFilesM3U"; - break; - // Popup: Update - case 1: - cmd = "updateFileM3U"; - break; - } - data["files"] = new Object; - data["files"][dataType] = new Object; - data["files"][dataType][id] = input; - break; - case "hdhr": - confirmMsg = "Delete this HDHomeRun tuner?"; - switch (option) { - // Popup: Save - case 0: - cmd = "saveFilesHDHR"; - break; - // Popup: Update - case 1: - cmd = "updateFileHDHR"; - break; - } - data["files"] = new Object; - data["files"][dataType] = new Object; - data["files"][dataType][id] = input; - break; - case "xmltv": - confirmMsg = "Delete this XMLTV file?"; - switch (option) { - // Popup: Save - case 0: - cmd = "saveFilesXMLTV"; - break; - // Popup: Update - case 1: - cmd = "updateFileXMLTV"; - break; - } - data["files"] = new Object; - data["files"][dataType] = new Object; - data["files"][dataType][id] = input; - break; - case "filter": - confirmMsg = "Delete this filter?"; - cmd = "saveFilter"; - data["filter"] = new Object; - data["filter"][id] = input; - break; - default: - console.log(dataType, id); - return; - break; - } - if (remove == true) { - if (!confirm(confirmMsg)) { - showElement("popup", false); - return; - } - } - console.log("SEND TO SERVER"); - console.log(data); - var server = new Server(cmd); - server.request(data); - showElement("loading", false); -} -function donePopupData(dataType, idsStr) { - var ids = idsStr.split(','); - var div = document.getElementById("popup-custom"); - var inputs = div.getElementsByClassName("changed"); - ids.forEach(id => { - var input = new Object(); - input = SERVER["xepg"]["epgMapping"][id]; - console.log("INPUT: " + input); - for (let i = 0; i < inputs.length; i++) { - var name; - var value; - switch (inputs[i].tagName) { - case "INPUT": - switch (inputs[i].type) { - case "checkbox": - name = inputs[i].name; - value = inputs[i].checked; - input[name] = value; - break; - case "text": - name = inputs[i].name; - value = inputs[i].value; - input[name] = value; - break; - } - break; - case "SELECT": - name = inputs[i].name; - value = inputs[i].value; - input[name] = value; - break; - } - switch (name) { - case "tvg-logo": - //(document.getElementById(id).childNodes[2].firstChild as HTMLElement).setAttribute("src", value) - break; - case "x-channel-start": - document.getElementById(id).childNodes[3].firstChild.innerHTML = value; - break; - case "x-name": - document.getElementById(id).childNodes[3].firstChild.innerHTML = value; - break; - case "x-category": - var color = "white"; - var catColorSettings = SERVER["settings"]["epgCategoriesColors"]; - var colors_split = catColorSettings.split("|"); - for (var ii = 0; ii < colors_split.length; ii++) { - var catsColor_split = colors_split[ii].split(":"); - if (catsColor_split[0] == value) { - color = catsColor_split[1]; - } - } - document.getElementById(id).childNodes[3].firstChild.style.borderColor = color; - break; - case "x-group-title": - document.getElementById(id).childNodes[5].firstChild.innerHTML = value; - break; - case "x-xmltv-file": - if (value != "Threadfin Dummy" && value != "-") { - value = getValueFromProviderFile(value, "xmltv", "name"); - } - if (value == "-") { - input["x-active"] = false; - } - document.getElementById(id).childNodes[6].firstChild.innerHTML = value; - break; - case "x-mapping": - if (value == "-") { - input["x-active"] = false; - } - document.getElementById(id).childNodes[7].firstChild.innerHTML = value; - break; - case "x-backup-channel": - document.getElementById(id).childNodes[7].firstChild.innerHTML = value; - break; - case "x-hide-channel": - document.getElementById(id).childNodes[7].firstChild.innerHTML = value; - break; - default: - } - createSearchObj(); - searchInMapping(); - } - if (input["x-active"] == false) { - document.getElementById(id).className = "notActiveEPG"; - } - else { - document.getElementById(id).className = "activeEPG"; - } - console.log(input["tvg-logo"]); - document.getElementById(id).childNodes[2].firstChild.setAttribute("src", input["tvg-logo"]); - }); - showElement("popup", false); - return; -} -function showPreview(element) { - var div = document.getElementById("myStreamsBox"); - switch (element) { - case false: - div.className = "notVisible"; - return; - break; - } - var streams = ["activeStreams", "inactiveStreams"]; - streams.forEach(preview => { - var table = document.getElementById(preview); - table.innerHTML = ""; - var obj = SERVER["data"]["StreamPreviewUI"][preview]; - var caption = document.createElement("CAPTION"); - var result = preview.replace(/([A-Z])/g, " $1"); - var finalResult = result.charAt(0).toUpperCase() + result.slice(1); - caption.innerHTML = finalResult; - table.appendChild(caption); - var tbody = document.createElement("TBODY"); - table.appendChild(tbody); - obj.slice(0, 1000).forEach(channel => { - var tr = document.createElement("TR"); - var tdKey = document.createElement("TD"); - var tdVal = document.createElement("TD"); - tdKey.className = "tdKey"; - tdVal.className = "tdVal"; - switch (preview) { - case "activeStreams": - tdKey.innerText = "Channel: (+)"; - break; - case "inactiveStreams": - tdKey.innerText = "Channel: (-)"; - break; - } - tdVal.innerText = channel; - tr.appendChild(tdKey); - tr.appendChild(tdVal); - tbody.appendChild(tr); - table.appendChild(tr); - }); - }); - // showElement("loading", false) - div.className = "visible"; - return; -} -//# sourceMappingURL=menu_ts.js.map \ No newline at end of file diff --git a/html/js/network_ts.js b/html/js/network_ts.js deleted file mode 100644 index 474c5a5..0000000 --- a/html/js/network_ts.js +++ /dev/null @@ -1,105 +0,0 @@ -class Server { - constructor(cmd) { - this.cmd = cmd; - } - request(data) { - if (SERVER_CONNECTION == true) { - return; - } - SERVER_CONNECTION = true; - console.log(data); - if (this.cmd != "updateLog") { - // showElement("loading", true) - UNDO = new Object(); - } - switch (window.location.protocol) { - case "http:": - this.protocol = "ws://"; - break; - case "https:": - this.protocol = "wss://"; - break; - } - var url = this.protocol + window.location.hostname + ":" + window.location.port + "/data/" + "?Token=" + getCookie("Token"); - data["cmd"] = this.cmd; - var ws = new WebSocket(url); - ws.onopen = function () { - WS_AVAILABLE = true; - console.log("REQUEST (JS):"); - console.log(data); - console.log("REQUEST: (JSON)"); - console.log(JSON.stringify(data)); - this.send(JSON.stringify(data)); - }; - ws.onerror = function (e) { - console.log("No websocket connection to Threadfin could be established. Check your network configuration."); - SERVER_CONNECTION = false; - if (WS_AVAILABLE == false) { - alert("No websocket connection to Threadfin could be established. Check your network configuration."); - } - }; - ws.onmessage = function (e) { - SERVER_CONNECTION = false; - showElement("loading", false); - console.log("RESPONSE:"); - var response = JSON.parse(e.data); - console.log(response); - if (response.hasOwnProperty("token")) { - document.cookie = "Token=" + response["token"]; - } - if (response["status"] == false) { - alert(response["err"]); - if (response.hasOwnProperty("reload")) { - location.reload(); - } - return; - } - if (response.hasOwnProperty("logoURL")) { - var div = document.getElementById("channel-icon"); - div.value = response["logoURL"]; - div.className = "changed"; - return; - } - switch (data["cmd"]) { - case "updateLog": - SERVER["log"] = response["log"]; - if (document.getElementById("content_log")) { - showLogs(false); - } - return; - break; - default: - SERVER = new Object(); - SERVER = response; - break; - } - if (response.hasOwnProperty("openMenu")) { - var menu = document.getElementById(response["openMenu"]); - menu.click(); - showElement("popup", false); - } - if (response.hasOwnProperty("openLink")) { - window.location = response["openLink"]; - } - if (response.hasOwnProperty("alert")) { - alert(response["alert"]); - } - if (response.hasOwnProperty("reload")) { - location.reload(); - } - if (response.hasOwnProperty("wizard")) { - createLayout(); - configurationWizard[response["wizard"]].createWizard(); - return; - } - createLayout(); - }; - } -} -function getCookie(name) { - var value = "; " + document.cookie; - var parts = value.split("; " + name + "="); - if (parts.length == 2) - return parts.pop().split(";").shift(); -} -//# sourceMappingURL=network_ts.js.map \ No newline at end of file diff --git a/html/js/settings_ts.js b/html/js/settings_ts.js deleted file mode 100644 index 70b8235..0000000 --- a/html/js/settings_ts.js +++ /dev/null @@ -1,684 +0,0 @@ -class SettingsCategory { - constructor() { - this.DocumentID = "content_settings"; - } - createCategoryHeadline(value) { - var element = document.createElement("H4"); - element.innerHTML = value; - return element; - } - createHR() { - var element = document.createElement("HR"); - return element; - } - createSettings(settingsKey) { - var setting = document.createElement("TR"); - var content = new PopupContent(); - var data = SERVER["settings"][settingsKey]; - switch (settingsKey) { - // Texteingaben - case "update": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.update.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "update", data.toString()); - input.setAttribute("placeholder", "{{.settings.update.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "backup.path": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.backupPath.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "backup.path", data); - input.setAttribute("placeholder", "{{.settings.backupPath.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "temp.path": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.tempPath.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "temp.path", data); - input.setAttribute("placeholder", "{{.settings.tmpPath.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "user.agent": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.userAgent.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "user.agent", data); - input.setAttribute("placeholder", "{{.settings.userAgent.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "buffer.timeout": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.bufferTimeout.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "buffer.timeout", data); - input.setAttribute("placeholder", "{{.settings.bufferTimeout.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "ffmpeg.path": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.ffmpegPath.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "ffmpeg.path", data); - input.setAttribute("placeholder", "{{.settings.ffmpegPath.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "ffmpeg.options": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.ffmpegOptions.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "ffmpeg.options", data); - input.setAttribute("placeholder", "{{.settings.ffmpegOptions.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "vlc.path": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.vlcPath.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "vlc.path", data); - input.setAttribute("placeholder", "{{.settings.vlcPath.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "vlc.options": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.vlcOptions.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "vlc.options", data); - input.setAttribute("placeholder", "{{.settings.vlcOptions.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "listeningIp": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.listeningIp.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "listeningIp", data); - input.setAttribute("placeholder", "{{.settings.listeningIp.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - // Checkboxen - case "authentication.web": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.authenticationWEB.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "authentication.pms": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.authenticationPMS.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "authentication.m3u": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.authenticationM3U.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "authentication.xml": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.authenticationXML.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "authentication.api": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.authenticationAPI.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "files.update": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.filesUpdate.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "cache.images": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.cacheImages.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "xepg.replace.missing.images": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.replaceEmptyImages.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "xepg.replace.channel.title": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.replaceChannelTitle.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "storeBufferInRAM": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.storeBufferInRAM.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "forceHttps": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.forceHttps.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "httpsPort": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.httpsPort.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "httpsPort", data.toString()); - input.setAttribute("placeholder", "{{.settings.httpsPort.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "httpsThreadfinDomain": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.httpsThreadfinDomain.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "httpsThreadfinDomain", data.toString()); - input.setAttribute("placeholder", "{{.settings.httpsThreadfinDomain.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "httpThreadfinDomain": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.httpThreadfinDomain.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "httpThreadfinDomain", data.toString()); - input.setAttribute("placeholder", "{{.settings.httpThreadfinDomain.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "enableNonAscii": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.enableNonAscii.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "epgCategories": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.epgCategories.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "epgCategories", data.toString()); - input.setAttribute("placeholder", "{{.settings.epgCategories.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "epgCategoriesColors": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.epgCategoriesColors.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "epgCategoriesColors", data.toString()); - input.setAttribute("placeholder", "{{.settings.epgCategoriesColors.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "ThreadfinAutoUpdate": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.ThreadfinAutoUpdate.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "ssdp": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.ssdp.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "dummy": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.dummy.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "dummyChannel": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.dummyChannel.title}}" + ":"; - var tdRight = document.createElement("TD"); - var text = ["PPV", "30 Minutes", "60 Minutes", "90 Minutes", "120 Minutes", "180 Minutes", "240 Minutes", "360 Minutes"]; - var values = ["PPV", "30_Minutes", "60_Minutes", "90_Minutes", "120_Minutes", "180_Minutes", "240_Minutes", "360_Minutes"]; - var select = content.createSelect(text, values, data, settingsKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(select); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "ignoreFilters": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.ignoreFilters.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "api": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.api.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createCheckbox(settingsKey); - input.checked = data; - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - // Select - case "tuner": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.tuner.title}}" + ":"; - var tdRight = document.createElement("TD"); - var text = new Array(); - var values = new Array(); - for (var i = 1; i <= 100; i++) { - text.push(i); - values.push(i); - } - var select = content.createSelect(text, values, data, settingsKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(select); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "epgSource": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.epgSource.title}}" + ":"; - var tdRight = document.createElement("TD"); - var text = ["PMS", "XEPG"]; - var values = ["PMS", "XEPG"]; - var select = content.createSelect(text, values, data, settingsKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(select); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "backup.keep": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.backupKeep.title}}" + ":"; - var tdRight = document.createElement("TD"); - var text = ["5", "10", "20", "30", "40", "50"]; - var values = ["5", "10", "20", "30", "40", "50"]; - var select = content.createSelect(text, values, data, settingsKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(select); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "buffer.size.kb": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.bufferSize.title}}" + ":"; - var tdRight = document.createElement("TD"); - var text = ["0.5 MB", "1 MB", "2 MB", "3 MB", "4 MB", "5 MB", "6 MB", "7 MB", "8 MB"]; - var values = ["512", "1024", "2048", "3072", "4096", "5120", "6144", "7168", "8192"]; - var select = content.createSelect(text, values, data, settingsKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(select); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "buffer": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.streamBuffering.title}}" + ":"; - var tdRight = document.createElement("TD"); - var text = ["{{.settings.streamBuffering.info_false}}", "FFmpeg: ({{.settings.streamBuffering.info_ffmpeg}})", "VLC: ({{.settings.streamBuffering.info_vlc}})"]; - var values = ["-", "ffmpeg", "vlc"]; - var select = content.createSelect(text, values, data, settingsKey); - select.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(select); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - case "udpxy": - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = "{{.settings.udpxy.title}}" + ":"; - var tdRight = document.createElement("TD"); - var input = content.createInput("text", "udpxy", data); - input.setAttribute("placeholder", "{{.settings.udpxy.placeholder}}"); - input.setAttribute("onchange", "javascript: this.className = 'changed'"); - tdRight.appendChild(input); - setting.appendChild(tdLeft); - setting.appendChild(tdRight); - break; - } - return setting; - } - createDescription(settingsKey) { - var description = document.createElement("TR"); - var text; - switch (settingsKey) { - case "authentication.web": - text = "{{.settings.authenticationWEB.description}}"; - break; - case "authentication.m3u": - text = "{{.settings.authenticationM3U.description}}"; - break; - case "authentication.pms": - text = "{{.settings.authenticationPMS.description}}"; - break; - case "authentication.xml": - text = "{{.settings.authenticationXML.description}}"; - break; - case "authentication.api": - if (SERVER["settings"]["authentication.web"] == true) { - text = "{{.settings.authenticationAPI.description}}"; - } - break; - case "ThreadfinAutoUpdate": - text = "{{.settings.ThreadfinAutoUpdate.description}}"; - break; - case "listeningIp": - text = "{{.settings.listeningIp.description}}"; - break; - case "backup.keep": - text = "{{.settings.backupKeep.description}}"; - break; - case "backup.path": - text = "{{.settings.backupPath.description}}"; - break; - case "temp.path": - text = "{{.settings.tempPath.description}}"; - break; - case "buffer": - text = "{{.settings.streamBuffering.description}}"; - break; - case "buffer.size.kb": - text = "{{.settings.bufferSize.description}}"; - break; - case "storeBufferInRAM": - text = "{{.settings.storeBufferInRAM.description}}"; - break; - case "forceHttps": - text = "{{.settings.forceHttps.description}}"; - break; - case "httpsPort": - text = "{{.settings.httpsPort.description}}"; - break; - case "httpsThreadfinDomain": - text = "{{.settings.httpsThreadfinDomain.description}}"; - break; - case "httpThreadfinDomain": - text = "{{.settings.httpThreadfinDomain.description}}"; - break; - case "enableNonAscii": - text = "{{.settings.enableNonAscii.description}}"; - break; - case "epgCategories": - text = "{{.settings.epgCategories.description}}"; - break; - case "epgCategoriesColors": - text = "{{.settings.epgCategoriesColors.description}}"; - break; - case "buffer.timeout": - text = "{{.settings.bufferTimeout.description}}"; - break; - case "user.agent": - text = "{{.settings.userAgent.description}}"; - break; - case "ffmpeg.path": - text = "{{.settings.ffmpegPath.description}}"; - break; - case "ffmpeg.options": - text = "{{.settings.ffmpegOptions.description}}"; - break; - case "vlc.path": - text = "{{.settings.vlcPath.description}}"; - break; - case "vlc.options": - text = "{{.settings.vlcOptions.description}}"; - break; - case "epgSource": - text = "{{.settings.epgSource.description}}"; - break; - case "tuner": - text = "{{.settings.tuner.description}}"; - break; - case "update": - text = "{{.settings.update.description}}"; - break; - case "api": - text = "{{.settings.api.description}}"; - break; - case "ssdp": - text = "{{.settings.ssdp.description}}"; - break; - case "files.update": - text = "{{.settings.filesUpdate.description}}"; - break; - case "cache.images": - text = "{{.settings.cacheImages.description}}"; - break; - case "xepg.replace.missing.images": - text = "{{.settings.replaceEmptyImages.description}}"; - break; - case "xepg.replace.channel.title": - text = "{{.settings.replaceChannelTitle.description}}"; - break; - case "udpxy": - text = "{{.settings.udpxy.description}}"; - break; - default: - text = ""; - break; - } - var tdLeft = document.createElement("TD"); - tdLeft.innerHTML = ""; - var tdRight = document.createElement("TD"); - var pre = document.createElement("PRE"); - pre.innerHTML = text; - tdRight.appendChild(pre); - description.appendChild(tdLeft); - description.appendChild(tdRight); - return description; - } -} -class SettingsCategoryItem extends SettingsCategory { - constructor(headline, settingsKeys) { - super(); - this.headline = headline; - this.settingsKeys = settingsKeys; - } - createCategory() { - var headline = this.createCategoryHeadline(this.headline); - var settingsKeys = this.settingsKeys; - var doc = document.getElementById(this.DocumentID); - doc.appendChild(headline); - // Tabelle für die Kategorie erstellen - var table = document.createElement("TABLE"); - var keys = settingsKeys.split(","); - keys.forEach(settingsKey => { - switch (settingsKey) { - case "authentication.pms": - case "authentication.m3u": - case "authentication.xml": - case "authentication.api": - if (SERVER["settings"]["authentication.web"] == false) { - break; - } - default: - var item = this.createSettings(settingsKey); - var description = this.createDescription(settingsKey); - table.appendChild(item); - table.appendChild(description); - break; - } - }); - doc.appendChild(table); - doc.appendChild(this.createHR()); - } -} -function showSettings() { - console.log("SETTINGS"); - for (let i = 0; i < settingsCategory.length; i++) { - settingsCategory[i].createCategory(); - } -} -function saveSettings() { - console.log("Save Settings"); - var cmd = "saveSettings"; - var div = document.getElementById("content_settings"); - var settings = div.getElementsByClassName("changed"); - var newSettings = new Object(); - for (let i = 0; i < settings.length; i++) { - var name; - var value; - switch (settings[i].tagName) { - case "INPUT": - switch (settings[i].type) { - case "checkbox": - name = settings[i].name; - value = settings[i].checked; - newSettings[name] = value; - break; - case "text": - name = settings[i].name; - value = settings[i].value; - switch (name) { - case "update": - value = value.split(","); - value = value.filter(function (e) { return e; }); - break; - case "buffer.timeout": - value = parseFloat(value); - } - newSettings[name] = value; - break; - } - break; - case "SELECT": - name = settings[i].name; - value = settings[i].value; - // Wenn der Wert eine Zahl ist, wird dieser als Zahl gespeichert - if (isNaN(value)) { - newSettings[name] = value; - } - else { - newSettings[name] = parseInt(value); - } - break; - } - } - var data = new Object(); - data["settings"] = newSettings; - var server = new Server(cmd); - server.request(data); -} -//# sourceMappingURL=settings_ts.js.map \ No newline at end of file diff --git a/html/lang/en.json b/html/lang/en.json index 2237455..76c1138 100644 --- a/html/lang/en.json +++ b/html/lang/en.json @@ -381,7 +381,7 @@ }, "cacheImages": { "title": "Image Caching", - "description": "All images from the XMLTV file are cached, allowing faster rendering of the grid in the client.
Downloading the images may take a while and will be done in the background." + "description": "This option will rewrite the m3u file to local image cache for tv logos.
All images from the XMLTV file are cached, allowing faster rendering of the grid in the client.
Downloading the images may take a while and will be done in the background.
" }, "replaceEmptyImages": { "title": "Replace missing program images", @@ -436,6 +436,11 @@ "title": "Store buffer in RAM", "description": "If checked, write buffer to RAM instead of writing to disk" }, + "omitPorts": + { + "title": "Omit port", + "description": "By activating this checkbox the m3u file will not contain the port in the url" + }, "listeningIp" : { "title": "Listening IPs", @@ -443,23 +448,23 @@ }, "forceHttps": { - "title": "Force HTTPS", - "description": "With image caching enabled, if checked, will rewrite M3U and EPG urls to include https protocol as well as https port (default is 443)" + "title": "Force HTTPS to Upstream server", + "description": "When this checkbox is activated Threadfin will be forced to use HTTPS connection to upstream server
This is not recommended as the given urls will be rewritten to https urls, this can lead to 404 HTTP Error Codes
" }, - "httpsPort": + "useHttps": { - "title": "HTTPS Port", - "description": "With image caching enabled, port to use for forcing https. Default is 443" + "title": "Use HTTPS", + "description": "Enable HTTPS protocol for Threadfin, HTTPS Port needs to be set, otherwise the 443 will be used!" }, - "httpsThreadfinDomain": + "forceClientHttps": { - "title": "HTTPS Threadfin Domain", - "description": "With image caching enabled, rewrite the threadfin ip address in the m3u to use a domain for HTTPS mode. Do NOT include https (ex: somedomain.com)" + "title": "Force client to use https", + "description": "All URLs to this threadfin instance will be starting with https" }, - "httpThreadfinDomain": + "threadfinDomain": { "title": "Threadfin Domain", - "description": "With image caching enabled, rewrite the threadfin ip address in the m3u to use a domain for HTTP mode. Do NOT include http (ex: somedomain.com)" + "description": "When not empty, this will rewrite the URLs in the new m3u to a FQDN.
Do NOT include http (ex: somedomain.com)
" }, "enableNonAscii": { diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3a72baa --- /dev/null +++ b/package-lock.json @@ -0,0 +1,38 @@ +{ + "name": "Threadfin", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "tsc": "^2.0.4" + }, + "devDependencies": { + "typescript": "^5.5.2" + } + }, + "node_modules/tsc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/tsc/-/tsc-2.0.4.tgz", + "integrity": "sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==", + "license": "MIT", + "bin": { + "tsc": "bin/tsc" + } + }, + "node_modules/typescript": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..33846b5 --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "tsc": "^2.0.4" + }, + "devDependencies": { + "typescript": "^5.5.2" + } +} diff --git a/src/config.go b/src/config.go index c526dff..83f1302 100644 --- a/src/config.go +++ b/src/config.go @@ -48,11 +48,6 @@ func Init() (err error) { System.AppName = strings.ToLower(System.Name) System.ARCH = runtime.GOARCH System.OS = runtime.GOOS - System.ServerProtocol.API = "http" - System.ServerProtocol.DVR = "http" - System.ServerProtocol.M3U = "http" - System.ServerProtocol.WEB = "http" - System.ServerProtocol.XML = "http" System.PlexChannelLimit = 480 System.UnfilteredChannelLimit = 480 System.Compatibility = "0.1.0" @@ -200,14 +195,7 @@ func Init() (err error) { showInfo(fmt.Sprintf("GitHub:https://github.com/%s", System.GitHub.User)) showInfo(fmt.Sprintf("Git Branch:%s [%s]", System.Branch, System.GitHub.User)) - // Domainnamen setzten - if Settings.HttpThreadfinDomain != "" { - setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port)) - } else { - setGlobalDomain(fmt.Sprintf("%s:%s", System.IPAddress, Settings.Port)) - } - - System.URLBase = fmt.Sprintf("%s://%s:%s", System.ServerProtocol.WEB, System.IPAddress, Settings.Port) + System.URLBase = fmt.Sprintf("%s://%s:%s", System.ServerProtocol, System.IPAddress, Settings.Port) // HTML Dateien erstellen, mit dev == true werden die lokalen HTML Dateien verwendet if System.Dev { diff --git a/src/data.go b/src/data.go index a2d22cc..967ed84 100644 --- a/src/data.go +++ b/src/data.go @@ -12,7 +12,6 @@ import ( "time" "threadfin/src/internal/authentication" - "threadfin/src/internal/imgcache" ) // Einstellungen ändern (WebUI) @@ -23,6 +22,8 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e var reloadData = false var cacheImages = false var createXEPGFiles = false + var omitPortsChanged = false + var serverProtocolChanged = false var debug string // -vvv [URL] --sout '#transcode{vcodec=mp4v, acodec=mpga} :standard{access=http, mux=ogg}' @@ -113,9 +114,14 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e } - case "scheme.m3u", "scheme.xml": + case "scheme.m3u", "scheme.xml", "omitPorts", "forceClientHttps", "forceHttps", "threadfinDomain": createXEPGFiles = true - + if key == "omitPorts" { + omitPortsChanged = true + } + if key == "forceClientHttps" { + serverProtocolChanged = true + } } oldSettings[key] = value @@ -146,7 +152,7 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e // Einstellungen aktualisieren err = json.Unmarshal([]byte(mapToJSON(oldSettings)), &Settings) - if err != nil { + if err != nil { return } @@ -187,6 +193,23 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e } + if serverProtocolChanged || omitPortsChanged { + System.Domain = strings.Split(System.Domain, ":")[0] + if Settings.ForceClientHttps { + System.ServerProtocol = "https" + } else { + System.ServerProtocol = "http" + } + if Settings.ThreadfinDomain != "" { + System.Domain = Settings.ThreadfinDomain + } + if !Settings.OmitPorts { + System.Domain += ":" + System.Flag.Port + } + System.BaseURL = System.ServerProtocol + "://" + System.Domain + Data.Cache.Images.UpdateBaseURL(System.BaseURL) + } + err = saveSettings(Settings) if err == nil { @@ -207,27 +230,23 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e if Settings.EpgSource == "XEPG" && System.ImageCachingInProgress == 0 { - Data.Cache.Images, err = imgcache.New(System.Folder.ImagesCache, fmt.Sprintf("%s://%s/images/", System.ServerProtocol.WEB, System.Domain), Settings.CacheImages) - if err != nil { - ShowError(err, 0) - } - switch Settings.CacheImages { case false: - createXMLTVFile() - createM3UFile() + createXEPGFiles = true case true: go func() { + Data.Cache.Images.DeleteCache() createXMLTVFile() createM3UFile() System.ImageCachingInProgress = 1 showInfo("Image Caching:Images are cached") - Data.Cache.Images.Image.Caching() + //Data.Cache.Images.Image.Caching() + Data.Cache.Images.WaitForDownloads() showInfo("Image Caching:Done") System.ImageCachingInProgress = 0 @@ -245,6 +264,7 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e if createXEPGFiles { go func() { + Data.Cache.Images.DeleteCache() createXMLTVFile() createM3UFile() }() @@ -509,13 +529,6 @@ func saveXEpgMapping(request RequestStruct) (err error) { var tmp = Data.XEPG - Data.Cache.StreamingURLS = make(map[string]StreamInfo) - - Data.Cache.Images, err = imgcache.New(System.Folder.ImagesCache, fmt.Sprintf("%s://%s/images/", System.ServerProtocol.WEB, System.Domain), Settings.CacheImages) - if err != nil { - ShowError(err, 0) - } - err = json.Unmarshal([]byte(mapToJSON(request.EpgMapping)), &tmp) if err != nil { return diff --git a/src/hdhr.go b/src/hdhr.go index 9b5c6cc..2898ca1 100644 --- a/src/hdhr.go +++ b/src/hdhr.go @@ -42,7 +42,7 @@ func getCapability() (xmlContent []byte, err error) { var buffer bytes.Buffer capability.Xmlns = "urn:schemas-upnp-org:device-1-0" - capability.URLBase = System.ServerProtocol.WEB + "://" + System.Domain + capability.URLBase = System.ServerProtocol + "://" + System.Domain capability.SpecVersion.Major = 1 capability.SpecVersion.Minor = 0 @@ -71,14 +71,14 @@ func getDiscover() (jsonContent []byte, err error) { var discover Discover - discover.BaseURL = System.ServerProtocol.WEB + "://" + System.Domain + discover.BaseURL = System.BaseURL discover.DeviceAuth = System.AppName discover.DeviceID = System.DeviceID discover.FirmwareName = "bin_" + System.Version discover.FirmwareVersion = System.Version discover.FriendlyName = System.Name - discover.LineupURL = fmt.Sprintf("%s://%s/lineup.json", System.ServerProtocol.DVR, System.Domain) + discover.LineupURL = fmt.Sprintf("%s://%s/lineup.json", System.ServerProtocol, System.Domain) discover.Manufacturer = "Golang" discover.ModelNumber = System.Version discover.TunerCount = Settings.Tuner @@ -136,7 +136,7 @@ func getLineup() (jsonContent []byte, err error) { } - stream.URL, err = createStreamingURL("DVR", m3uChannel.FileM3UID, stream.GuideNumber, m3uChannel.Name, m3uChannel.URL, "", "", "") + stream.URL, err = createStreamingURL(m3uChannel.FileM3UID, stream.GuideNumber, m3uChannel.Name, m3uChannel.URL, "", "", "") if err == nil { lineup = append(lineup, stream) } else { @@ -159,7 +159,7 @@ func getLineup() (jsonContent []byte, err error) { stream.GuideName = xepgChannel.XName stream.GuideNumber = xepgChannel.XChannelID //stream.URL = fmt.Sprintf("%s://%s/stream/%s-%s", System.ServerProtocol.DVR, System.Domain, xepgChannel.FileM3UID, base64.StdEncoding.EncodeToString([]byte(xepgChannel.URL))) - stream.URL, err = createStreamingURL("DVR", xepgChannel.FileM3UID, xepgChannel.XChannelID, xepgChannel.XName, xepgChannel.URL, xepgChannel.BackupChannel1URL, xepgChannel.BackupChannel2URL, xepgChannel.BackupChannel3URL) + stream.URL, err = createStreamingURL(xepgChannel.FileM3UID, xepgChannel.XChannelID, xepgChannel.XName, xepgChannel.URL, xepgChannel.BackupChannel1URL, xepgChannel.BackupChannel2URL, xepgChannel.BackupChannel3URL) if err == nil { lineup = append(lineup, stream) } else { diff --git a/src/images.go b/src/images.go index 04dd256..2a539d0 100644 --- a/src/images.go +++ b/src/images.go @@ -23,7 +23,7 @@ func uploadLogo(input, filename string) (logoURL string, err error) { return } - logoURL = fmt.Sprintf("%s://%s/data_images/%s", System.ServerProtocol.XML, System.Domain, filename) + logoURL = fmt.Sprintf("%s://%s/data_images/%s", System.ServerProtocol, System.Domain, filename) return diff --git a/src/info.go b/src/info.go index 4014474..3f2c322 100644 --- a/src/info.go +++ b/src/info.go @@ -20,14 +20,14 @@ func ShowSystemInfo() { fmt.Println("OK") println() - fmt.Printf("Version: %s %s.%s\n", System.Name, System.Version, System.Build) - fmt.Printf("Branch: %s\n", System.Branch) - fmt.Printf("GitHub: %s/%s | Git update = %t\n", System.GitHub.User, System.GitHub.Repo, System.GitHub.Update) - fmt.Printf("Folder (config): %s\n", System.Folder.Config) + fmt.Printf("Version: %s %s.%s\n", System.Name, System.Version, System.Build) + fmt.Printf("Branch: %s\n", System.Branch) + fmt.Printf("GitHub: %s/%s | Git update = %t\n", System.GitHub.User, System.GitHub.Repo, System.GitHub.Update) + fmt.Printf("Folder (config): %s\n", System.Folder.Config) - fmt.Printf("Streams: %d / %d\n", len(Data.Streams.Active), len(Data.Streams.All)) - fmt.Printf("Filter: %d\n", len(Data.Filter)) - fmt.Printf("XEPG Chanels: %d\n", int(Data.XEPG.XEPGCount)) + fmt.Printf("Streams: %d / %d\n", len(Data.Streams.Active), len(Data.Streams.All)) + fmt.Printf("Filter: %d\n", len(Data.Filter)) + fmt.Printf("XEPG Chanels: %d\n", int(Data.XEPG.XEPGCount)) println() fmt.Printf("IPv4 Addresses:\n") @@ -37,9 +37,9 @@ func ShowSystemInfo() { switch count := i; { case count < 10: - fmt.Printf(" %d. %s\n", count, ipv4) + fmt.Printf(" %d. %s\n", count, ipv4) case count < 100: - fmt.Printf(" %d. %s\n", count, ipv4) + fmt.Printf(" %d. %s\n", count, ipv4) } } @@ -52,9 +52,9 @@ func ShowSystemInfo() { switch count := i; { case count < 10: - fmt.Printf(" %d. %s\n", count, ipv4) + fmt.Printf(" %d. %s\n", count, ipv4) case count < 100: - fmt.Printf(" %d. %s\n", count, ipv4) + fmt.Printf(" %d. %s\n", count, ipv4) } @@ -63,33 +63,44 @@ func ShowSystemInfo() { println("---") fmt.Println("Settings [General]") - fmt.Printf("Threadfin Update: %t\n", Settings.ThreadfinAutoUpdate) - fmt.Printf("UUID: %s\n", Settings.UUID) - fmt.Printf("Tuner (Plex / Emby): %d\n", Settings.Tuner) - fmt.Printf("EPG Source: %s\n", Settings.EpgSource) + fmt.Printf("Threadfin Update: %t\n", Settings.ThreadfinAutoUpdate) + fmt.Printf("UUID: %s\n", Settings.UUID) + fmt.Printf("Tuner (Plex / Emby): %d\n", Settings.Tuner) + fmt.Printf("EPG Source: %s\n", Settings.EpgSource) + fmt.Printf("Enable Defaul Dummy Data: %t\n", Settings.Dummy) println("---") fmt.Println("Settings [Files]") - fmt.Printf("Schedule: %s\n", strings.Join(Settings.Update, ",")) - fmt.Printf("Files Update: %t\n", Settings.FilesUpdate) - fmt.Printf("Folder (tmp): %s\n", Settings.TempPath) - fmt.Printf("Image Chaching: %t\n", Settings.CacheImages) - fmt.Printf("Replace EPG Image: %t\n", Settings.XepgReplaceMissingImages) + fmt.Printf("Schedule: %s\n", strings.Join(Settings.Update, ",")) + fmt.Printf("Files Update: %t\n", Settings.FilesUpdate) + fmt.Printf("Folder (tmp): %s\n", Settings.TempPath) + fmt.Printf("Image Chaching: %t\n", Settings.CacheImages) + fmt.Printf("Omit port: %t\n", Settings.OmitPorts) + fmt.Printf("Replace EPG Image: %t\n", Settings.XepgReplaceMissingImages) + fmt.Printf("Replace PPV channels: %t\n", Settings.XepgReplaceChannelTitle) + fmt.Printf("Enable Non-ASCII: %t\n", Settings.EnableNonAscii) + + println("---") + + fmt.Println("Network") + fmt.Printf("Listening IPs: %s\n", Settings.ListeningIp) + fmt.Printf("Threadfin Domain: %s\n", Settings.ThreadfinDomain) + fmt.Printf("Use Https: %t\n", Settings.UseHttps) + fmt.Printf("Fort Https to upstream: %t\n", Settings.ForceHttpsToUpstream) println("---") fmt.Println("Settings [Streaming]") - fmt.Printf("Buffer: %s\n", Settings.Buffer) - fmt.Printf("UDPxy: %s\n", Settings.UDPxy) - fmt.Printf("Buffer Size: %d KB\n", Settings.BufferSize) - fmt.Printf("Timeout: %d ms\n", int(Settings.BufferTimeout)) - fmt.Printf("User Agent: %s\n", Settings.UserAgent) + fmt.Printf("Buffer: %s\n", Settings.Buffer) + fmt.Printf("UDPxy: %s\n", Settings.UDPxy) + fmt.Printf("Buffer Size: %d KB\n", Settings.BufferSize) + fmt.Printf("Timeout: %d ms\n", int(Settings.BufferTimeout)) + fmt.Printf("User Agent: %s\n", Settings.UserAgent) println("---") fmt.Println("Settings [Backup]") - fmt.Printf("Folder (backup): %s\n", Settings.BackupPath) - fmt.Printf("Backup Keep: %d\n", Settings.BackupKeep) - + fmt.Printf("Folder (backup): %s\n", Settings.BackupPath) + fmt.Printf("Backup Keep: %d\n", Settings.BackupKeep) } diff --git a/src/internal/imgcache/cache.go b/src/internal/imgcache/cache.go deleted file mode 100644 index 435d5a5..0000000 --- a/src/internal/imgcache/cache.go +++ /dev/null @@ -1,180 +0,0 @@ -package imgcache - -import ( - "fmt" - "io" - "net/http" - "net/url" - "os" - "path/filepath" - "strings" - "sync" -) - -// Cache : Cache strcut -type Cache struct { - path string - cacheURL string - caching bool - images map[string]string - Queue []string - Cache []string - Image imageFunc - sync.RWMutex -} - -type imageFunc struct { - GetURL func(string, string, string, bool, int, string) string - Caching func() - Remove func() -} - -// New : New cahce -func New(path, cacheURL string, caching bool) (c *Cache, err error) { - - c = &Cache{} - - c.images = make(map[string]string) - c.path = path - c.cacheURL = cacheURL - c.caching = caching - c.Queue = []string{} - c.Cache = []string{} - - var queue []string - - c.Image.GetURL = func(src string, http_domain string, http_port string, force_https bool, https_port int, https_domain string) (cacheURL string) { - - c.Lock() - defer c.Unlock() - - src = strings.Trim(src, "\r\n") - - if !c.caching { - return src - } - - u, err := url.Parse(src) - - if err != nil || len(filepath.Ext(u.Path)) == 0 { - return src - } - - src_filtered := strings.Split(src, "?") - var filename = fmt.Sprintf("%s%s", strToMD5(src_filtered[0]), filepath.Ext(u.Path)) - - if cacheURL, ok := c.images[filename]; ok { - if c.caching && force_https { - u, err := url.Parse(cacheURL) - if err == nil { - cacheURL = fmt.Sprintf("https://%s:%d%s", https_domain, https_port, u.Path) - } - } else if c.caching && http_domain != "" { - u, err := url.Parse(cacheURL) - if err == nil { - cacheURL = fmt.Sprintf("http://%s:%s%s", http_domain, http_port, u.Path) - } - } - return cacheURL - } - - if indexOfString(filename, c.Cache) == -1 { - if indexOfString(src, c.Queue) == -1 { - c.Queue = append(c.Queue, src) - } - - } else { - c.images[filename] = c.cacheURL + filename - src = c.cacheURL + filename - } - - return src - } - - c.Image.Caching = func() { - - c.Lock() - defer c.Unlock() - - var filename string - - for _, src := range c.Queue { - - resp, err := http.Get(src) - if err != nil { - continue - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - continue - } - - src_filtered := strings.Split(src, "?") - filename = fmt.Sprintf("%s%s%s", c.path, strToMD5(src_filtered[0]), filepath.Ext(src_filtered[0])) - - file, err := os.Create(filename) - if err != nil { - continue - } - - defer file.Close() - - _, err = io.Copy(file, resp.Body) - if err != nil { - continue - } - - u, err := url.Parse(src_filtered[0]) - if err == nil { - c.images[fmt.Sprintf("%s%s", strToMD5(src_filtered[0]), filepath.Ext(u.Path))] = c.cacheURL + filename - } - - queue = append(queue, src_filtered[0]) - - } - - for _, q := range queue { - c.Queue = removeStringFromSlice(q, c.Queue) - } - - } - - c.Image.Remove = func() { - - c.Lock() - defer c.Unlock() - - files, err := os.ReadDir(c.path) - if err != nil { - return - } - - for _, file := range files { - - switch c.caching { - - case true: - if _, ok := c.images[file.Name()]; !ok { - os.RemoveAll(c.path + file.Name()) - } - - case false: - os.RemoveAll(c.path + file.Name()) - } - - } - - } - - files, err := os.ReadDir(c.path) - if err != nil { - return - } - - for _, file := range files { - c.Cache = append(c.Cache, file.Name()) - } - - return -} diff --git a/src/internal/imgcache/imagecache.go b/src/internal/imgcache/imagecache.go new file mode 100644 index 0000000..cddde1e --- /dev/null +++ b/src/internal/imgcache/imagecache.go @@ -0,0 +1,156 @@ +package imgcache + +import ( + "errors" + "io" + "net/http" + "os" + "strings" + "sync" +) + +type ImageCache struct { + cache map[string]string + caching bool + basePath string + baseURL string + httpPool *sync.Pool + mutex sync.Mutex + wg sync.WaitGroup +} + +// Create a new image cache +func NewImageCache(caching bool, basePath string, baseURL string) (*ImageCache) { + return &ImageCache{ + caching: caching, + basePath: basePath, + baseURL: baseURL, + cache: make(map[string]string), + httpPool: &sync.Pool{ + New: func() interface {} { + return &http.Client{} + }, + }, + } +} + +func (ic *ImageCache) UpdateBaseURL(url string) { + ic.baseURL = url +} + +// Enqueue the URL for downloading +func (ic *ImageCache) EnqueueURL(url string, filename string) { + ic.wg.Add(1) + go func(url string) { + defer ic.wg.Done() + ic.DownloadImage(url, filename) + }(url) +} + +// Get the Url to the Image cached or original +func (ic *ImageCache) GetImageURL(url string) (string) { + // Generate the key from the URL + key := createKeyFromUrl(url) + // If image is already cached return the url + ic.mutex.Lock() + if cached_url, ok := ic.cache[key]; ok { + ic.mutex.Unlock() + return cached_url + } + ic.mutex.Unlock() + + if ic.caching { + filename := createFileNameFromURL(url, key) + path_to_file := ic.basePath + filename + url_to_file := ic.baseURL + "/cache/" + filename + + // Enqueue the Image for the download + ic.EnqueueURL(url, path_to_file) + + // Save file name in cache + ic.mutex.Lock() + ic.cache[key] = url_to_file + ic.mutex.Unlock() + return url_to_file + } else { + // Save original url in cache + return url + } +} + +// Download the Image +func (ic *ImageCache) DownloadImage(url string, filename string) (error) { + + // Check if file already exists + if _, err := os.Stat(filename); errors.Is(err, os.ErrNotExist) { + // Get a HTTP-Connection from the pool + client := ic.httpPool.Get().(*http.Client) + defer ic.httpPool.Put(client) + + // Download the image + resp, err := client.Get(url) + if err != nil { + ic.ErrorHandlingWhenDownloading(url) + return errors.New("error when downloading the image") + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + if resp.StatusCode == 404 { + url = "https://" + strings.Split(url, "//")[1] + resp, err = client.Get(url) + if err != nil { + ic.ErrorHandlingWhenDownloading(url) + return errors.New("error when downloading the image") + } + if resp.StatusCode != http.StatusOK { + ic.ErrorHandlingWhenDownloading(url) + return errors.New("received bad status code") + } + } else { + ic.ErrorHandlingWhenDownloading(url) + return errors.New("received bad status code") + } + } + + // Save the image to disk + file, err := os.Create(filename) + if err != nil { + ic.ErrorHandlingWhenDownloading(url) + return errors.New("unable to create the file") + } + defer file.Close() + + _, err = io.Copy(file, resp.Body) + if err != nil { + ic.ErrorHandlingWhenDownloading(url) + return errors.New("can't save the image to the file") + } + return nil + } + return nil +} + +func (ic *ImageCache) ErrorHandlingWhenDownloading(url string) { + ic.mutex.Lock() + defer ic.mutex.Unlock() + ic.cache[url]=url +} + +// Block until downloads have been completed +func (ic *ImageCache) WaitForDownloads() { + ic.wg.Wait() +} + +func (ic *ImageCache) GetNumCachedImages() int { + ic.mutex.Lock() + defer ic.mutex.Unlock() + return len(ic.cache) +} + +// Clear the cache but not the files +func (ic *ImageCache) DeleteCache() { + if ic.caching { + ic.cache = make(map[string]string) // Clear the cache + } +} diff --git a/src/internal/imgcache/tools.go b/src/internal/imgcache/tools.go index 9d4b622..11ab237 100644 --- a/src/internal/imgcache/tools.go +++ b/src/internal/imgcache/tools.go @@ -1,34 +1,30 @@ package imgcache import ( - "crypto/md5" - "encoding/hex" + "bytes" + "crypto/md5" + "encoding/hex" + "io" + "path/filepath" + "strings" ) -func strToMD5(str string) string { - md5Hasher := md5.New() - md5Hasher.Write([]byte(str)) - return hex.EncodeToString(md5Hasher.Sum(nil)) +// createIndexFromUrl will calculate the URLs md5 and will pick then only the digits within the string too create a key +func createKeyFromUrl(url string) (string) { + // Berechne den MD5-Hash der URL + hasher := md5.New() + io.WriteString(hasher, url) + return hex.EncodeToString(hasher.Sum(nil)) } -func indexOfString(str string, slice []string) int { +// Faster creation of file names +func createFileNameFromURL(url string, key string) (string) { + url_stripped := strings.Split(url, "?")[0] + ext := filepath.Ext(url_stripped) - for i, v := range slice { - if str == v { - return i - } - } + var buf bytes.Buffer + buf.WriteString(key) + buf.WriteString(ext) - return -1 -} - -func removeStringFromSlice(str string, slice []string) []string { - - var i = indexOfString(str, slice) - - if i != -1 { - slice = append(slice[:i], slice[i+1:]...) - } - - return slice + return buf.String() } diff --git a/src/internal/up2date/client/client.go b/src/internal/up2date/client/client.go index 344640d..2e2d706 100755 --- a/src/internal/up2date/client/client.go +++ b/src/internal/up2date/client/client.go @@ -33,6 +33,13 @@ type ServerResponse struct { UpdateBIN string `json:"update.url.bin,omitempty"` UpdateZIP string `json:"update.url.zip,omitempty"` Filename string `json:"filename.bin,omitempty"` + UpdatedAt string + Assets []AssetsStruct +} + +type AssetsStruct struct { + DownloadUrl string + UpdatetAt string } // Updater : Client infos diff --git a/src/internal/up2date/client/update.go b/src/internal/up2date/client/update.go index 2fa335e..256b398 100755 --- a/src/internal/up2date/client/update.go +++ b/src/internal/up2date/client/update.go @@ -25,11 +25,6 @@ func DoUpdate(fileType, filenameBIN string) (err error) { url = Updater.Response.UpdateZIP } - switch runtime.GOOS { - case "windows": - filenameBIN = filenameBIN + ".exe" - } - if len(url) > 0 { log.Println("["+strings.ToUpper(fileType)+"]", "New version ("+Updater.Name+"):", Updater.Response.Version) @@ -43,7 +38,7 @@ func DoUpdate(fileType, filenameBIN string) (err error) { log.Println("["+strings.ToUpper(fileType)+"]", "Download new version...") if resp.StatusCode != http.StatusOK { - log.Println("["+strings.ToUpper(fileType)+"]", "Download new version...OK") + log.Println("["+strings.ToUpper(fileType)+"]", "Download new version...NOK") return fmt.Errorf("bad status: %s", resp.Status) } diff --git a/src/m3u.go b/src/m3u.go index 917ebd9..89a122b 100644 --- a/src/m3u.go +++ b/src/m3u.go @@ -3,7 +3,6 @@ package src import ( "encoding/json" "fmt" - "net/url" "path" "regexp" "sort" @@ -182,7 +181,6 @@ func checkConditions(streamValues, conditions, coType string) (status bool) { // Threadfin M3U Datei erstellen func buildM3U(groups []string) (m3u string, err error) { - var imgc = Data.Cache.Images var m3uChannels = make(map[float64]XEPGChannelStruct) var channelNumbers []float64 @@ -218,12 +216,8 @@ func buildM3U(groups []string) (m3u string, err error) { // M3U Inhalt erstellen sort.Float64s(channelNumbers) - - var xmltvURL = fmt.Sprintf("%s://%s/xmltv/threadfin.xml", System.ServerProtocol.XML, System.Domain) - if Settings.ForceHttps && Settings.HttpsThreadfinDomain != "" { - xmltvURL = fmt.Sprintf("https://%s/xmltv/threadfin.xml", Settings.HttpsThreadfinDomain) - } - m3u = fmt.Sprintf(`#EXTM3U url-tvg="%s" x-tvg-url="%s"`+"\n", xmltvURL, xmltvURL) + + m3u = fmt.Sprintf(`#EXTM3U url-tvg="%s" x-tvg-url="%s"`+"\n", System.BaseURL, System.BaseURL) for _, channelNumber := range channelNumbers { @@ -234,24 +228,13 @@ func buildM3U(groups []string) (m3u string, err error) { group = channel.XCategory } - if Settings.ForceHttps && Settings.HttpsThreadfinDomain != "" { - u, err := url.Parse(channel.URL) - if err == nil { - u.Scheme = "https" - host_split := strings.Split(u.Host, ":") - if len(host_split) > 0 { - u.Host = host_split[0] - } - channel.URL = fmt.Sprintf("https://%s:%d%s", u.Host, Settings.HttpsPort, u.Path) - } - } - logo := "" if channel.TvgLogo != "" { - logo = imgc.Image.GetURL(channel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain) + logo = Data.Cache.Images.GetImageURL(channel.TvgLogo) } var parameter = fmt.Sprintf(`#EXTINF:0 channelID="%s" tvg-chno="%s" tvg-name="%s" tvg-id="%s" tvg-logo="%s" group-title="%s",%s`+"\n", channel.XEPG, channel.XChannelID, channel.XName, channel.XChannelID, logo, group, channel.XName) - var stream, err = createStreamingURL("M3U", channel.FileM3UID, channel.XChannelID, channel.XName, channel.URL, channel.BackupChannel1URL, channel.BackupChannel2URL, channel.BackupChannel3URL) + var stream = "" + stream, err = createStreamingURL(channel.FileM3UID, channel.XChannelID, channel.XName, channel.URL, channel.BackupChannel1URL, channel.BackupChannel2URL, channel.BackupChannel3URL) if err == nil { m3u = m3u + parameter + stream + "\n" } diff --git a/src/screen.go b/src/screen.go index 4969208..7211447 100644 --- a/src/screen.go +++ b/src/screen.go @@ -281,6 +281,10 @@ func getErrMsg(errCode int) (errMsg string) { errMsg = "WebUI request error" case 1102: errMsg = "WebUI response error" + case 1110: + errMsg = "Could not read message from websocket" + case 1120: + errMsg = "Could not parse JSON from request" // PMS Guide Numbers case 1200: @@ -386,6 +390,8 @@ func getErrMsg(errCode int) (errMsg string) { errMsg = "Update server not available" case 6004: errMsg = "Threadfin update available" + case 6005: + errMsg = "Couldn't write last_beta_update to disk" // Webserver case 7001: diff --git a/src/struct-system.go b/src/struct-system.go index 23826aa..4bd3533 100644 --- a/src/struct-system.go +++ b/src/struct-system.go @@ -50,12 +50,13 @@ type SystemStruct struct { } Flag struct { - Branch string - Debug int - Info bool - Port string - Restore string - SSDP bool + Branch string + Debug int + Info bool + Port string + UseHttps bool + Restore string + SSDP bool } Folder struct { @@ -68,6 +69,8 @@ type SystemStruct struct { Temp string } + BaseURL string + ServerProtocol string Hostname string ImageCachingInProgress int IPAddress string @@ -81,14 +84,6 @@ type SystemStruct struct { Notification map[string]Notification - ServerProtocol struct { - API string - DVR string - M3U string - WEB string - XML string - } - GitHub struct { Branch string Repo string @@ -118,17 +113,20 @@ type GitStruct struct { } type GithubReleaseInfo struct { - TagName string `json:"tag_name"` - Prerelease bool `json:"prerelease"` + TagName string `json:"tag_name"` + Prerelease bool `json:"prerelease"` + Assets []AssetsStruct `json:"assets"` +} + +type AssetsStruct struct { + DownloadUrl string `json:"browser_download_url"` + UpdatetAt string `json:"updated_at"` } // DataStruct : Alle Daten werden hier abgelegt. (Lineup, XMLTV) type DataStruct struct { Cache struct { - Images *imgcache.Cache - ImagesCache []string - ImagesFiles []string - ImagesURLS []string + Images *imgcache.ImageCache PMS map[string]string StreamingURLS map[string]StreamInfo @@ -219,19 +217,19 @@ type XEPGChannelStruct struct { // M3UChannelStructXEPG : M3U Struktur für XEPG type M3UChannelStructXEPG struct { - FileM3UID string `json:"_file.m3u.id,required"` - FileM3UName string `json:"_file.m3u.name,required"` - FileM3UPath string `json:"_file.m3u.path,required"` - GroupTitle string `json:"group-title,required"` - Name string `json:"name,required"` - TvgID string `json:"tvg-id,required"` - TvgLogo string `json:"tvg-logo,required"` + FileM3UID string `json:"_file.m3u.id"` + FileM3UName string `json:"_file.m3u.name"` + FileM3UPath string `json:"_file.m3u.path"` + GroupTitle string `json:"group-title"` + Name string `json:"name"` + TvgID string `json:"tvg-id"` + TvgLogo string `json:"tvg-logo"` TvgChno string `json:"tvg-chno"` - TvgName string `json:"tvg-name,required"` - URL string `json:"url,required"` - UUIDKey string `json:"_uuid.key,required"` - UUIDValue string `json:"_uuid.value,required"` - Values string `json:"_values,required"` + TvgName string `json:"tvg-name"` + URL string `json:"url"` + UUIDKey string `json:"_uuid.key"` + UUIDValue string `json:"_uuid.value"` + Values string `json:"_values"` } // FilterStruct : Filter Struktur @@ -251,28 +249,28 @@ type FilterStruct struct { // StreamingURLS : Informationen zu allen streaming URL's type StreamingURLS struct { - Streams map[string]StreamInfo `json:"channels,required"` + Streams map[string]StreamInfo `json:"channels"` } // StreamInfo : Informationen zum Kanal für die streaming URL type StreamInfo struct { - ChannelNumber string `json:"channelNumber,required"` - Name string `json:"name,required"` - PlaylistID string `json:"playlistID,required"` - URL string `json:"url,required"` - BackupChannel1URL string `json:"backup_channel_1_url,required"` - BackupChannel2URL string `json:"backup_channel_2_url,required"` - BackupChannel3URL string `json:"backup_channel_3_url,required"` - URLid string `json:"urlID,required"` + ChannelNumber string `json:"channelNumber"` + Name string `json:"name"` + PlaylistID string `json:"playlistID"` + URL string `json:"url"` + BackupChannel1URL string `json:"backup_channel_1_url"` + BackupChannel2URL string `json:"backup_channel_2_url"` + BackupChannel3URL string `json:"backup_channel_3_url"` + URLid string `json:"urlID"` } // Notification : Notifikationen im Webinterface type Notification struct { - Headline string `json:"headline,required"` - Message string `json:"message,required"` - New bool `json:"new,required"` - Time string `json:"time,required"` - Type string `json:"type,required"` + Headline string `json:"headline"` + Message string `json:"message"` + New bool `json:"new"` + Time string `json:"time"` + Type string `json:"type"` } // SettingsStruct : Inhalt der settings.json @@ -325,11 +323,12 @@ type SettingsStruct struct { XepgReplaceChannelTitle bool `json:"xepg.replace.channel.title"` ThreadfinAutoUpdate bool `json:"ThreadfinAutoUpdate"` StoreBufferInRAM bool `json:"storeBufferInRAM"` + OmitPorts bool `json:"omitPorts"` ListeningIp string `json:"listeningIp"` - ForceHttps bool `json:"forceHttps"` - HttpsPort int `json:"httpsPort"` - HttpsThreadfinDomain string `json:"httpsThreadfinDomain"` - HttpThreadfinDomain string `json:"httpThreadfinDomain"` + ForceHttpsToUpstream bool `json:"forceHttps"` + UseHttps bool `json:"useHttps"` + ForceClientHttps bool `json:"forceClientHttps"` + ThreadfinDomain string `json:"threadfinDomain"` EnableNonAscii bool `json:"enableNonAscii"` EpgCategories string `json:"epgCategories"` EpgCategoriesColors string `json:"epgCategoriesColors"` diff --git a/src/struct-webserver.go b/src/struct-webserver.go index 39d5e81..8a7a94f 100644 --- a/src/struct-webserver.go +++ b/src/struct-webserver.go @@ -3,7 +3,7 @@ package src // RequestStruct : Anfragen über die Websocket Schnittstelle type RequestStruct struct { // Befehle an Threadfin - Cmd string `json:"cmd,required"` + Cmd string `json:"cmd"` // Benutzer DeleteUser bool `json:"deleteUser,omitempty"` @@ -47,11 +47,12 @@ type RequestStruct struct { SchemeM3U *string `json:"scheme.m3u,omitempty"` SchemeXML *string `json:"scheme.xml,omitempty"` StoreBufferInRAM *bool `json:"storeBufferInRAM,omitempty"` + OmitPorts *bool `json:"omitPorts,omitempty"` ListeningIp *string `json:"listeningIp,omitempty"` - ForceHttps *bool `json:"forceHttps,omitempty"` - HttpsPort *int `json:"httpsPort,omitempty"` - HttpsThreadfinDomain *string `json:"httpsThreadfinDomain,omitempty"` - HttpThreadfinDomain *string `json:"httpThreadfinDomain,omitempty"` + ForceHttpsToUpstream *bool `json:"forceHttps,omitempty"` + UseHttps *bool `json:"useHttps,omitempty"` + ForceClientHttps *bool `json:"forceClientHttps"` + ThreadfinDomain *string `json:"threadfinDomain,omitempty"` EnableNonAscii *bool `json:"enableNonAscii,omitempty"` EpgCategories *string `json:"epgCategories,omitempty"` EpgCategoriesColors *string `json:"epgCategoriesColors,omitempty"` @@ -90,46 +91,46 @@ type ResponseStruct struct { DVR string `json:"DVR"` EpgSource string `json:"epgSource"` Errors int `json:"errors"` - M3U string `json:"m3u-url,required"` + M3U string `json:"m3u-url"` OS string `json:"os"` Streams string `json:"streams"` UUID string `json:"uuid"` Version string `json:"version"` Warnings int `json:"warnings"` XEPGCount int64 `json:"xepg"` - XML string `json:"xepg-url,required"` + XML string `json:"xepg-url"` } `json:"clientInfo,omitempty"` Data struct { Playlist struct { M3U struct { Groups struct { - Text []string `json:"text,required"` - Value []string `json:"value,required"` - } `json:"groups,required"` - } `json:"m3u,required"` - } `json:"playlist,required"` + Text []string `json:"text"` + Value []string `json:"value"` + } `json:"groups"` + } `json:"m3u"` + } `json:"playlist"` StreamPreviewUI struct { - Active []string `json:"activeStreams,required"` - Inactive []string `json:"inactiveStreams,required"` + Active []string `json:"activeStreams"` + Inactive []string `json:"inactiveStreams"` } - } `json:"data,required"` + } `json:"data"` Alert string `json:"alert,omitempty"` - ConfigurationWizard bool `json:"configurationWizard,required"` + ConfigurationWizard bool `json:"configurationWizard"` Error string `json:"err,omitempty"` - Log WebScreenLogStruct `json:"log,required"` + Log WebScreenLogStruct `json:"log"` LogoURL string `json:"logoURL,omitempty"` OpenLink string `json:"openLink,omitempty"` OpenMenu string `json:"openMenu,omitempty"` Reload bool `json:"reload,omitempty"` - Settings SettingsStruct `json:"settings,required"` - Status bool `json:"status,required"` + Settings SettingsStruct `json:"settings"` + Status bool `json:"status"` Token string `json:"token,omitempty"` Users map[string]interface{} `json:"users,omitempty"` Wizard int `json:"wizard,omitempty"` - XEPG map[string]interface{} `json:"xepg,required"` + XEPG map[string]interface{} `json:"xepg"` Notification map[string]Notification `json:"notification,omitempty"` } @@ -146,7 +147,7 @@ type APIRequestStruct struct { type APIResponseStruct struct { EpgSource string `json:"epg.source,omitempty"` Error string `json:"err,omitempty"` - Status bool `json:"status,required"` + Status bool `json:"status"` StreamsActive int64 `json:"streams.active,omitempty"` StreamsAll int64 `json:"streams.all,omitempty"` StreamsXepg int64 `json:"streams.xepg,omitempty"` @@ -160,7 +161,7 @@ type APIResponseStruct struct { // WebScreenLogStruct : Logs werden im RAM gespeichert und für das Webinterface bereitgestellt type WebScreenLogStruct struct { - Errors int `json:"errors,required"` - Log []string `json:"log,required"` - Warnings int `json:"warnings,required"` + Errors int `json:"errors"` + Log []string `json:"log"` + Warnings int `json:"warnings"` } diff --git a/src/system.go b/src/system.go index dae9c9a..890661d 100644 --- a/src/system.go +++ b/src/system.go @@ -149,11 +149,11 @@ func loadSettings() (settings SettingsStruct, err error) { defaults["port"] = "34400" defaults["ssdp"] = true defaults["storeBufferInRAM"] = true + defaults["omitPorts"] = false defaults["listeningIp"]= "" defaults["forceHttps"] = false - defaults["httpsPort"] = 443 - defaults["httpsThreadfinDomain"] = "" - defaults["httpThreadfinDomain"] = "" + defaults["useHttps"] = false + defaults["threadfinDomain"] = "" defaults["enableNonAscii"] = false defaults["epgCategories"] = "Kids:kids|News:news|Movie:movie|Series:series|Sports:sports" defaults["epgCategoriesColors"] = "kids:mediumpurple|news:tomato|movie:royalblue|series:gold|sports:yellowgreen" @@ -185,6 +185,8 @@ func loadSettings() (settings SettingsStruct, err error) { settings.Port = System.Flag.Port } + settings.UseHttps = System.Flag.UseHttps + if len(System.Flag.Branch) > 0 { settings.Branch = System.Flag.Branch showInfo(fmt.Sprintf("Git Branch:Switching Git Branch to -> %s", settings.Branch)) @@ -217,6 +219,37 @@ func loadSettings() (settings SettingsStruct, err error) { showWarning(2021) } + // Setzen der globalen Domain + // Domainnamen setzen + var domain = "" + var port = "" + if settings.UseHttps || settings.ForceClientHttps { + System.ServerProtocol = "https" + } else { + System.ServerProtocol = "http" + } + if Settings.ThreadfinDomain != "" { + domain = Settings.ThreadfinDomain + if Settings.UseHttps { + port = Settings.Port + if port == "" { + port = "34400" + } + } else { + port = Settings.Port + } + + } else { + domain = System.IPAddress + port = Settings.Port + } + if Settings.OmitPorts { + System.Domain = domain + } else { + System.Domain = fmt.Sprintf("%s:%s", domain, port) + } + setBaseURL() + return settings, nil } @@ -254,9 +287,9 @@ func saveSettings(settings SettingsStruct) (err error) { } // Zugriff über die Domain ermöglichen -func setGlobalDomain(domain string) { +func setBaseURL() { - System.Domain = domain + System.BaseURL = fmt.Sprintf("%s://%s", System.ServerProtocol, System.Domain) switch Settings.AuthenticationPMS { case true: @@ -267,16 +300,16 @@ func setGlobalDomain(domain string) { switch Settings.AuthenticationM3U { case true: - System.Addresses.M3U = System.ServerProtocol.M3U + "://" + System.Domain + "/m3u/threadfin.m3u?username=xxx&password=yyy" + System.Addresses.M3U = System.BaseURL + "/m3u/threadfin.m3u?username=xxx&password=yyy" case false: - System.Addresses.M3U = System.ServerProtocol.M3U + "://" + System.Domain + "/m3u/threadfin.m3u" + System.Addresses.M3U = System.BaseURL + "/m3u/threadfin.m3u" } switch Settings.AuthenticationXML { case true: - System.Addresses.XML = System.ServerProtocol.XML + "://" + System.Domain + "/xmltv/threadfin.xml?username=xxx&password=yyy" + System.Addresses.XML = System.BaseURL + "/xmltv/threadfin.xml?username=xxx&password=yyy" case false: - System.Addresses.XML = System.ServerProtocol.XML + "://" + System.Domain + "/xmltv/threadfin.xml" + System.Addresses.XML = System.BaseURL + "/xmltv/threadfin.xml" } if Settings.EpgSource != "XEPG" && !onlyOnce { @@ -308,10 +341,9 @@ func setDeviceID() { } // Provider Streaming-URL zu Threadfin Streaming-URL konvertieren -func createStreamingURL(streamingType, playlistID, channelNumber, channelName, url string, backup_url_1 string, backup_url_2 string, backup_url_3 string) (streamingURL string, err error) { +func createStreamingURL(playlistID, channelNumber, channelName, url string, backup_url_1 string, backup_url_2 string, backup_url_3 string) (streamingURL string, err error) { var streamInfo StreamInfo - var serverProtocol string if len(Data.Cache.StreamingURLS) == 0 { Data.Cache.StreamingURLS = make(map[string]StreamInfo) @@ -321,7 +353,6 @@ func createStreamingURL(streamingType, playlistID, channelNumber, channelName, u if s, ok := Data.Cache.StreamingURLS[urlID]; ok { streamInfo = s - } else { streamInfo.URL = url streamInfo.BackupChannel1URL = backup_url_1 @@ -336,24 +367,7 @@ func createStreamingURL(streamingType, playlistID, channelNumber, channelName, u } - switch streamingType { - - case "DVR": - serverProtocol = System.ServerProtocol.DVR - - case "M3U": - serverProtocol = System.ServerProtocol.M3U - - } - - if Settings.ForceHttps { - if Settings.HttpsThreadfinDomain != "" { - serverProtocol = "https" - System.Domain = Settings.HttpsThreadfinDomain - } - } - - streamingURL = fmt.Sprintf("%s://%s/stream/%s", serverProtocol, System.Domain, streamInfo.URLid) + streamingURL = System.BaseURL + "/stream/" + streamInfo.URLid return } diff --git a/src/update.go b/src/update.go index afdff4e..83c9b67 100644 --- a/src/update.go +++ b/src/update.go @@ -6,8 +6,10 @@ import ( "fmt" "io" "net/http" - + "os" + "strings" up2date "threadfin/src/internal/up2date/client" + "time" "github.com/hashicorp/go-version" @@ -41,7 +43,8 @@ func BinaryUpdate() (err error) { // Update von GitHub case "Main", "Beta": var releaseInfo = fmt.Sprintf("%s/releases", System.Update.Github) - var latest string + //var latest string + //var bin_name string var body []byte var git []*GithubReleaseInfo @@ -63,8 +66,12 @@ func BinaryUpdate() (err error) { if System.Branch == "Beta" { for _, release := range git { if release.Prerelease { - latest = release.TagName updater.Response.Version = release.TagName + updater.Response.UpdatedAt = release.Assets[0].UpdatetAt + for _, asset := range release.Assets { + new_asset := up2date.AssetsStruct{DownloadUrl: asset.DownloadUrl, UpdatetAt: asset.UpdatetAt} + updater.Response.Assets = append(updater.Response.Assets, new_asset) + } break } } @@ -75,17 +82,23 @@ func BinaryUpdate() (err error) { for _, release := range git { if !release.Prerelease { updater.Response.Version = release.TagName - latest = release.TagName - showInfo("TAG LATEST:" + release.TagName) + for _, asset := range release.Assets { + new_asset := up2date.AssetsStruct{DownloadUrl: asset.DownloadUrl, UpdatetAt: asset.UpdatetAt} + updater.Response.Assets = append(updater.Response.Assets, new_asset) + } break } } } - var File = fmt.Sprintf("%s/releases/download/%s/%s_%s_%s", System.Update.Git, latest, "Threadfin", System.OS, System.ARCH) + showInfo("TAG LATEST:" + updater.Response.Version) - updater.Response.Status = true - updater.Response.UpdateBIN = File + for _, asset := range updater.Response.Assets { + if strings.Contains(asset.DownloadUrl, System.OS) && strings.Contains(asset.DownloadUrl, System.ARCH) { + updater.Response.Status = true + updater.Response.UpdateBIN = asset.DownloadUrl + } + } showInfo("FILE:" + updater.Response.UpdateBIN) @@ -122,11 +135,38 @@ func BinaryUpdate() (err error) { } - var currentVersion = System.Version + "." + System.Build - current_version, _ := version.NewVersion(currentVersion) - response_version, _ := version.NewVersion(updater.Response.Version) + var path_to_file string + do_upgrade := false + if System.Branch == "Beta" { + path_to_file = System.Folder.Config + "latest_beta_update" + // If update file does not exits then update the binary to make sure that the latest version is installed + if _, err := os.Stat(path_to_file); errors.Is(err, os.ErrNotExist) { + do_upgrade = true + } else { + // If the file exists check if the latest-release is newer then the last update + saved_last_update_date, err := os.ReadFile(path_to_file) + if err != nil { + ShowError(err, 0) + do_upgrade = true + } + last_time_date, _ := time.Parse(time.RFC3339, string(saved_last_update_date)) + latest_beta_date, _ := time.Parse(time.RFC3339, updater.Response.UpdatedAt) + + if last_time_date.Before(latest_beta_date) { + do_upgrade = true + } + } + } else { + var currentVersion = System.Version + "." + System.Build + current_version, _ := version.NewVersion(currentVersion) + response_version, _ := version.NewVersion(updater.Response.Version) + if response_version.GreaterThan(current_version) && updater.Response.Status { + do_upgrade = true + } + } + // Versionsnummer überprüfen - if response_version.GreaterThan(current_version) && updater.Response.Status { + if do_upgrade { if Settings.ThreadfinAutoUpdate { // Update durchführen var fileType, url string @@ -136,7 +176,7 @@ func BinaryUpdate() (err error) { switch System.Branch { // Update von GitHub - case "master", "beta": + case "Master", "Beta": showInfo("Update Server:GitHub") // Update vom eigenen Server @@ -165,7 +205,11 @@ func BinaryUpdate() (err error) { if err != nil { ShowError(err, 6002) } - + if System.Branch == "Beta" { + if err := os.WriteFile(path_to_file, []byte(updater.Response.UpdatedAt), 0666); err != nil { + ShowError(err, 6005) + } + } } } else { @@ -173,6 +217,8 @@ func BinaryUpdate() (err error) { showWarning(6004) } + } else { + showInfo("BIN:Update omitted") } return nil diff --git a/src/webUI.go b/src/webUI.go index 63238db..e49bd1b 100644 --- a/src/webUI.go +++ b/src/webUI.go @@ -4,44 +4,45 @@ var webUI = make(map[string]interface{}) func loadHTMLMap() { - webUI["html/maintenance.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jhc2UuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQo8L2hlYWQ+DQoNCjxib2R5Pg0KDQogIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImltZ0NlbnRlciI+PC9kaXY+DQoNCiAgPGRpdiBpZD0iYm94Ij4NCg0KICAgIDxkaXYgaWQ9ImhlYWRsaW5lIj4NCiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj5NYWludGVuYW5jZTwvaDE+DQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCiAgICAgIFRocmVhZGZpbiBpcyB1cGRhdGluZyB0aGUgZGF0YWJhc2UsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj48L2Rpdj4NCg0KICA8L2Rpdj4NCg0KPC9ib2R5Pg0KDQo8L2h0bWw+" - webUI["html/img/filter.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzo2OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cs038OQAAAOISURBVGgF5ZpLSBVRGMfvvfmqCKKiKCqKtE3SQ8haJJm1ctPCZYHrFhXtohcUBLVsU1BRBJKLXpsSKs1aCL1oUUhvMgIloodZKmLZ72+OzNVx7jzOXGfqg/89Z875zv/7f35n7px7vanUP2JptzyGhoYKmK8GW0EZmA/mgW7wHrwDN0BTOp0epPVtxBBnLdgIVoE5YBboBR2gDTTA/5DWn0FeDPaBz8CLdeF0EBR5jYRvKbgABoAXa8Opwit/CudK8NoLs4PPM8ZyBsNnB/jpsD7X0C8cjgDXnaQkqkEPCGMSuGWivxxzx8OQj6xtpHWuPhPloHfEMWzTD0HN2GQY2xuW2Lb+/Fh+VaIQPLE5meh+gmSxFYz+BjBogtjGscfiH26Z2GmbNNltVQAIpwDdP6ZNO2iRYqTpZGhfgWUaiMC2w1kCzkbALcqLvDVvUyK6MW9HFES0b8BvsFwXEZi4F+iBtykCcjtlqf0igr52VJ1eqiIgzzdlrRIZfWfJd3SD8ZbqHvkB4XSDpJNB9V0VcX/cT4Ys/zEzSuSj/3WxW9GpRD7ETpZ/QcOJ6LyfdHugitxNehbob9G7lo4PXWBmQhPqQ/fsDOeUfjqNCU1Csi+TQ5+2luzc3yaRr6elevQZwhZr4bomYam0U41yabYqov5hvSTMjlp6RyuiAarSTLPZmox5246+lVREx/isiuh6NxhUJwF2yEpCWu1bK8WEsjyRgCSa0XrVrjNra2mC7TWD5ilYAuJoA4jSlnppF5dVEU3g0ENTD4b3nsZiZsfGJuGqj8qY+CINGqP2GLZCJ+HjtpblxAJ9k3cPrLfGJrnVUaSCarxw0jFua1lOLNBerANx+byya6IkLM2uLZWpAl6/Mcc1EjvjKtLrJNLqI5HnjfQ+bsVeteb0g2y/t7hGvd7CNjenOL8OkJ40KtOdTF+Cl/nV6Mkf4gxocI9vZPYLLKs9iQrqRIACcM2IXGeSboYrg+rztY5ARaDJWUeo0W+sXudLTFhnApaAW6FkZy/+yuXasLoCrSfwVHAnW0+gK93YawKJMLUIAdNAKwhqnSxcYUpPKB6EBE2mg7VR///EX24jybTQerXnOC70FyVP3gjTPXPTQyaP8NFPNeJrCNTPP667JKOq6VNo/A2hes5ccUjmEmPmDoD5+FMgWCcA+3FG57QJP//kQ1PgGBIOToEDgUn+t4V/AJeGknwARIKLAAAAAElFTkSuQmCC" + webUI["html/js/logs_ts.js"] = "Y2xhc3MgTG9nIHsKICAgIGNyZWF0ZUxvZyhlbnRyeSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIldBUk5JTkciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJ3YXJuaW5nTXNnIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIkVSUk9SIikgIT0gLTEpIHsKICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiZXJyb3JNc2ciOwogICAgICAgIH0KICAgICAgICBpZiAoZW50cnkuaW5kZXhPZigiREVCVUciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJkZWJ1Z01zZyI7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZW50cnk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KZnVuY3Rpb24gc2hvd0xvZ3MoYm90dG9tKSB7CiAgICB2YXIgbG9nID0gbmV3IExvZygpOwogICAgdmFyIGxvZ3MgPSBTRVJWRVJbImxvZyJdWyJsb2ciXTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKTsKICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhsb2dzKTsKICAgIGtleXMuZm9yRWFjaChsb2dJRCA9PiB7CiAgICAgICAgdmFyIGVudHJ5ID0gbG9nLmNyZWF0ZUxvZyhsb2dzW2xvZ0lEXSk7CiAgICAgICAgZGl2LmFwcGVuZChlbnRyeSk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChib3R0b20gPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpOwogICAgICAgICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IHdyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgIH0KICAgIH0sIDEwKTsKfQpmdW5jdGlvbiByZXNldExvZ3MoKSB7CiAgICB2YXIgY21kID0gInJlc2V0TG9ncyI7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1sb2dzX3RzLmpzLm1hcA==" + webUI["html/create-first-user.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHk+DQoNCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4NCg0KICA8ZGl2IGlkPSJib3giPg0KDQogICAgPGRpdiBpZD0iaGVhZGxpbmUiPg0KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPnt7LmFjY291bnQuaGVhZGxpbmV9fTwvaDE+DQogICAgPC9kaXY+DQoNCiAgICA8cCBpZD0iZXJyIiBjbGFzcz0iZXJyb3JNc2cgY2VudGVyIj48L3A+DQoNCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCg0KICAgICAgPGZvcm0gaWQ9ImF1dGhlbnRpY2F0aW9uIiBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4NCg0KICAgICAgICA8aDU+e3suYWNjb3VudC51c2VybmFtZS50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPg0KICAgICAgICA8aDU+e3suYWNjb3VudC5wYXNzd29yZC50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiB2YWx1ZT0iIj4NCiAgICAgICAgPGg1Pnt7LmFjY291bnQuY29uZmlybS50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0iY29uZmlybSIgdHlwZT0icGFzc3dvcmQiIG5hbWU9ImNvbmZpcm0iIHBsYWNlaG9sZGVyPSJDb25maXJtIiB2YWx1ZT0iIj4NCg0KICAgICAgPC9mb3JtPg0KDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj4NCiAgICAgIDxpbnB1dCBpZD0ic3VibWl0IiBjbGFzcz0iIiB0eXBlPSJidXR0b24iIHZhbHVlPSJ7ey5idXR0b24uY3JhZXRlQWNjb3VudH19IiBvbmNsaWNrPSJqYXZhc2NyaXB0OiBsb2dpbigpOyI+DQogICAgPC9kaXY+DQoNCg0KICA8L2Rpdj4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY2xpcGJvYXJkLmpzLzIuMC4xMC9jbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYXV0aGVudGljYXRpb25fdHMuanMiPjwvc2NyaXB0Pg0KPC9ib2R5Pg0KDQo8L2h0bWw+" + webUI["html/css/screen.css"] = "bmF2IGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXgtaGVpZ2h0OiAyMHB4Ow0KICBtYXgtd2lkdGg6IDIwcHg7DQogIGZsb2F0OiBsZWZ0Ow0KfQ0KDQpuYXYgcCB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHBhZGRpbmc6IDBweCAzMHB4Ow0KfQ0KDQojbGF5b3V0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KLmZvcm0tY29udHJvbDpkaXNhYmxlZCB7DQogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KfQ0KDQoubGF5b3V0LWxlZnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgbWluLXdpZHRoOiAxNTBweDsNCiAgbWF4LXdpZHRoOiAyMCU7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQogIGhlaWdodDogaW5oZXJpdDsNCiAgZmxvYXQ6IGxlZnQ7DQp9DQoNCi5sYXlvdXQtcmlnaHQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCn0NCg0KI21lbnUtd3JhcHBlciB7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KDQojbG9nbyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtaW4td2lkdGg6IDE4MHB4Ow0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiAxMDBweDsNCiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdGhyZWFkZmluLnBuZyIpOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7DQogIGJhY2tncm91bmQtc2l6ZTogMTAwJTsNCn0NCg0KDQojcGFnZSB7DQogIG1heC13aWR0aDogOTUwcHg7DQogIG1hcmdpbjogYXV0bzsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCg0KICAvKg0KICBoZWlnaHQ6IC13ZWJraXQtY2FsYygxMDAlIC0gMTMwcHgpOw0KICBoZWlnaHQ6IC1tb3otY2FsYygxMDAlIC0gMTMwcHgpOw0KICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEzMHB4KTsNCiAgKi8NCg0KICBtaW4taGVpZ2h0OiAtd2Via2l0LWNhbGMoMTAwJSAtIDEyMHB4KTsNCiAgbWluLWhlaWdodDogLW1vei1jYWxjKDEwMCUgLSAxMjBweCk7DQogIG1pbi1oZWlnaHQ6IGNhbGMoMTAwJSAtIDEyMHB4KTsNCg0KDQogIGJveC1zaGFkb3c6IDBweCA1cHggNXB4ICMyMjI7DQoNCn0NCg0KI3VpU2V0dGluZyB7DQogIGZsb2F0OiByaWdodDsNCiAgbWFyZ2luLXJpZ2h0OiAyNXB4Ow0KfQ0KDQojYm94IGlucHV0W3R5cGU9dGV4dF0sDQojYm94IGlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgd2lkdGg6IC13ZWJraXQtY2FsYygxMDAlIC0gMjBweCk7DQogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogY2FsYygxMDAlIC0gMjBweCk7DQp9DQoNCiNib3ggaW5wdXRbdHlwZT1zdWJtaXRdIHsNCiAgbWFyZ2luOiA1MHB4IGF1dG87DQp9DQoNCiNzZXR0aW5ncyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBwYWRkaW5nOiAxMHB4IDEwcHg7DQp9DQoNCiNzZXR0aW5ncyBoNSB7DQogIG1hcmdpbjogNTBweCAwcHggMTBweCAwcHg7DQp9DQoNCiNjb250ZW50LWludGVyYWN0aW9uIC5zZWFyY2ggew0KICB3aWR0aDogMjAwcHg7DQogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7DQogIHBhZGRpbmc6IDlweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsNCiAgbWFyZ2luOiAxMHB4Ow0KICBmbG9hdDogcmlnaHQ7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCg0KfQ0KDQojbXlTdHJlYW1zIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICBib3R0b206IDBweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsNCiAgd2lkdGg6IDEwMCU7DQogIG1heC13aWR0aDogOTUwcHg7DQoNCiAgLyoNCiAgbWF4LWhlaWdodDogMTAwcHg7DQogICovDQogIG1hcmdpbi1ib3R0b206IDBweDsNCn0NCg0KI215U3RyZWFtcyBpbWcgew0KICB3aWR0aDogNCU7DQogIHBhZGRpbmc6IDJweCA1cHg7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQojc2V0dGluZ3MtZm9vdGVyIHt9DQoNCg0KLyogV2l6YXJkKi8NCiNib3ggew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KICBtaW4taGVpZ2h0OiA0MDBweDsNCg0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQp9DQoNCiNib3ggcCB7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KfQ0KDQojYm94LWZvb3RlciB7DQogIG1hcmdpbi10b3A6IGF1dG87DQp9DQoNCiNib3gtZm9vdGVyIHsNCiAgbWFyZ2luOiBhdXRvOw0KICBwYWRkaW5nOiAxMHB4Ow0KfQ0KDQojaGVhZGxpbmUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOw0KICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggIzIyMjsNCiAgdHJhbnNpdGlvbjogYWxsIDAuNXM7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KI2NvbnRlbnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgb3ZlcmZsb3c6IGF1dG87DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi8qIC0tLSAqLw0KDQoNCiNjbGllbnRJbmZvLA0KI2FjdGl2ZVN0cmVhbXMsDQojaW5hY3RpdmVTdHJlYW1zIHsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgY29sb3I6ICMwMEU2RkY7DQogIHBhZGRpbmc6IDBweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMgdGhlYWQsDQojaW5hY3RpdmVTdHJlYW1zIHRoZWFkIHsNCiAgZm9udC1zaXplOiAyZW07DQp9DQoNCiNvcGVuU3RyZWFtcyB7DQogIHdpZHRoOiAyMHB4Ow0KICBoZWlnaHQ6IDIwMHB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZsb2F0OiByaWdodDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMHB4Ow0KICBib3R0b206IDBweDsNCiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdG91Y2gucG5nIik7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQoNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIHJpZ2h0Ow0KfQ0KDQojYWxsU3RyZWFtcyB7DQogIHBhZGRpbmc6IDJweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMsDQojaW5hY3RpdmVTdHJlYW1zIHsNCiAgLyogd2lkdGg6IDUwJTsgKi8NCiAgLyogZmxvYXQ6IGxlZnQ7ICovDQp9DQoNCiNhY3RpdmVTdHJlYW1zIC50ZEtleSwNCiNpbmFjdGl2ZVN0cmVhbXMgLnRkS2V5IHsNCiAgd2lkdGg6IDExNXB4Ow0KICBsZXR0ZXItc3BhY2luZzogMHB4Ow0KfQ0KDQpjYXB0aW9uIHsNCiAgY29sb3I6ICNGRkY7DQogIGZvbnQtc2l6ZTogMmVtOw0KfQ0KDQoudGRLZXkgew0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQoudGRWYWwgew0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQoubW9kYWwtaGVhZGVyIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzIxMjUyOTsNCn0NCi5tb2RhbC1ib2R5IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCn0NCg0KI2luYWN0aXZlU3RyZWFtcyAudGRLZXkgew0KICBjb2xvcjogcmVkOw0KfQ0KDQojY2xpZW50SW5mbyAudGRWYWwsDQojbG9nSW5mbyAudGRWYWwsDQojYWN0aXZlU3RyZWFtcyAudGRWYWwsDQojaW5hY3RpdmVTdHJlYW1zIC50ZFZhbCwNCiNtYXBwaW5nSW5mbyAudGRWYWwgew0KICBjb2xvcjogI2FhYTsNCiAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7DQp9DQoNCiNib3gtd3JhcHBlciB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgd2lkdGg6IDEwMCU7DQoNCiAgb3ZlcmZsb3cteTogc2Nyb2xsOw0KfQ0KDQojY29udGVudF90YWJsZSwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlLA0KI21hcHBpbmctZGV0YWlsLXRhYmxlLA0KI2NvbnRlbnRfdGFibGUgew0KICBkaXNwbGF5OiB0YWJsZTsNCiAgLS1icy10YWJsZS1jb2xvcjogbm9uZTsNCiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsNCiAgb3ZlcmZsb3cteTogc2Nyb2xsOw0KfQ0KDQojaW5hY3RpdmVfY29udGVudF90YWJsZSB7DQogIG1hcmdpbi10b3A6IDIlOw0KfQ0KDQoNCiNjb250ZW50X3RhYmxlIC5jb250ZW50X3RhYmxlX2hlYWRlciwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIC5pbmFjdGl2ZV9jb250ZW50X3RhYmxlX2hlYWRlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGhlaWdodDogNTBweDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMxMTE7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggIzMzMzsNCiAgY3Vyc29yOiBhdXRvOw0KDQp9DQoNCg0KdGJvZHkgew0KICB3aWR0aDogMTAwJTsNCn0NCg0KDQoudGFibGVFbGxpcHNpcyB7DQogIHdpZHRoOiAxNTBweDsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQp9DQoNCiNjb250ZW50X3RhYmxlIGltZywNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KICBtYXgtd2lkdGg6IDYwcHg7DQp9DQoNCiNjb250ZW50X3RhYmxlIHRyLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIgew0KICBib3JkZXItbGVmdDogc29saWQgM3B4IDQ0NDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMzMzM7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KI2NvbnRlbnRfdGFibGUgdHI6aG92ZXIsDQojaW5hY3RpdmVfY29udGVudF90YWJsZSB0cjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQp9DQoNCiNjb250ZW50X3RhYmxlIHRkLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdGQgew0KDQogIHBhZGRpbmc6IDBweCAycHg7DQp9DQoNCiNjb250ZW50X3RhYmxlIGlucHV0W3R5cGU9dGV4dF0sDQojaW5hY3RpdmVfY29udGVudF90YWJsZSBpbnB1dFt0eXBlPXRleHRdIHsNCiAgd2lkdGg6IDgwJTsNCiAgbWluLXdpZHRoOiAzNXB4Ow0KICBtYXgtd2lkdGg6IDYwcHg7DQogIGJvcmRlcjogMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBtYXJnaW4tbGVmdDogNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQojY29udGVudF90YWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XSwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIGlucHV0W3R5cGU9Y2hlY2tib3hdIHsNCiAgbWF4LXdpZHRoOiAyNXB4Ow0KICBtYXJnaW46IGF1dG87DQp9DQoNCg0KLnNob3dCdWxrIHsNCiAgZGlzcGxheTogYmxvY2s7DQp9DQoNCi5oaWRlQnVsayB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCi5ub0J1bGsge30NCg0KI2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHIHsNCiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDNweCBsYXduZ3JlZW47DQp9DQoNCiNjb250ZW50X3RhYmxlIHRyLm5vdEFjdGl2ZUVQRywNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRyLm5vdEFjdGl2ZUVQRyB7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggcmVkOw0KfQ0KDQoNCiNsb2dTY3JlZW4gcCB7DQogIHdoaXRlLXNwYWNlOiBwcmU7DQogIGZvbnQtc2l6ZTogMTBweDsNCiAgLyoNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsNCiAgKi8NCiAgbGV0dGVyLXNwYWNpbmc6IDFweDsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBmb250LXN0eWxlOiBub3JtYWw7DQogIGZvbnQtdmFyaWFudDogbm9ybWFsOw0KICBsaW5lLWhlaWdodDogMS42ZW07DQp9DQoNCiNtYXBwaW5nLWRldGFpbCwNCiN1c2VyLWRldGFpbCwNCiNmaWxlLWRldGFpbCB7DQogIGJveC1zaGFkb3c6IDBweCA1cHggNDBweCAjMDAwOw0KICBtYXJnaW4tdG9wOiAyMHB4Ow0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KDQogIG1heC13aWR0aDogNjAwcHg7DQogIGJhY2tncm91bmQtY29sb3I6ICMyMjI7DQogIHBhZGRpbmc6IDEwcHg7DQogIG92ZXJmbG93OiBhdXRvOw0KfQ0KDQojZmlsZS1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSB7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwgaW1nIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1heC1oZWlnaHQ6IDMwcHg7DQogIG1hcmdpbi1ib3R0b206IDIwcHg7DQogIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICBtYXJnaW4tcmlnaHQ6IGF1dG87DQp9DQoNCiNtYXBwaW5nLWRldGFpbCBpbnB1dFt0eXBlPXRleHRdLA0KI2NvbnRlbnRfc2V0dGluZ3MgaW5wdXRbdHlwZT10ZXh0XSwNCiNjb250ZW50X3NldHRpbmdzIGlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgYm9yZGVyOiBzb2xpZCAxcHg7DQogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwtdGFibGUsDQojdXNlci1kZXRhaWwtdGFibGUgew0KICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQojY29udGVudF9zZXR0aW5ncyB0YWJsZSB7DQogIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgdGFibGUtbGF5b3V0OiBmaXhlZDsNCiAgd2lkdGg6IDEwMCU7DQp9DQoNCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLA0KI3VzZXItZGV0YWlsLXRhYmxlIHRkIHsNCiAgcGFkZGluZzogMTBweCAwcHg7DQoNCn0NCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLmxlZnQsDQojdXNlci1kZXRhaWwtdGFibGUgdGQubGVmdCB7DQogIHdpZHRoOiAzOCU7DQp9DQoNCi5pbnRlcmFjdGlvbiwNCiNpbnRlcmFjdGlvbiB7DQogIG1hcmdpbi10b3A6IDIwcHg7DQogIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICBmbG9hdDogcmlnaHQ7DQp9DQoNCi5pbnRlcmFjdGlvbiBpbnB1dFt0eXBlPWJ1dHRvbl0sDQouaW50ZXJhY3Rpb24gaW5wdXRbdHlwZT1zdWJtaXRdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgbWFyZ2luOiAwcHggMTBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQojbm90aWZpY2F0aW9uIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgcmlnaHQ6IDBweDsNCiAgaGVpZ2h0OiAxMDAlOw0KICB3aWR0aDogMjUwcHg7DQoNCiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsNCiAgYm94LXNoYWRvdzogMHB4IDBweCAyMHB4ICMwMDA7DQp9DQoNCiNub3RpZmljYXRpb24gaDUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIxMjEyOw0KICBwYWRkaW5nOiA1cHggMTBweCA1cHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiBwcmUgew0KICBwYWRkaW5nOiAwcHggMTBweCAwcHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiBwIHsNCiAgZm9udC1zaXplOiAxMCBweDsNCiAgbWFyZ2luOiAwcHg7DQogIHBhZGRpbmc6IDBweCAxMHB4IDVweCAxMHB4Ow0KfQ0KDQojbm90aWZpY2F0aW9uIC5lbGVtZW50IHsNCiAgLypwYWRkaW5nOiAwcHggNXB4OyovDQogIG1hcmdpbjogNXB4IDVweDsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTgxODE4Ow0KICBib3JkZXItbGVmdDogMTBweCBzb2xpZCBncmVlbjsNCn0NCg0KDQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYyMHB4KSB7DQogIGJvZHkgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQogIH0NCg0KICBoMSB7DQogICAgZm9udC1zaXplOiAyNnB4Ow0KICAgIGxldHRlci1zcGFjaW5nOiAzcHg7DQogIH0NCg0KICBuYXYgcCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogIH0NCg0KDQoNCiAgI2hlYWRlcl9jb25maWcgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGhlaWdodDogMTAwcHg7DQogICAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvbG9nb193XzYwMHgyMDAucG5nIik7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCg0KICAgIGJhY2tncm91bmQtc2l6ZTogMzAwcHggMTAwcHg7DQogIH0NCg0KICAjc2NyZWVuTG9nIHsNCiAgICBtYXJnaW4tbGVmdDogMzAwcHg7DQoNCiAgICB0cmFuc2l0aW9uOiBub25lOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCB0cmFuc3BhcmVudDsNCiAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAjMjIyOw0KICB9DQoNCiAgI3NldHRpbmdzIHsNCiAgICAvKg0KICAgIGhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMDBweCk7DQogICAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEwMHB4KTsNCiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEwMHB4KTsNCiAgICAqLw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBvdmVyZmxvdzogYXV0bzsNCiAgfQ0KDQoNCiAgLnNjcmVlbkxvZ0hpZGRlbiB7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOw0KICB9DQoNCg0KICAjYm94IHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtaW4taGVpZ2h0OiA1MDBweDsNCiAgICBtYXgtd2lkdGg6IDUwMHB4Ow0KICAgIG1hcmdpbjogMTBweCBhdXRvOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQogICAgYm94LXNoYWRvdzogMHB4IDVweCA1cHggIzIyMjsNCg0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgfQ0KDQogICNzZXR0aW5ncywNCiAgI3NldHRpbmdzLWZvb3RlciB7fQ0KfQ0KDQovKg0KPT09PT09PT09PT09PT09IA0KU2lkZWJhcg0KPT09PT09PT09PT09PT09DQoqLw0KOnJvb3Qgew0KICAvKiBkYXJrIHNoYWRlcyBvZiBwcmltYXJ5IGNvbG9yKi8NCiAgLS1jbHItcHJpbWFyeS0xOiBoc2woMjA1LCA4NiUsIDE3JSk7DQogIC0tY2xyLXByaW1hcnktMjogaHNsKDIwNSwgNzclLCAyNyUpOw0KICAtLWNsci1wcmltYXJ5LTM6IGhzbCgyMDUsIDcyJSwgMzclKTsNCiAgLS1jbHItcHJpbWFyeS00OiBoc2woMjA1LCA2MyUsIDQ4JSk7DQogIC8qIHByaW1hcnkvbWFpbiBjb2xvciAqLw0KICAtLWNsci1wcmltYXJ5LTU6IGhzbCgyMDUsIDc4JSwgNjAlKTsNCiAgLyogbGlnaHRlciBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciAqLw0KICAtLWNsci1wcmltYXJ5LTY6IGhzbCgyMDUsIDg5JSwgNzAlKTsNCiAgLS1jbHItcHJpbWFyeS03OiBoc2woMjA1LCA5MCUsIDc2JSk7DQogIC0tY2xyLXByaW1hcnktODogaHNsKDIwNSwgODYlLCA4MSUpOw0KICAtLWNsci1wcmltYXJ5LTk6IGhzbCgyMDUsIDkwJSwgODglKTsNCiAgLS1jbHItcHJpbWFyeS0xMDogaHNsKDIwNSwgMTAwJSwgOTYlKTsNCiAgLyogZGFya2VzdCBncmV5IC0gdXNlZCBmb3IgaGVhZGluZ3MgKi8NCiAgLS1jbHItZ3JleS0xOiBoc2woMjA5LCA2MSUsIDE2JSk7DQogIC0tY2xyLWdyZXktMjogaHNsKDIxMSwgMzklLCAyMyUpOw0KICAtLWNsci1ncmV5LTM6IGhzbCgyMDksIDM0JSwgMzAlKTsNCiAgLS1jbHItZ3JleS00OiBoc2woMjA5LCAyOCUsIDM5JSk7DQogIC8qIGdyZXkgdXNlZCBmb3IgcGFyYWdyYXBocyAqLw0KICAtLWNsci1ncmV5LTU6IGhzbCgyMTAsIDIyJSwgNDklKTsNCiAgLS1jbHItZ3JleS02OiBoc2woMjA5LCAyMyUsIDYwJSk7DQogIC0tY2xyLWdyZXktNzogaHNsKDIxMSwgMjclLCA3MCUpOw0KICAtLWNsci1ncmV5LTg6IGhzbCgyMTAsIDMxJSwgODAlKTsNCiAgLS1jbHItZ3JleS05OiBoc2woMjEyLCAzMyUsIDg5JSk7DQogIC0tY2xyLWdyZXktMTA6IGhzbCgyMTAsIDM2JSwgOTYlKTsNCiAgLS1jbHItd2hpdGU6ICNmZmY7DQogIC0tY2xyLXJlZC1kYXJrOiBoc2woMzYwLCA2NyUsIDQ0JSk7DQogIC0tY2xyLXJlZC1saWdodDogaHNsKDM2MCwgNzElLCA2NiUpOw0KICAtLWNsci1ncmVlbi1kYXJrOiBoc2woMTI1LCA2NyUsIDQ0JSk7DQogIC0tY2xyLWdyZWVuLWxpZ2h0OiBoc2woMTI1LCA3MSUsIDY2JSk7DQogIC0tY2xyLW9yYW5nZTogaHNsKDE0LDkzJSw1MyUpOw0KICAtLWNsci1ibGFjazogIzIyMjsNCiAgLS1mZi1wcmltYXJ5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsNCiAgLS1mZi1zZWNvbmRhcnk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmOw0KICAtLXRyYW5zaXRpb246IGFsbCAwLjNzIGxpbmVhcjsNCiAgLS1zcGFjaW5nOiAwLjFyZW07DQogIC0tcmFkaXVzOiAwLjI1cmVtOw0KICAtLWxpZ2h0LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMSk7DQogIC0tZGFyay1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjIpOw0KICAtLW1heC13aWR0aDogMTE3MHB4Ow0KICAtLWZpeGVkLXdpZHRoOiA2MjBweDsNCn0NCg0KLnNpZGViYXItdG9nZ2xlIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDQ0cmVtOw0KICBsZWZ0OiAxMXJlbTsNCiAgZm9udC1zaXplOiAycmVtOw0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICAvKiBhbmltYXRpb246IGJvdW5jZSAxMHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7ICovDQp9DQouc2lkZWJhci10b2dnbGU6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIGFuaW1hdGlvbjogZXhwYW5kIC41cyBlYXNlLWluIGZvcndhcmRzOw0KfQ0KLnNpZGViYXItdG9nZ2xlOm5vdCg6aG92ZXIpIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGNvbGxhcHNlIC41cyBlYXNlLW91dCBmb3J3YXJkczsNCn0NCkBrZXlmcmFtZXMgZXhwYW5kIHsNCiAgMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7DQogIH0NCiAgNTAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7DQogIH0NCiAgMTAwJSB7DQogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjI1KTsNCiAgfQ0KfQ0KQGtleWZyYW1lcyBjb2xsYXBzZSB7DQogIDAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOw0KICB9DQogIDEwMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7DQogIH0NCn0NCg0KLnNpZGViYXItaGVhZGVyIHsNCiAgZGlzcGxheTogZmxleDsNCiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBwYWRkaW5nOiAxcmVtIDEuNXJlbTsNCn0NCi5jbG9zZS1idG4gew0KICBwb3NpdGlvbjogZml4ZWQ7DQogIHRvcDogNDRyZW07DQogIGxlZnQ6IDcwcmVtOw0KICBmb250LXNpemU6IDJyZW07DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQouY2xvc2UtYnRuOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsNCn0NCi5jbG9zZS1idG46bm90KDpob3Zlcikgew0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIGFuaW1hdGlvbjogY29sbGFwc2UgLjVzIGVhc2Utb3V0IGZvcndhcmRzOw0KfQ0KLmxvZ28gew0KICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsNCiAgaGVpZ2h0OiA0MHB4Ow0KfQ0KDQoubGlua3MgYSB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBmb250LXNpemU6IDEuNXJlbTsNCiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7DQogIHBhZGRpbmc6IDFyZW0gMS41cmVtOw0KICBjb2xvcjogdmFyKC0tY2xyLWdyZXktNSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KfQ0KLmxpbmtzIGE6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jbHItcHJpbWFyeS04KTsNCiAgY29sb3I6IHZhcigtLWNsci1wcmltYXJ5LTUpOw0KICBwYWRkaW5nLWxlZnQ6IDEuNzVyZW07DQp9DQouc29jaWFsLWljb25zIHsNCiAganVzdGlmeS1zZWxmOiBjZW50ZXI7DQogIGRpc3BsYXk6IGZsZXg7DQogIHBhZGRpbmctYm90dG9tOiAycmVtOw0KfQ0KLnNvY2lhbC1pY29ucyBhIHsNCiAgZm9udC1zaXplOiAxLjVyZW07DQogIG1hcmdpbjogMCAwLjVyZW07DQogIGNvbG9yOiB2YXIoLS1jbHItcHJpbWFyeS01KTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQp9DQouc29jaWFsLWljb25zIGE6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktMSk7DQp9DQoNCi5zaWRlYmFyIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDA7DQogIGxlZnQ6IDA7DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IDEwMCU7DQogIGJhY2tncm91bmQ6IHZhcigtLWNsci1ibGFjayk7DQogIGRpc3BsYXk6IGdyaWQ7DQogIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bzsNCiAgcm93LWdhcDogMXJlbTsNCiAgYm94LXNoYWRvdzogdmFyKC0tY2xyLXJlZC1kYXJrKTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlKTsNCn0NCi5zaG93LXNpZGViYXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwKTsNCn0NCi5zaG93LXNpZGViYXIgLmNsb3NlLWJ0biB7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjc2cHgpIHsNCiAgLnNpZGViYXIgew0KICAgIHdpZHRoOiAxMDAwcHg7DQogIH0NCn0NCg0KLnNpZGViYXIgLmNhcmQgew0KICB3aWR0aDogNDRlbTsNCiAgbWFyZ2luOiAzZW07DQp9DQouY2FyZCB7DQogIC8qIGNvbG9yOiB2YXIoLS1jbHItYmxhY2spOyAqLw0KICBib3JkZXI6IDVweCBzb2xpZCB2YXIoLS1jbHItb3JhbmdlKTsNCn0NCi8qIC5jYXJkIGlucHV0W3R5cGU9dGV4dF0gew0KICBjb2xvcjogdmFyKC0tY2xyLWJsYWNrKTsNCiAgb3V0bGluZTogdmFyKC0tY2xyLWJsYWNrKTsNCiAgYm9yZGVyOiBzb2xpZCAxcHggdmFyKC0tY2xyLWJsYWNrKTsNCn0gKi8NCi5jYXJkIGxhYmVsIHsNCiAgbWFyZ2luLXRvcDogMmVtOw0KfQ0KLmNhcmQgbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7DQogIG1hcmdpbi10b3A6IDFlbTsNCn0=" webUI["html/img/settings.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0xMFQxODowODo4OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ckxt87EAAAS7SURBVGgFzZpdiFVVGIbn5N+IMgVhaRLqWI7mQIJoIVRgOhQZNDAhWcbcVuPV3BRE6I14440iQQSaN0p6kz8zI0k5inUhZSSaYOVYODMo5eiMOOPf+LzH2cPMPmvttdbe53jOBy9rr2+938/ae51vr733qaoqgQwPD68B/wDJfXAP3AE94JMShCy+SxJ9CvSDJFlU7MiPFdsh/hrBdIffBsd48HApJjLPI4tnPThBlFJMZI5HBuWZCIt9AmgEzeAJR6JzHeMadnKI8wbYCz4Fkz18JlNwMgf8BCL5j4O3bVaMdUfEhPZqgv1U7HbEbDvoT7HZOPUYNwAlHheV09a4A3RTgMqtj9QY7JdgeM5i3I4+fDIYrQeq/UnyNYOTlBDtS+BwEjk2doz+KyO2OY5bwVCME+/qylTHT4C1D3k+uB33Yul3ov/eMuajlu1RH+II5wtT4hNNSnQ6U/kzbRkfq351bCfF8apAm7kmvq38njWRK0S305SHcSK5XO4U5O9MBmXWbSe3E6YccialdKzH2TTnQEF10XgZ5DdivsxEhkyxjVdERAwu03xmMiqD7hYx19km4cyHq6KyeHKkWpSz+ciVrHVpRYZk/wLHp0H2bULkNKzt4Eq86TKxLq3IECf6nXwV9QPbAfjHQSfoD7SN6L63gYhvbrkiTwKf/dPYpbdPVxKMnigdg0VAG8FQye8AzBl6aIk2A+wPiNoHd63LNZx3wbUAvz/CfTzJb/43AmkGpLfAi0DPE/NALQgtve+xFPdi5xRiNkHa5ySOJ/TR7RrBJdqL4AAxL+p+8ToYAFklNCnF3pM1KPba2L6v8vons5oPsko9ZyZoa0PsOoKezxoY+y5N5DYHWSvDTXzUMJH7IUkRW0tbyyV0CcfDDKmqDMe1KfqnQyehGNgo9q8p4hWYFGsiBY4fsSK/BRkkaPgj5PhMy720BnVFesfnlKo3Das0bw8XYJf196GEuzWRLSDoRypLg2w06FyqTS6Cx7iK1eeqGqrnugmuBgvB8+A5UAuqQYiU+oZ4h2T+BV3gAlDp/pai0U1rFpVGMAv8AHzFd4vShMOQLcoB+DNB/sSbM3ZoMV4BQsW0adSJSbNp1Hu1mY40/YZxpPdJaUSfFzrBMXAjjQNsdvll6cHCWVvKJIphdhcny11pqmolCk5aIDif0BKdZBucgPlO8kh/r8O4HtwClSCbk86HtQqQuUrvKVCf5OARjt0lll4H/WKKmbS0tmJQKZNQ7nq9+w0n2LhTN04E8jKMPpZ1hcli8tGTZYEYJwJrZQGzchTGz3a2ifwdkHc73LYAfpx6DcWXQK1LeiDsdpFGx7UOwUGQJKpmGyIjjvWh50iSQWzsZ/ofgvx+jnYp+B/YpJcB7QXDBKPJ4JDF6+/oCwoBuhoL36R+Jp4RJH16u2IgaxJpHhMehsBY3wTjV2YbOuuumLHrwCW6msbSj74O/DHGgV4Ohl8Jw1nSMmsB+tL6Wnw83odzBrhEr2GtgvFE8A74ADxtJZZygMC25cjQqBwqdg62qpUlziUP45Cq6OGuqqoUE/FJ8i+v7MpJYvEsHl1A5gNty2vLmaN3bBLdAvqB3svqXxLRvyEuc9zs7SiA+ACpw05pJx8SoAAAAABJRU5ErkJggg==" + webUI["html/js/menu_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudV90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21lbnVfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxRQUFRO0lBQWQ7UUFDRSxlQUFVLEdBQVcsV0FBVyxDQUFBO1FBQ2hDLFlBQU8sR0FBVyxJQUFJLENBQUE7UUFDdEIsY0FBUyxHQUFXLE1BQU0sQ0FBQTtJQWE1QixDQUFDO0lBWEMsU0FBUyxDQUFDLEdBQUc7UUFDWCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDakQsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFlBQWEsU0FBUSxRQUFRO0lBUWpDLFlBQVksT0FBZSxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsUUFBZ0I7UUFDekUsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUMxQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsZ0NBQWdDLENBQUMs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QUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQzdDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7d0JBQ2xELEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUE7d0JBQ3RELEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7d0JBQ2pELEVBQUUsQ0FBQyxXQUFXLENB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" + webUI["html/js/network_ts.js"] = "Y2xhc3MgU2VydmVyIHsKICAgIGNvbnN0cnVjdG9yKGNtZCkgewogICAgICAgIHRoaXMuY21kID0gY21kOwogICAgfQogICAgcmVxdWVzdChkYXRhKSB7CiAgICAgICAgLy9pZiAoU0VSVkVSX0NPTk5FQ1RJT04gPT0gdHJ1ZSkgewogICAgICAgIC8vICByZXR1cm4KICAgICAgICAvL30KICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IHRydWU7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgaWYgKHRoaXMuY21kICE9ICJ1cGRhdGVMb2ciKSB7CiAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgVU5ETyA9IG5ldyBPYmplY3QoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgICAgICAgICAgY2FzZSAiaHR0cDoiOgogICAgICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9ICJ3czovLyI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHM6IjoKICAgICAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSAid3NzOi8vIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdXJsID0gdGhpcy5wcm90b2NvbCArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICI6IiArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgIi93cy8iICsgIj9Ub2tlbj0iICsgZ2V0Q29va2llKCJUb2tlbiIpOwogICAgICAgIGRhdGFbImNtZCJdID0gdGhpcy5jbWQ7CiAgICAgICAgdmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOwogICAgICAgIHdzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgV1NfQVZBSUxBQkxFID0gdHJ1ZTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFUVVFU1QgKEpTKToiKTsKICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJSRVFVRVNUOiAoSlNPTikiKTsKICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgICAgICB0aGlzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgIH07CiAgICAgICAgd3Mub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJObyB3ZWJzb2NrZXQgY29ubmVjdGlvbiB0byBUaHJlYWRmaW4gY291bGQgYmUgZXN0YWJsaXNoZWQuIENoZWNrIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLiIpOwogICAgICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IGZhbHNlOwogICAgICAgICAgICBpZiAoV1NfQVZBSUxBQkxFID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBhbGVydCgiTm8gd2Vic29ja2V0IGNvbm5lY3Rpb24gdG8gVGhyZWFkZmluIGNvdWxkIGJlIGVzdGFibGlzaGVkLiBDaGVjayB5b3VyIG5ldHdvcmsgY29uZmlndXJhdGlvbi4iKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgd3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgU0VSVkVSX0NPTk5FQ1RJT04gPSBmYWxzZTsKICAgICAgICAgICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJSRVNQT05TRToiKTsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShlLmRhdGEpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgidG9rZW4iKSkgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gIlRva2VuPSIgKyByZXNwb25zZVsidG9rZW4iXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2VbInN0YXR1cyJdID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBhbGVydChyZXNwb25zZVsiZXJyIl0pOwogICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJyZWxvYWQiKSkgewogICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgibG9nb1VSTCIpKSB7CiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYW5uZWwtaWNvbiIpOwogICAgICAgICAgICAgICAgZGl2LnZhbHVlID0gcmVzcG9uc2VbImxvZ29VUkwiXTsKICAgICAgICAgICAgICAgIGRpdi5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3dpdGNoIChkYXRhWyJjbWQiXSkgewogICAgICAgICAgICAgICAgY2FzZSAidXBkYXRlTG9nIjoKICAgICAgICAgICAgICAgICAgICBTRVJWRVJbImxvZyJdID0gcmVzcG9uc2VbImxvZyJdOwogICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzaG93TG9ncyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgU0VSVkVSID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgICAgIFNFUlZFUiA9IHJlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgib3Blbk1lbnUiKSkgewogICAgICAgICAgICAgICAgdmFyIG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyZXNwb25zZVsib3Blbk1lbnUiXSk7CiAgICAgICAgICAgICAgICBtZW51LmNsaWNrKCk7CiAgICAgICAgICAgICAgICBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJvcGVuTGluayIpKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSByZXNwb25zZVsib3BlbkxpbmsiXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoImFsZXJ0IikpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJhbGVydCJdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoIndpemFyZCIpKSB7CiAgICAgICAgICAgICAgICBjcmVhdGVMYXlvdXQoKTsKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25XaXphcmRbcmVzcG9uc2VbIndpemFyZCJdXS5jcmVhdGVXaXphcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjcmVhdGVMYXlvdXQoKTsKICAgICAgICB9OwogICAgfQp9CmZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7CiAgICB2YXIgdmFsdWUgPSAiOyAiICsgZG9jdW1lbnQuY29va2llOwogICAgdmFyIHBhcnRzID0gdmFsdWUuc3BsaXQoIjsgIiArIG5hbWUgKyAiPSIpOwogICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAyKQogICAgICAgIHJldHVybiBwYXJ0cy5wb3AoKS5zcGxpdCgiOyIpLnNoaWZ0KCk7Cn0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmV0d29ya190cy5qcy5tYXA=" + webUI["html/img/logout.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xM1QxMToxMDoxODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cg27QeEAAANQSURBVGgF7Zk9aBRBGIZzSRSN8YdoCpEkghCCqK1o4g9IsBCCNmIniCAiWAhqI8G02qiIoqCCWggSEcFKEFPYpVAU8QdFUyiKRpRokBjP55OdZDLZvZnZ7N3Ngh887M7sN/O9797t7c5eTc3/8D8DxWKxGS5Ai//oAEYgvB4OwleQaAtAlp8ERG+Bp6Jei/wYQfRy6NfE67vhG0FtA/TBqK7c2A/bCGJ3wpAhOq4ZphGUroEHcYoT+sIygsgmOAu/EwQndYdhBHV1sB8+Jym19Lf6/faVIRuBG+GRRajtcPWMoKwFbtgUOh6vvBGEzYFj8MNRpEtaZY2gaAe8cVHmmXOc/K3QXIZv/+SUFFgJ96AS8ZwiZ6Ab6iZVzGCPiRbCKRiDasQHip6EdD/PDKyFvfAJQgg5kVfB/VoieT0MQojxE1G9UG/7otWS0A7pPkrb7DM/Ppcp+mAAM/bFGEmL4RL8gVDjI8JWOZ0bEjvhSahO0CXXsLMZWZYegREIMV4jaoHTJyNJJLfC7RCdoOm6sxGVyKAeeBegoU6l0XmLiXlwAqp1o4w7j3d1AwW9YdtnNrnQzkOXLddyfAPHv8Ey6ABpd8N88In2QqHwymfARC5mCrAH0i6qGDr9jk3fbNgFz8A1DkwIS7tDpSVwGdLcexIfPZhPHpf2wS+wRX9a/dPGUakLzBdwNgGJRlQBJtgMw5aJ3qr8TLYUmwVHwXXxZTUiwphvHYxDUnzPxIA5CdXa4E5SVa3fyUhkRtYqpSKbNYxpJiq+ncpDJar7GGlknvcl5mqM05BZH4Xl3iOLpLh7j7OR6MScSzAykplg20QIWA0PDSG+RuTdQVy8sNXP9DgK5N4jK9AvkRpfI4sYF/c2836mQl0nQ4zce66AfZFkTMqYl2DGaSMt/CYOHpsuaPco5bLUzUuMGkLHaQ+ovjwZUZrVdpAHRnnw/Bd5MrJCiY62t4x2+E2uBfkfRg95TdSkK8/LJ7JWF83+Nb5Ww0Zf+E3OviwXVMgT8dLwVRsKEd0A+uP8biMlH01MHAYVF/Oh2lCJenkDqpbUN9nPyzU91QnCRbyEPEXn1sQhxMv7tG1T7cW3rK/r44eVtxfxm6gwBh38zJqPJuUtXu3Z/wLwuBaBLgMkKwAAAABJRU5ErkJggg==" webUI["html/img/threadfin.png"] = "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" - webUI["html/js/base_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2Jhc2VfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUN6QixJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUE7QUFDOUIsSUFBSSxjQUFzQixDQUFBO0FBQzFCLElBQUksdUJBQStCLENBQUE7QUFDbkMsSUFBSSxjQUFjLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUNqQyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0FBQ3ZCLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFBO0FBQzdCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQTtBQUl4QixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtBQUM1RyxnQ0FBZ0M7QUFDaEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDN0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBUyxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RCxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUV0RCxDQUFDLENBQUMsQ0FBQztBQUNILFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVMsQ0FBQztJQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLENB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" - webUI["html/css/base.css"] = "KiB7DQogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsNCiAgLW1vei1hcHBlYXJhbmNlOiBub25lOw0KICAtbXMtYXBwZWFyYW5jZTogbm9uZTsNCiAgZm9udC1mYW1pbHk6ICJBcmlhbCIsIHNhbnMtc2VyaWY7DQogIGxldHRlci1zcGFjaW5nOiAycHg7DQp9DQoNCi8qDQo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgDQogICAgZGlzcGxheTogbm9uZTsgDQp9DQoqLw0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsNCiAgd2lkdGg6IDEycHg7DQogIGhlaWdodDogMTJweDsNCn0NCg0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsNCiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KDQp9DQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KICBib3JkZXItcmFkaXVzOiA1cHg7DQogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDZweCByZ2JhKDAsIDAsIDAsIDAuNik7DQogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQp9DQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiAjMzMzOw0KfQ0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KfQ0KDQphIHsNCiAgY29sb3I6ICMwMEU2RkY7DQp9DQoNCmh0bWwsDQpib2R5IHsNCiAgY29sb3I6ICNmZmY7DQogIG1hcmdpbjogMHB4IGF1dG87DQogIGhlaWdodDogMTAwJTsNCiAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQpoMiB7DQogIGZvbnQtc2l6ZTogMjRweDsNCiAgbGV0dGVyLXNwYWNpbmc6IDJweDsNCn0NCg0KaDMgew0KICBmb250LXNpemU6IDIycHg7DQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQp9DQoNCmg0IHsNCiAgZm9udC1zaXplOiAyMHB4Ow0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICBsaW5lLWhlaWdodDogMS41ZW07DQoNCn0NCg0KaDUgew0KICBmb250LXNpemU6IDE2cHg7DQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQogIGxpbmUtaGVpZ2h0OiAxLjJlbTsNCiAgbWFyZ2luOiAyNXB4IDBweCAxMHB4IDBweDsNCn0NCg0KaHIgew0KICBib3JkZXI6IDA7DQogIGhlaWdodDogMXB4Ow0KICBiYWNrZ3JvdW5kOiAjMzMzOw0KICBtYXJnaW46IDEwcHggMHB4Ow0KfQ0KDQpwIHsNCiAgbWFyZ2luOiAycHg7DQogIHBhZGRpbmc6IDJweCA1cHg7DQp9DQoNCnByZSB7DQogIG1hcmdpbjogMHB4IDBweCA1cHggMHB4Ow0KICBmb250LXNpemU6IDEycHg7DQogIGNvbG9yOiAjZGRkOw0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7DQogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgZm9udC1zdHlsZTogbm9ybWFsOw0KICBmb250LXZhcmlhbnQ6IG5vcm1hbDsNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KfQ0KDQpsYWJlbCB7DQogIG1hcmdpbi1ib3R0b206IDIwcHg7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQpsaSB7DQogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zOw0KfQ0KDQpsaTpob3ZlciB7DQogIGJvcmRlci1jb2xvcjogIzAwRTZGRg0KfQ0KDQpzZWxlY3Qgew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIHdpZHRoOiBjYWxjKDEwMCUgKyAycHgpOw0KICBib3JkZXI6IHNvbGlkIDBweCAjMDBFNkZGOw0KICBib3JkZXItcmFkaXVzOiAwcHg7DQogIG91dGxpbmU6IG5vbmU7DQogIGNvbG9yOiAjZmZmOw0KICBwYWRkaW5nOiA5cHggMTBweDsNCiAgZGlzcGxheTogYmxvY2s7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGZvbnQtc2l6ZTogMTRweDsNCiAgbWFyZ2luOiA1cHggMHB4IDVweCAwcHg7DQp9DQoNCnNlbGVjdDpmb2N1cyB7DQogIG91dGxpbmU6IG5vbmU7DQp9DQoNCmlucHV0IHsNCiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOw0KICBtYXJnaW46IDBweDsNCiAgcGFkZGluZzogMi41cHggMTBweDsNCiAgb3V0bGluZTogbm9uZTsNCiAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl0sDQppbnB1dFt0eXBlPXN1Ym1pdF0gew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIG1hcmdpbjogMTBweCAxMHB4Ow0KICBwYWRkaW5nOiAxMHB4IDI1cHg7DQogIGJvcmRlcjogc29saWQgMHB4Ow0KICBib3JkZXItY29sb3I6ICMwMDA7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCiAgb3V0bGluZTogbm9uZTsNCiAgY29sb3I6ICNmZmY7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpmb2N1cyB7DQogIG91dGxpbmU6IG5vbmU7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl06aG92ZXIuZGVsZXRlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOw0KICBjb2xvcjogI2ZmZjsNCn0NCg0KaW5wdXRbdHlwZT10ZXh0XSwNCmlucHV0W3R5cGU9c2VhcmNoXSwNCmlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgY29sb3I6ICNmZmY7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDBweCk7DQogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDBweCk7DQogIHdpZHRoOiBjYWxjKDEwMCUgLSAwcHgpOw0KICBvdXRsaW5lOiBub25lOw0KICBib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudDsNCiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1ib3R0b20tY29sb3I6ICM1NTU7DQogIGJvcmRlci1yYWRpdXM6IDBweDsNCiAgcGFkZGluZzogOHB4IDEwcHg7DQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICBib3JkZXI6IHNvbGlkIDFweCAjMDBFNkZGOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBoZWlnaHQ6IDI1cHg7DQogIHdpZHRoOiAyNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIC8qDQogIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7DQogICovDQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7DQogIGNvbG9yOiAjZmZmOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBFNkZGOw0KICAvKmRpc3BsYXk6IGlubGluZS1ibG9jazsqLw0KfQ0KDQppbnB1dFt0eXBlPSJjaGVja2JveCJdOmJlZm9yZSB7DQogIHBvc2l0aW9uOiBpbml0aWFsOw0KICBsZWZ0OiAwcHg7DQogIG1hcmdpbi1sZWZ0OiAtNHB4Ow0KICBjb250ZW50OiAiICI7DQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogaW5pdGlhbDsNCiAgbGVmdDogMHB4Ow0KICBtYXJnaW4tbGVmdDogLTNweDsNCiAgY29udGVudDogIuKckyI7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPSJjaGVja2JveCJdLmJ1bGs6Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGxlZnQ6IDBweDsNCiAgdG9wOiAtMTFweDsNCiAgbWFyZ2luLWxlZnQ6IC0zcHg7DQogIGNvbnRlbnQ6ICLinJMiOw0KICBmb250LXNpemU6IDEuNWVtOw0KICBjb2xvcjogIzAwMDsNCn0NCg0KDQppbnB1dFt0eXBlPWJ1dHRvbl0uY2FuY2VsIHsNCg0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiByZWQ7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXS5zYXZlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQoNCmlucHV0W3R5cGU9YnV0dG9uXS5ibGFjaywNCmlucHV0W3R5cGU9c3VibWl0XS5ibGFjayB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KaW5wdXRbdHlwZT1idXR0b25dLmNlbnRlciB7DQogIG1hcmdpbi1yaWdodDogYXV0bzsNCiAgbWFyZ2luLWxlZnQ6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KLnBvaW50ZXIgew0KICBjdXJzb3I6IHBvaW50ZXI7DQp9DQoNCi5wb2ludGVyOmhvdmVyIHsNCiAgY29sb3I6ICMwMEU2RkY7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KLnNvcnRUaGlzIHsNCiAgY29sb3I6ICMwMEU2RkY7DQp9DQoNCi53NDBweCB7DQogIG1heC13aWR0aDogNDBweDsNCn0NCg0KLnc1MHB4IHsNCiAgbWF4LXdpZHRoOiA1MHB4Ow0KfQ0KDQoudzgwcHggew0KICBtYXgtd2lkdGg6IDgwcHg7DQp9DQoNCi53MTUwcHggew0KICBtYXgtd2lkdGg6IDE1MHB4Ow0KfQ0KDQoudzIwMHB4IHsNCiAgbWF4LXdpZHRoOiAyMDBweDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgd2lkdGg6IDIwMHB4Ow0KICBvdmVyZmxvdy14OiBoaWRkZW47DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KfQ0KDQoudzMwMHB4IHsNCiAgbWF4LXdpZHRoOiAzMDBweDsNCn0NCg0KLncyMjBweCB7DQogIG1heC13aWR0aDogMjIwcHg7DQogIGN1cnNvcjogYWxpYXM7DQp9DQoNCi5mb290ZXIgew0KICBmb250LXNpemU6IDEwcHg7DQp9DQoNCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi5zY3JlZW5Mb2dIaWRkZW4gew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xMTBweCk7DQp9DQoNCi5ib3JkZXJTcGFjZSB7DQogIG1hcmdpbi1ib3R0b206IDMwcHg7DQp9DQoNCi5ibG9jayB7fQ0KDQoubm9uZSB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCg0KLm5vdFZpc2libGUgew0KICBoZWlnaHQ6IDBweDsNCiAgZGlzcGxheTogbm9uZTsNCiAgb3BhY2l0eTogMDsNCiAgYm9yZGVyLWJvdHRvbTogIzAwMCBzb2xpZCAwcHg7DQoNCn0NCg0KLnZpc2libGUgew0KICBvcGFjaXR5OiAxOw0KICBkaXNwbGF5OiBibG9jazsNCiAgYm9yZGVyLWJvdHRvbTogIzQ0NCBzb2xpZCAxcHg7DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi5mbG9hdFJpZ2h0IHsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouZmxvYXRMZWZ0IHsNCiAgZmxvYXQ6IGxlZnQ7DQp9DQoNCi5tZW51LWFjdGl2ZSB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7DQp9DQoNCnRhYmxlIHsNCiAgd2lkdGg6IDEwMCUNCn0NCg0KLm1lbnUtbm90QWN0aXZlIHt9DQoNCiNicmFuY2ggew0KICBjb2xvcjogcmVkOw0KfQ0KDQojaW50ZXJhY3Rpb24gew0KICBtYXJnaW4tYm90dG9tOiAxMDBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBib3JkZXItYm90dG9tOiBzb2xpZCAwcHggIzc3NzsNCn0NCg0KDQouaGFsZiB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB3aWR0aDogNDUlOw0KfQ0KDQoubWVudSB7DQogIGJvcmRlcjogc29saWQgMXB4ICMwMEU2RkY7DQp9DQoNCi5pbmZvTXNnIHsNCiAgY29sb3I6ICNhYWE7DQp9DQoNCi5lcnJvck1zZyB7DQogIGNvbG9yOiByZWQ7DQp9DQoNCi53YXJuaW5nTXNnIHsNCiAgY29sb3I6IHllbGxvdzsNCn0NCg0KLmRlYnVnTXNnIHsNCiAgY29sb3I6IG1hZ2VudGE7DQp9DQoNCg0KLmNhdGVnb3J5IHsNCiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDJweA0KfQ0KDQoubmV3cyB7DQogIGJvcmRlci1jb2xvcjogdG9tYXRvDQp9DQoNCi5tb3ZpZSB7DQogIGJvcmRlci1jb2xvcjogcm95YWxibHVlOw0KfQ0KDQouc2VyaWVzIHsNCiAgYm9yZGVyLWNvbG9yOiBnb2xkOw0KfQ0KDQouc3BvcnRzIHsNCiAgYm9yZGVyLWNvbG9yOiB5ZWxsb3dncmVlbjsNCn0NCg0KLmtpZHMgew0KICBib3JkZXItY29sb3I6IG1lZGl1bXB1cnBsZTsNCn0NCg0KLyogTG9hZGluZyAqLw0KI2xvYWRpbmcgew0KICBsZWZ0OiAwcHg7DQogIHRvcDogMHB4Ow0KICB6LWluZGV4OiAxMDAwMDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7DQogIG1hcmdpbjogYXV0bzsNCiAgd2lkdGg6IDEwMCU7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KDQoubG9hZGVyIHsNCiAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMwMEU2RkY7DQogIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCAjMDBFNkZGOw0KICB3aWR0aDogNTBweDsNCiAgaGVpZ2h0OiA1MHB4Ow0KICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTsNCiAgYW5pbWF0aW9uOiBzcGluIDEuMnMgbGluZWFyIGluZmluaXRlOw0KDQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgbWFyZ2luOiBhdXRvOw0KDQogIHRvcDogMDsNCiAgcmlnaHQ6IDA7DQogIGJvdHRvbTogMDsNCiAgbGVmdDogMDsNCg0KfQ0KDQpALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7DQogIDAlIHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOw0KICB9DQoNCiAgMTAwJSB7DQogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOw0KICB9DQp9DQoNCkBrZXlmcmFtZXMgc3BpbiB7DQogIDAlIHsNCiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsNCiAgfQ0KDQogIDEwMCUgew0KICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7DQogIH0NCn0=" - webUI["html/js/network_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya190cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL25ldHdvcmtfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxNQUFNO0lBSVYsWUFBWSxHQUFXO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUVsQixJQUFJLGlCQUFpQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLE9BQU07UUFDUixDQUFDO1FBRUQsaUJBQWlCLEdBQUcsSUFBSSxDQUFBO1FBRXhCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzVCLCtCQUErQjtZQUMvQixJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtRQUNyQixDQUFDO1FBRUQsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtnQkFDdkIsTUFBSztZQUNQLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtnQkFDeEIsTUFBSztRQUNULENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUUzSCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQTtRQUN0QixJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMzQixFQUFFLENBQUMsTUFB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" - webUI["html/js/menu_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudV90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21lbnVfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxRQUFRO0lBQWQ7UUFDRSxlQUFVLEdBQVcsV0FBVyxDQUFBO1FBQ2hDLFlBQU8sR0FBVyxJQUFJLENBQUE7UUFDdEIsY0FBUyxHQUFXLE1BQU0sQ0FBQTtJQWE1QixDQUFDO0lBWEMsU0FBUyxDQUFDLEdBQUc7UUFDWCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDakQsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFlBQWEsU0FBUSxRQUFRO0lBUWpDLFlBQVksT0FBZSxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsUUFBZ0I7UUFDekUsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUMxQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsZ0NBQWdDLENBQUMs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QUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQzdDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7d0JBQ2xELEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUE7d0JBQ3RELEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7d0JBQ2pELEVBQUUsQ0FBQyxXQUFXLENB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" - webUI["html/video/stream-limit.ts"] = "R0AREABC8CUAAcEAAP8B/wAB/IAUSBIBBkZGbXBlZwlTZXJ2aWNlMDF3fEPK//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQAAQAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABAAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMAdQAAB7DH4AAAAB4AAAgMAKMQAJEKERAAfYYQAAAAEJ8AAAAAFnZAAorNlAeAIn5YpQAAADABAAAAMDIPGDGWAAAAABaOvjyyLAAAABBgX//6vcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5ZjkgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIzIC0gaHR0cDovL3dHAQARd3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2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30X9oT0SBBZCI3AtJaE1scGsmpXrX+6L7ECx+XYakivHzMbORwEAFX6jycIYObFMA8cO1RQbKqBjRSwmV6s3Bvymh1Uy2Q4NYGetxxqA4TS9AAsfEnTWSPnioguTXby9YCaR4TjGhn8NBtHaAqal7fT8Mi6Fx48bLZLUw8vE0oyOXRPPZ7YEaZ8VtCcKvfPmIXDe+CICjSg/14litlDqWjesyqV20kGkxEXxFBxQ6opg8rJ5nrXpJ7Yg7f1kVB6kfioI546wX4WiVIHMnIjolv1sVV16hPOoaheE0P72F7ZHAQAW7HIsDRCfdXPaYJO+kI1KnbprbBU8l9EpUeesa13zPgeLsD/2jy8om6zqqaZBpDO3+joQU+lzMfu74FIaVthokTCHq+okILC+gMpWqJ9gii24CxJR1eAEEaVrQma2Vqt0eRRTQKRgUz3U+yFZEROE+9eX4DBqMlOFD6/RPC32sesdhyOVL9peV/fimBhb4rcmjAOm79hlThrtz/TWGfACtvoNRAwACV66tkmnc4GPMdLg0xEkq+1LSEcBADcNAP///////////////5trYpfJL+GISCBj9FiUkOtbkee6L9I58mjnY1y/WDNqht+Qw3+9i+KfyBbjdz/46xUXVuCItwfw/gdYKyy+IjRZiv53kEqW+PD7lPLLRgAAL2BITMTuwQL79Q01wkomp2ZPIBYiBP6WREAZAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAW9R0EAGAAAAeAAAIDACjEACYEhEQAH9IEAAAABCfAAAAABQZokbEO//qmWAAADAAADAAADAAADAAADAAADAAADAhPyO6dd23w9DkWWQJotXSbxVzBxaMjhfbwK5hWmvMGszdWhoszx1x0hDXN8c9BgYxwvxRZXkmrTPV9ZQAAAAwAAAwAAAwAAAwAKyANRq59GNuA0ghi7BmsDn4KOtIcIHn/KA8ZjXdDU0cUWk7qRZwNMMelaC07cZyBZW9BHAQA5EgD//////////////////////472Ji2hDXNKdWiA/xvCwGEXvTeFAvXO+jhlL6AOli2RGJa+ncBbXMf/Fv/nG9TOUvI8v62JTNsuhHbKPEq9HPF4/Uizrx3rjCTMC69d6+VoYrKv6XxKyvGcL7/QDEDKbwk4eCFgJZJEAlH+N25TWR6KYwzkYYgGuXdrBv3UkeA7VHwdf9Xzh5cuSg4ngVmnfeIpA9JsLqp2wIu9AAADAAADAAAIuEdBADoHEAAAiRx+AAAAAeAAAIDACjEACUjhEQAJEKEAAAABCfAAAAABQZ5CeIX/AAADAAADAAADAAADAAADAAADAAADAnzE28Zci1VBf0H4k1nWmJ0ogyjKdI6LAY1zorGVIRF7G8uwAAADAAADAAADAAADAAADAqrZOCXhGzA4u24KPtb92mgjNUnlvc9Xhr0gBo7u2GDR+aPxP9hnLhhlBtu4gqLkmscLxiv7oXnm033sXadVffC0UcIARwEAO64A//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAwAAAwAAM+FHQAARAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABEAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAPCUA////////////////////////////////////////////////AAAB4AAAgIAFIQAJLMEAAAABCfAAAAABAZ5hdEK/AAADAAADAAADAAADAAADAAADAAADA1/+i67DypGtrhJHPx4hDO6/W1t2QWamAxImT0NjhBVoAAADAAADAAADAAADAAAFMUbvocN9sGd3vACpQrs5+mzAC6i5WG4adCZ7bcVeOzo7AFpOoAAAAwAAAwAAMqBHQQA9QhAAAJcsfgD//////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACWUBEQAJSOEAAAABCfAAAAABAZ5jakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAAF+YuLcI2IxJ27WrhAZp7Yh4CElw5RRRGjq0bAAADAAADAABEwUdBAD4uAP///////////////////////////////////////////////////////////wAAAeAAAIDACjEACfGhEQAJZQEAAAABCfAAAAABQZpoSahBaJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAK78A5Ntd6FmvObqU2qkO9/nBjO187SEClZ2zAWMgqZxWCxcqvQx+wgAAADAAADAAU1R0AAEgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAASAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBAD86EAAApTx+AP///////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACblhEQAJgSEAAAABCfAAAAABQZ6GRREsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAB1LjAMsF1v3AJeffDUP0gAbzkVi7LRpW7+1eciThATL+0AAADAAADAAIPR0EAMEYA////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQAJnUEAAAABCfAAAAABAZ6ldEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAOo9u4wKtZ9mouspMor7zADZAcKEUQKmIGN/qFqwAAAMAAAMAA1NHQQAxURAAALNMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACdWBEQAJuWEAAAABCfAAAAABAZ6nakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABMAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAEwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQAyTgD//////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC2IhEQAJ1YEAAAABCfAAAAABQZqsSahBbJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAF4+AbzVAAAAwAAAwAAAwBAwEdBADNKEAAAwVx+AP////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAsp4REACfGhAAAAAQnwAAAAAUGeykUVLC//AAADAAADAAADAAADAAADAAADAAADAAE1849qKzqh1YAAAAMAAAMAAAMAAAMAAPrcuImYkdwSCsiv8h6ss58AAAMAAAMAAM+BR0EANFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALDcEAAAABCfAAAAABAZ7pdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAH1fABVCgbyQRhNELHHAAAAMAAAMACyhHQAAUAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABQAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EANVEQAADPbH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAtGAREACynhAAAAAQnwAAAAAQGe62pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTBHQBERAELwJQABwQAA/wH/AAH8gBRIEgEGRkZtcGVnCVNlcnZpY2UwMXd8Q8r//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADZOAP//////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQAL0qERAAtGAQAAAAEJ8AAAAAFBmvBJqEFsmUwIb//+p4QAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAv/sqEpwAAADAAADAAADAMCBR0EAN0oQAADdfH4A/////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC5phEQALYiEAAAABCfAAAAABQZ8ORRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwABAV2OiZ9R3aIKyK/yHqyznwAAAwAAAwAAz4FHQAAVAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABUAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAOFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALfkEAAAABCfAAAAABAZ8tdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAICUVFVNgckQRhNELHHAAAAMAAAMACylHQQA5URAAAOuMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC7aBEQALmmEAAAABCfAAAAABAZ8vakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdBADpRAP//////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQANQyERAAu2gQAAAAEJ8AAAAAFBmzRJqEFsmUwIZ//+nhAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAGVAR0AAFgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAAWAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADtMEAAA+Zx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADQrhEQAL0qEAAAABCfAAAAABQZ9SRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe1R0EAPFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEAC+7BAAAAAQnwAAAAAQGfcXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0BHQQA9URAAAQesfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADScBEQANCuEAAAABCfAAAAABAZ9zakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABcAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAFwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQA+UgD///////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2zoREADScBAAAAAQnwAAAAAUGbeEmoQWyZTAhX//44QAAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABi0dBAD9MEAABFbx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADXthEQANQyEAAAABCfAAAAABQZ+WRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe0R0EAMFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEADV9BAAAAAQnwAAAAAQGftXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0FHQAAYAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABgAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMVEQAAEjzH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2XgREADXthAAAAAQnwAAAAAQGft2pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTE=" - webUI["html/js/menu_ts.js"] = "Y2xhc3MgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gIm1haW4tbWVudSI7CiAgICAgICAgdGhpcy5IVE1MVGFnID0gIkxJIjsKICAgICAgICB0aGlzLkltYWdlUGF0aCA9ICJpbWcvIjsKICAgIH0KICAgIGNyZWF0ZUlNRyhzcmMpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwogICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJzcmMiLCB0aGlzLkltYWdlUGF0aCArIHNyYyk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVWYWx1ZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KY2xhc3MgTWFpbk1lbnVJdGVtIGV4dGVuZHMgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IobWVudUtleSwgdmFsdWUsIGltYWdlLCBoZWFkbGluZSkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51S2V5ID0gbWVudUtleTsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgdGhpcy5pbWdTcmMgPSBpbWFnZTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICB9CiAgICBjcmVhdGVJdGVtKCkgewogICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiTEkiKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgib25jbGljayIsICJqYXZhc2NyaXB0OiBvcGVuVGhpc01lbnUodGhpcykiKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmlkKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibmF2LWl0ZW0iKTsKICAgICAgICB2YXIgaW1nID0gdGhpcy5jcmVhdGVJTUcodGhpcy5pbWdTcmMpOwogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY3JlYXRlVmFsdWUodGhpcy52YWx1ZSk7CiAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChpbWcpOwogICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQodmFsdWUpOwogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRvY3VtZW50SUQpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICBzd2l0Y2ggKHRoaXMubWVudUtleSkgewogICAgICAgICAgICBjYXNlICJwbGF5bGlzdCI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJ7ey5wbGF5bGlzdC50YWJsZS5wbGF5bGlzdH19IiwgInt7LnBsYXlsaXN0LnRhYmxlLnR1bmVyfX0iLCAie3sucGxheWxpc3QudGFibGUubGFzdFVwZGF0ZX19IiwgInt7LnBsYXlsaXN0LnRhYmxlLmF2YWlsYWJpbGl0eX19ICUiLCAie3sucGxheWxpc3QudGFibGUudHlwZX19IiwgInt7LnBsYXlsaXN0LnRhYmxlLnN0cmVhbXN9fSIsICJ7ey5wbGF5bGlzdC50YWJsZS5ncm91cFRpdGxlfX0gJSIsICJ7ey5wbGF5bGlzdC50YWJsZS50dmdJRH19ICUiLCAie3sucGxheWxpc3QudGFibGUudW5pcXVlSUR9fSAlIl07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3sueG1sdHYudGFibGUuZ3VpZGV9fSIsICJ7ey54bWx0di50YWJsZS5sYXN0VXBkYXRlfX0iLCAie3sueG1sdHYudGFibGUuYXZhaWxhYmlsaXR5fX0gJSIsICJ7ey54bWx0di50YWJsZS5jaGFubmVsc319IiwgInt7LnhtbHR2LnRhYmxlLnByb2dyYW1zfX0iXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3suZmlsdGVyLnRhYmxlLm5hbWV9fSIsICJ7ey5maWx0ZXIudGFibGUudHlwZX19IiwgInt7LmZpbHRlci50YWJsZS5maWx0ZXJ9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgICAgIHRoaXMudGFibGVIZWFkZXIgPSBbInt7LnVzZXJzLnRhYmxlLnVzZXJuYW1lfX0iLCAie3sudXNlcnMudGFibGUucGFzc3dvcmR9fSIsICJ7ey51c2Vycy50YWJsZS53ZWJ9fSIsICJ7ey51c2Vycy50YWJsZS5wbXN9fSIsICJ7ey51c2Vycy50YWJsZS5tM3V9fSIsICJ7ey51c2Vycy50YWJsZS54bWx9fSIsICJ7ey51c2Vycy50YWJsZS5hcGl9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsiQlVMSyIsICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIsICJ7ey5tYXBwaW5nLnRhYmxlLmxvZ299fSIsICJ7ey5tYXBwaW5nLnRhYmxlLmNoYW5uZWxOYW1lfX0iLCAie3subWFwcGluZy50YWJsZS5wbGF5bGlzdH19IiwgInt7Lm1hcHBpbmcudGFibGUuZ3JvdXBUaXRsZX19IiwgInt7Lm1hcHBpbmcudGFibGUueG1sdHZGaWxlfX0iLCAie3subWFwcGluZy50YWJsZS54bWx0dklEfX0iXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubWVudUtleSwgdGhpcy50YWJsZUhlYWRlcik7CiAgICB9Cn0KY2xhc3MgQ29udGVudCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudCI7CiAgICAgICAgdGhpcy5IZWFkZXJJRCA9ICJwb3B1cF9oZWFkZXIiOwogICAgICAgIHRoaXMuRm9vdGVySUQgPSAicG9wdXBfZm9vdGVyIjsKICAgICAgICB0aGlzLlRhYmxlSUQgPSAiY29udGVudF90YWJsZSI7CiAgICAgICAgdGhpcy5JbmFjdGl2ZVRhYmxlSUQgPSAiaW5hY3RpdmVfY29udGVudF90YWJsZSI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzcyA9ICJjb250ZW50X3RhYmxlX2hlYWRlciI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzc0luYWN0aXZlID0gImluYWN0aXZlX2NvbnRlbnRfdGFibGVfaGVhZGVyIjsKICAgICAgICB0aGlzLmludGVyYWN0aW9uSUQgPSAiY29udGVudC1pbnRlcmFjdGlvbiI7CiAgICB9CiAgICBjcmVhdGVIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDMiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSFIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlQlIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmludGVyYWN0aW9uSUQpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlRElWKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuRGl2SUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVUQUJMRSgpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3RhYmxlJyk7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuVGFibGVJRDsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3M7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRBQkxFKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKTsKICAgICAgICBlbGVtZW50LmlkID0gdGhpcy5JbmFjdGl2ZVRhYmxlSUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3NJbmFjdGl2ZTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgibTN1IiwgImhkaHIiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ0dW5lciJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJsYXN0LnVwZGF0ZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJwcm92aWRlci5hdmFpbGFiaWxpdHkiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsidHlwZSJdLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bImdyb3VwLnRpdGxlIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsidHZnLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICBkZWxldGUgU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXVstMV07CiAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXTsKICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgdHIuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiJyArIGRhdGFba2V5XVsidHlwZSJdICsgJyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtrZXldWyJ0eXBlIl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gInt7LmZpbHRlci5jdXN0b219fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICJ7ey5maWx0ZXIuZ3JvdXB9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImZpbHRlciJdOwogICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgieG1sdHYiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsibGFzdC51cGRhdGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsicHJvdmlkZXIuYXZhaWxhYmlsaXR5Il07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsieG1sdHYuY2hhbm5lbHMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiY29tcGF0aWJpbGl0eSJdWyJ4bWx0di5wcm9ncmFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0cik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGVzID0gbmV3IEFycmF5KCJ1c2VycyIpOwogICAgICAgICAgICAgICAgZmlsZVR5cGVzLmZvckVhY2goZmlsZVR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbZmlsZVR5cGVdOwogICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIicgKyBmaWxlVHlwZSArICciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiZGF0YSJdWyJ1c2VybmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIioqKioqKiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ud2ViIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLnBtcyJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsiZGF0YSJdWyJhdXRoZW50aWNhdGlvbi5tM3UiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIuKckyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIi0iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ueG1sIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLmFwaSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVsawogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJCVUxLIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbnVtbWVyCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIklOUFVUQ0hBTk5FTCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IGNoYW5nZUNoYW5uZWxOdW1iZXIoIicgKyBrZXkgKyAnIiwgdGhpcyknKQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvZ28KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiSU1HIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pbWFnZVVSTCA9IGRhdGFba2V5XVsidHZnLWxvZ28iXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0cyA9IGRhdGFba2V5XVsieC1jYXRlZ29yeSJdLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAiY2F0ZWdvcnkiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0Q29sb3JTZXR0aW5ncyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllc0NvbG9ycyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzX3NwbGl0ID0gY2F0Q29sb3JTZXR0aW5ncy5zcGxpdCgifCIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yc19zcGxpdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHNDb2xvcl9zcGxpdCA9IGNvbG9yc19zcGxpdFtpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdHNDb2xvcl9zcGxpdFswXSA9PSBjYXRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0NvbG9yID0gY2F0c0NvbG9yX3NwbGl0WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtbmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXlsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL2NlbGwudmFsdWUgPSBkYXRhW2tleV1bIl9maWxlLm0zdS5uYW1lIl0gCiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJfZmlsZS5tM3UuaWQiXSwgIm0zdSIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3J1cHBlIChncm91cC10aXRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtZ3JvdXAtdGl0bGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIEthbmFsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB2YWx1ZSA9IHN0ci5zdWJzdHJpbmcoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV1bIngtbWFwcGluZyJdLnN1YnN0cmluZygwLCAyMCkgKyAiLi4uIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICBhbGVydCgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGFibGUgY29udGVudCAobWVudUtleSk6IiwgbWVudUtleSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvd3M7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1bGsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMSyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG51bW1lcgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTlBVVENIQU5ORUwiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LWNoYW5uZWxJRCJdICogMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy90ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogY2hhbmdlQ2hhbm5lbE51bWJlcigiJyArIGtleSArICciLCB0aGlzKScpCiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9nbwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTUciOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmltYWdlVVJMID0gZGF0YVtrZXldWyJ0dmctbG9nbyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbmFtZQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzID0gZGF0YVtrZXldWyJ4LWNhdGVnb3J5Il0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9ICJjYXRlZ29yeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRDb2xvclNldHRpbmdzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzQ29sb3JzIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNfc3BsaXQgPSBjYXRDb2xvclNldHRpbmdzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzX3NwbGl0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0c0NvbG9yX3NwbGl0ID0gY29sb3JzX3NwbGl0W2ldLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0c0NvbG9yX3NwbGl0WzBdID09IGNhdHNbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzQ29sb3IgPSBjYXRzQ29sb3Jfc3BsaXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1uYW1lIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGxheWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiX2ZpbGUubTN1Lm5hbWUiXSAKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShkYXRhW2tleV1bIl9maWxlLm0zdS5pZCJdLCAibTN1IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBHcnVwcGUgKGdyb3VwLXRpdGxlKQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1ncm91cC10aXRsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIERhdGVpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngteG1sdHYtZmlsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MVFYgS2FuYWwKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHZhbHVlID0gc3RyLnN1YnN0cmluZygxLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtrZXldWyJ4LW1hcHBpbmciXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl0uc3Vic3RyaW5nKDAsIDIwKSArICIuLi4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNldHRpbmdzIjoKICAgICAgICAgICAgICAgIGFsZXJ0KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJUYWJsZSBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcm93czsKICAgIH0KfQpjbGFzcyBDZWxsIHsKICAgIGNyZWF0ZUNlbGwoKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICBpZiAodGhpcy5jaGlsZCA9PSB0cnVlKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50OwogICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY2hpbGRUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJQIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5jbGFzc0NvbG9yOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVRDSEFOTkVMIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2c2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVyKHRoaXMpIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMSyI6CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAiY2hlY2tib3giOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMS19IRUFEIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiYnVsayBoaWRlQnVsayI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCkiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCdpbmFjdGl2ZV9jb250ZW50X3RhYmxlJykiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJJTUciOgogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY2hpbGRUeXBlKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgdGhpcy5pbWFnZVVSTCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VVUkwgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm9uZXJyb3IiLCAiamF2YXNjcmlwdDogdGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9JyciKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmVycm9yPSJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nbWlzc2luZy5naWYnOyIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vbmNsaWNrID09IHRydWUpIHsKICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgdGhpcy5vbmNsaWNrRnVua3Rpb24pOwogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSAicG9pbnRlciI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRkQ2xhc3NOYW1lICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSB0aGlzLnRkQ2xhc3NOYW1lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGQ7CiAgICB9Cn0KY2xhc3MgU2hvd0NvbnRlbnQgZXh0ZW5kcyBDb250ZW50IHsKICAgIGNvbnN0cnVjdG9yKG1lbnVJRCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51SUQgPSBtZW51SUQ7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdHlwZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBzaG93KCkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgLy8gQWx0ZW4gSW5oYWx0IGzDtnNjaGVuCiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIHNob3dQcmV2aWV3KGZhbHNlKTsKICAgICAgICAvLyDDnGJlcnNjaHJpZnQKICAgICAgICB2YXIgcG9wdXBfaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5IZWFkZXJJRCk7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gbWVudUl0ZW1zW3RoaXMubWVudUlEXS5oZWFkbGluZTsKICAgICAgICB2YXIgbWVudUtleSA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0ubWVudUtleTsKICAgICAgICB2YXIgaCA9IHRoaXMuY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpOwogICAgICAgIHZhciBleGlzdGluZ0hlYWRlciA9IHBvcHVwX2hlYWRlci5xdWVyeVNlbGVjdG9yKCdoMycpOwogICAgICAgIGlmIChleGlzdGluZ0hlYWRlcikgewogICAgICAgICAgICBwb3B1cF9oZWFkZXIucmVwbGFjZUNoaWxkKGgsIGV4aXN0aW5nSGVhZGVyKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcHVwX2hlYWRlci5hcHBlbmRDaGlsZChoKTsKICAgICAgICB9CiAgICAgICAgdmFyIGhyID0gdGhpcy5jcmVhdGVIUigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChocik7CiAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICB2YXIgZGl2ID0gdGhpcy5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgIHZhciBpbnRlcmFjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaW50ZXJhY3Rpb25JRCk7CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiLSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgicGxheWxpc3QiKScpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICdtb2RhbCcpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcsICcjcG9wdXAnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsIC0xKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoImZpbHRlciIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdG9nZ2xlJywgJ21vZGFsJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0JywgJyNwb3B1cCcpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAieG1sdHYiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInhtbHR2IiknKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1icy10b2dnbGUnLCAnbW9kYWwnKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnLCAnI3BvcHVwJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJ1c2VycyIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgidXNlcnMiKScpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICdtb2RhbCcpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcsICcjcG9wdXAnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCAiIiknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uYnVsa0VkaXR9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGJ1bGtFZGl0KCknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoInNlYXJjaCIsICJzZWFyY2giLCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInNlYXJjaE1hcHBpbmciKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suYnV0dG9uLnNlYXJjaH19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAic2VhcmNoIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogc2VhcmNoSW5NYXBwaW5nKCknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVTZXR0aW5ncygpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5iYWNrdXB9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGJhY2t1cCgpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5yZXN0b3JlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiByZXN0b3JlKCk7Jyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpOwogICAgICAgICAgICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImlkIiwgImJveC13cmFwcGVyIik7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQod3JhcHBlcik7CiAgICAgICAgICAgICAgICB0aGlzLkRpdklEID0gImNvbnRlbnRfc2V0dGluZ3MiOwogICAgICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5jcmVhdGVESVYoKTsKICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgc2hvd1NldHRpbmdzKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibG9nIjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ucmVzZXRMb2dzfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiByZXNldExvZ3MoKTsnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgICAgIGRvYy5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKICAgICAgICAgICAgICAgIHRoaXMuRGl2SUQgPSAiY29udGVudF9sb2ciOwogICAgICAgICAgICAgICAgdmFyIGxvZ3MgPSB0aGlzLmNyZWF0ZURJVigpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChsb2dzKTsKICAgICAgICAgICAgICAgIHNob3dMb2dzKHRydWUpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxvZ291dCI6CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJUb2tlbj0gOyBleHBpcmVzID0gVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU2hvdyBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBUYWJlbGxlIGVyc3RlbGxlbiAoZmFsbHMgYmVuw7Z0aWd0KQogICAgICAgIHZhciB0YWJsZUhlYWRlciA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0udGFibGVIZWFkZXI7CiAgICAgICAgaWYgKHRhYmxlSGVhZGVyLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICAgICAgZG9jLmFwcGVuZENoaWxkKHdyYXBwZXIpOwogICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgdmFyIHRhYmxlID0gdGhpcy5jcmVhdGVUQUJMRSgpOwogICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRhYmxlKTsKICAgICAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMuY3JlYXRlVGFibGVSb3coKTsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgLy8gS29wZnplaWxlIGRlciBUYWJsbGUKICAgICAgICAgICAgdGFibGVIZWFkZXIuZm9yRWFjaChlbGVtZW50ID0+IHsKICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZWxlbWVudDsKICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJCVUxLIikgewogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIkJVTEtfSEVBRCI7CiAgICAgICAgICAgICAgICAgICAgY2VsbC5hY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChtZW51S2V5ID09ICJtYXBwaW5nIikgewogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDEpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudGRDbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoMyk7IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDQpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmdyb3VwVGl0bGV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDUpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKGhlYWRlcik7CiAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuY3JlYXRlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICByb3dzLmZvckVhY2godHIgPT4gewogICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGJyID0gdGhpcy5jcmVhdGVCUigpOwogICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoYnIpOwogICAgICAgICAgICAvLyBDcmVhdGUgaW5hY3RpdmUgY2hhbm5lbHMgZm9yIG1hcHBpbmcKICAgICAgICAgICAgaWYgKG1lbnVLZXkgPT0gIm1hcHBpbmciKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5hY3RpdmV0YWJsZSA9IHRoaXMuY3JlYXRlSW5hY3RpdmVUQUJMRSgpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbmFjdGl2ZXRhYmxlKTsKICAgICAgICAgICAgICAgIHZhciBoZWFkZXIgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVSb3coKTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEtvcGZ6ZWlsZSBkZXIgVGFibGxlCiAgICAgICAgICAgICAgICB0YWJsZUhlYWRlci5mb3JFYWNoKGVsZW1lbnQgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZWxlbWVudDsKICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAiQlVMSyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMS19IRUFEIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5hY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobWVudUtleSA9PSAibWFwcGluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUuY2hOb319IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgxLCAnaW5hY3RpdmVfY29udGVudF90YWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnRkQ2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgzLCAnaW5hY3RpdmVfY29udGVudF90YWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNCwgJ2luYWN0aXZlX2NvbnRlbnRfdGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmdyb3VwVGl0bGV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNSwgJ2luYWN0aXZlX2NvbnRlbnRfdGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICAgICAgcm93cy5mb3JFYWNoKHRyID0+IHsKICAgICAgICAgICAgICAgICAgICBpbmFjdGl2ZXRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCBmYWxzZSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEsICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgICAgIHNob3dQcmV2aWV3KHRydWUpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgfQp9CmZ1bmN0aW9uIFBhZ2VSZWFkeSgpIHsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCJnZXRTZXJ2ZXJDb25maWciKTsKICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7CiAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgdXBkYXRlTG9nKCk7CiAgICB9LCAxMDAwMCk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gY3JlYXRlTGF5b3V0KCkgewogICAgLy8gQ2xpZW50IEluZm8KICAgIHZhciBvYmogPSBTRVJWRVJbImNsaWVudEluZm8iXTsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhvYmopOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pLnZhbHVlID0gb2JqW2tleXNbaV1dOwogICAgICAgIH0KICAgIH0KICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tbWVudSIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gTWVuw7wgZXJzdGVsbGVuCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1tZW51IikuaW5uZXJIVE1MID0gIiI7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgIG1lbnVJdGVtc1tpXS5pZCA9IGk7CiAgICAgICAgc3dpdGNoIChtZW51SXRlbXNbaV1bIm1lbnVLZXkiXSkgewogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgIGNhc2UgImxvZ291dCI6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBvcGVuVGhpc01lbnUoZWxlbWVudCkgewogICAgdmFyIGlkID0gZWxlbWVudC5pZDsKICAgIHZhciBjb250ZW50ID0gbmV3IFNob3dDb250ZW50KGlkKTsKICAgIGNvbnRlbnQuc2hvdygpOwogICAgZW5hYmxlR3JvdXBTZWxlY3Rpb24oIi5idWxrIik7CiAgICByZXR1cm47Cn0KY2xhc3MgUG9wdXBXaW5kb3cgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gInBvcHVwLWN1c3RvbSI7CiAgICAgICAgdGhpcy5JbnRlcmFjdGlvbklEID0gImludGVyYWN0aW9uIjsKICAgICAgICB0aGlzLmRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICB9CiAgICBjcmVhdGVUaXRsZSh0aXRsZSkgewogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdGQuY2xhc3NOYW1lID0gImxlZnQiOwogICAgICAgIHRkLmlubmVySFRNTCA9IHRpdGxlICsgIjoiOwogICAgICAgIHJldHVybiB0ZDsKICAgIH0KICAgIGNyZWF0ZUNvbnRlbnQoZWxlbWVudCkgewogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgcmV0dXJuIHRkOwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImlkIiwgInBvcHVwLWludGVyYWN0aW9uIik7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJpbnRlcmFjdGlvbiI7CiAgICAgICAgdGhpcy5kb2MuYXBwZW5kQ2hpbGQoZGl2KTsKICAgIH0KfQpjbGFzcyBQb3B1cENvbnRlbnQgZXh0ZW5kcyBQb3B1cFdpbmRvdyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgIHRoaXMudGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQUJMRSIpOwogICAgfQogICAgY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpIHsKICAgICAgICB0aGlzLmRvYy5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkgzIik7CiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBoZWFkbGluZS50b1VwcGVyQ2FzZSgpOwogICAgICAgIHRoaXMuZG9jLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIC8vIFRhYmVsbGUgZXJzdGVsbGVuCiAgICAgICAgdGhpcy50YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdGhpcy5kb2MuYXBwZW5kQ2hpbGQodGhpcy50YWJsZSk7CiAgICB9CiAgICBhcHBlbmRSb3codGl0bGUsIGVsZW1lbnQpIHsKICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIC8vIEJlemVpY2hudW5nCiAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlVGl0bGUodGl0bGUpKTsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGVudAogICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29udGVudChlbGVtZW50KSk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB2YWx1ZSA9ICIiOwogICAgICAgIH0KICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCB0eXBlKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOwogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIGNyZWF0ZUNoZWNrYm94KG5hbWUpIHsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJjaGVja2JveCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIG5hbWUpOwogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIGNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIHNldCwgZGJLZXkpIHsKICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIik7CiAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgibmFtZSIsIGRiS2V5KTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlc1tpXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0W2ldOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNldCAhPSAiIikgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSBzZXQ7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9IHZhbHVlc1swXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGVjdDsKICAgIH0KICAgIHNlbGVjdE9wdGlvbihzZWxlY3QsIHZhbHVlKSB7CiAgICAgICAgLy9zZWxlY3Quc2VsZWN0ZWRPcHRpb25zID0gdmFsdWUKICAgICAgICB2YXIgcyA9IHNlbGVjdDsKICAgICAgICBzLm9wdGlvbnNbcy5zZWxlY3RlZEluZGV4XS52YWx1ZSA9IHZhbHVlOwogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9CiAgICBkZXNjcmlwdGlvbih2YWx1ZSkgewogICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHNwYW4uaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29udGVudChzcGFuKSk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9CiAgICAvLyBJbnRlcmFrdGlvbgogICAgYWRkSW50ZXJhY3Rpb24oZWxlbWVudCkgewogICAgICAgIHZhciBpbnRlcmFjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3B1cC1pbnRlcmFjdGlvbiIpOwogICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgfQp9CmZ1bmN0aW9uIG9wZW5Qb3BVcChkYXRhVHlwZSwgZWxlbWVudCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgaWQ7CiAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKICAgICAgICBjYXNlIHVuZGVmaW5lZDoKICAgICAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsRGF0YSgiZmlsdGVyIiwgaWQpOwogICAgICAgICAgICAgICAgICAgIGRhdGFbInR5cGUiXSA9ICJncm91cC10aXRsZSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbERhdGEoImZpbHRlciIsIGlkKTsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiY3VzdG9tLWZpbHRlciI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGRhdGFbImlkLnByb3ZpZGVyIl0gPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgZGF0YVsidHlwZSJdID0gZGF0YVR5cGU7CiAgICAgICAgICAgICAgICAgICAgaWQgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgaWQgPSBlbGVtZW50LmlkOwogICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxEYXRhKGRhdGFUeXBlLCBpZCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgdmFyIGNvbnRlbnQgPSBuZXcgUG9wdXBDb250ZW50KCk7CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5wbGF5bGlzdC5wbGF5bGlzdFR5cGUudGl0bGV9fSIpOwogICAgICAgICAgICAvLyBUeXBlCiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJNM1UiLCAiSERIb21lUnVuIl07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnbTN1JykiLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdoZGhyJykiXTsKICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIiIsICJ0eXBlIik7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoImlkIiwgInR5cGUiKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogY2hhbmdlQnV0dG9uQWN0aW9uKHRoaXMsICJuZXh0IiwgIm9uY2xpY2siKScpOyAvLyBjaGFuZ2VCdXR0b25BY3Rpb24KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR5cGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBXZWl0ZXIKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgIm5leHQiLCAie3suYnV0dG9uLm5leHR9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtM3UiKScpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgJ25leHQnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBOYW1lCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBVUkwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbGUuc291cmNlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZmlsZU0zVS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5maWxlTTNVLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFR1bmVyCiAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImJ1ZmZlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25mb2N1cyIsICJqYXZhc2NyaXB0OiByZXR1cm47Iik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgaWYgKGRhdGFbZGJLZXldID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGFbZGJLZXldID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAibm90QXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0LnR1bmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJtM3UiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJiYWNrIiwgInt7LmJ1dHRvbi5iYWNrfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInBsYXlsaXN0IiknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibTN1IiwgIicgKyBpZCArICciLCBmYWxzZSwgMSknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJtM3UiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAwKScpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiaGRociI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBOYW1lCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBVUkwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbGUuc291cmNlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZmlsZUhESFIucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZmlsZUhESFIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVHVuZXIKICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR1bmVyIjsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGFbZGJLZXldLCBkYktleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmZvY3VzIiwgImphdmFzY3JpcHQ6IHJldHVybjsiKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICBpZiAoZGF0YVtkYktleV0gPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YVtkYktleV0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInJlYWRvbmx5IiwgInRydWUiKTsKICAgICAgICAgICAgICAgIGlucHV0LmNsYXNzTmFtZSA9ICJub3RBdmFpbGFibGUiOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR1bmVyLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sucGxheWxpc3QudHVuZXIuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEzDtnNjaGVuCiAgICAgICAgICAgIGlmIChkYXRhWyJpZC5wcm92aWRlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImRlbGV0ZSIsICJ7ey5idXR0b24uZGVsZXRlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJoZGhyIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJiYWNrIiwgInt7LmJ1dHRvbi5iYWNrfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInBsYXlsaXN0IiknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiaGRociIsICInICsgaWQgKyAnIiwgZmFsc2UsIDEpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiaGRociIsICInICsgaWQgKyAnIiwgZmFsc2UsIDApJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gVHlwZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAidHlwZSI7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJNM1U6ICIgKyAie3suZmlsdGVyLnR5cGUuZ3JvdXBUaXRsZX19IiwgIlRocmVhZGZpbjogIiArICJ7ey5maWx0ZXIudHlwZS5jdXN0b21GaWx0ZXJ9fSJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJqYXZhc2NyaXB0OiBvcGVuUG9wVXAoJ2dyb3VwLXRpdGxlJykiLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdjdXN0b20tZmlsdGVyJykiXTsKICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnZ3JvdXAtdGl0bGUnKSIsIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgJ2phdmFzY3JpcHQ6IGNoYW5nZUJ1dHRvbkFjdGlvbih0aGlzLCAibmV4dCIsICJvbmNsaWNrIik7Jyk7IC8vIGNoYW5nZUJ1dHRvbkFjdGlvbgogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLnR5cGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBXZWl0ZXIKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgIm5leHQiLCAie3suYnV0dG9uLm5leHR9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJncm91cC10aXRsZSIpJyk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAnbmV4dCcpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5maWx0ZXIuY3VzdG9tfX0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5maWx0ZXIuZ3JvdXB9fSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIE5hbWUgICAgICAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIm5hbWUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmRlc2NyaXB0aW9uLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBUeXAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR5cGUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJoaWRkZW4iLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygiIiwgaW5wdXQpOwogICAgICAgICAgICB2YXIgZmlsdGVyVHlwZSA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgICAgICAgICAgICAgIC8vIEdyb8OfLSBLbGVpbnNjaHJlaWJ1bmcgYmVhY2h0ZW4KICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiY2FzZVNlbnNpdGl2ZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2FzZVNlbnNpdGl2ZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlcnJlZ2VsIChCZW51dHplcmRlZmluaWVydCkKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiZmlsdGVyIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5maWx0ZXJSdWxlLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmZpbHRlclJ1bGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KGRiS2V5ICsgIiAiICsgZmlsdGVyVHlwZSkKICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgYmFzaWVyZW5kIGF1ZiBkZW4gR3J1cHBlbiBpbiBkZXIgTTNVCiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbHRlciI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3Vwc00zVSA9IGdldExvY2FsRGF0YSgibTN1R3JvdXBzIiwgIiIpOwogICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gZ3JvdXBzTTNVWyJ0ZXh0Il07CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGdyb3Vwc00zVVsidmFsdWUiXTsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5maWx0ZXJHcm91cC50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5maWx0ZXIuZmlsdGVyR3JvdXAuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAgICAgICAgIC8vIEdyb8OfLSBLbGVpbnNjaHJlaWJ1bmcgYmVhY2h0ZW4KICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiY2FzZVNlbnNpdGl2ZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2FzZVNlbnNpdGl2ZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJpbmNsdWRlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5pbmNsdWRlLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmluY2x1ZGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5maWx0ZXIuaW5jbHVkZS5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImV4Y2x1ZGUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmV4Y2x1ZGUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuZXhjbHVkZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5leGNsdWRlLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTmFtZSAgICAgIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAic3RhcnRpbmdOdW1iZXIiOwogICAgICAgICAgICBpZiAoZGF0YVtkYktleV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksICIxMDAwIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuc3RhcnRpbmdudW1iZXIucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLnN0YXJ0aW5nbnVtYmVyLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5zdGFydGluZ251bWJlci5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWNhdGVnb3J5IjsKICAgICAgICAgICAgdmFyIHRleHQgPSBbIi0iXTsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiIl07CiAgICAgICAgICAgIHZhciBlcGdDYXRlZ29yaWVzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzIl07CiAgICAgICAgICAgIHZhciBjYXRlZ29yaWVzID0gZXBnQ2F0ZWdvcmllcy5zcGxpdCgifCIpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBjYXQgPSBjYXRlZ29yaWVzW2ldOwogICAgICAgICAgICAgICAgaWYgKGNhdCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjYXRfc3BsaXQgPSBjYXQuc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goY2F0X3NwbGl0WzBdKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChjYXRfc3BsaXRbMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGFbZGJLZXldLCBkYktleSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2F0ZWdvcnkudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImRlbGV0ZSIsICJ7ey5idXR0b24uZGVsZXRlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImZpbHRlciIsICInICsgaWQgKyAnIiwgdHJ1ZSwgMCknKTsKICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJmaWx0ZXIiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAwKScpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gTmFtZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2Lm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sueG1sdHYuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYuZGVzY3JpcHRpb24udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVVJMCiAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWxlLnNvdXJjZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2LmZpbGVYTUxUVi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5maWxlWE1MVFYudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgieG1sdHYiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgieG1sdHYiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAxKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoInhtbHR2IiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3subWFpbk1lbnUuaXRlbS51c2Vyc319Iik7CiAgICAgICAgICAgIC8vIEJlbnV0emVybmFtZSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInVzZXJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sudXNlcnMudXNlcm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMudXNlcm5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gTmV1ZXMgUGFzc3dvcnQgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJwYXNzd29yZCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInBhc3N3b3JkIiwgZGJLZXksICIiKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey51c2Vycy5wYXNzd29yZC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy5wYXNzd29yZC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXN0w6R0aWd1bmcgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJjb25maXJtIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgicGFzc3dvcmQiLCBkYktleSwgIiIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnVzZXJzLmNvbmZpcm0ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMuY29uZmlybS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgV0VCCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi53ZWIiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBpZiAoZGF0YVsiZGVmYXVsdFVzZXIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAiamF2YXNjcmlwdDogcmV0dXJuIGZhbHNlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLndlYi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgUE1TCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5wbXMiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMucG1zLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlcmVjaHRpZ3VuZyBNM1UKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImF1dGhlbnRpY2F0aW9uLm0zdSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy5tM3UudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIFhNTAogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24ueG1sIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLnhtbC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgQVBJCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5hcGkiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMuYXBpLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImRlZmF1bHRVc2VyIl0gIT0gdHJ1ZSAmJiBpZCAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCInICsgZGF0YVR5cGUgKyAnIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiJyArIGRhdGFUeXBlICsgJyIsICInICsgaWQgKyAnIiwgImZhbHNlIik7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iKTsKICAgICAgICAgICAgaWYgKEJVTEtfRURJVCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1jaGFubmVscy1zdGFydCI7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgdmFsdWUgdG8gdGhlIGZpcnN0IHNlbGVjdGVkIGNoYW5uZWwKICAgICAgICAgICAgICAgIHZhciBjaGFubmVscyA9IGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKTsKICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtjaGFubmVsc1swXV07CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNoYW5uZWwgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIGNoYW5uZWxbIngtY2hhbm5lbElEIl0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICdqYXZhc2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVycygiJyArIGNoYW5uZWxzICsgJyIpOycpOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbEdyb3VwU3RhcnQudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBa3RpdiAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtYWN0aXZlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaW5wdXQuaWQgPSAiYWN0aXZlIjsKICAgICAgICAgICAgLy9pbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIikKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0b2dnbGVDaGFubmVsU3RhdHVzKCciICsgaWQgKyAiJywgdGhpcykiKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuYWN0aXZlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEthbmFsbmFtZSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtbmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGlmIChCVUxLX0VESVQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgaW5wdXQuc3R5bGUuYm9yZGVyID0gInNvbGlkIDFweCByZWQiOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbE5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbihkYXRhWyJuYW1lIl0pOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3subWFwcGluZy5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuZGVzY3JpcHRpb24udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJ1bmcgZGVzIEthbmFsbmFtZW5zCiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KCJfdXVpZC5rZXkiKSkgewogICAgICAgICAgICAgICAgaWYgKGRhdGFbIl91dWlkLmtleSJdICE9ICIiKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtdXBkYXRlLWNoYW5uZWwtbmFtZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy51cGRhdGVDaGFubmVsTmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIExvZ28gVVJMIChLYW5hbCkgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dmctbG9nbyI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiY2hhbm5lbC1pY29uIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmNoYW5uZWxMb2dvLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVydW5nIGRlcyBLYW5hbGxvZ29zCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXVwZGF0ZS1jaGFubmVsLWljb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInVwZGF0ZS1pY29uIik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoYW5nZUNoYW5uZWxMb2dvKCciICsgaWQgKyAiJyk7Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLnVwZGF0ZUNoYW5uZWxMb2dvLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEVyd2VpdGVybiBkZXIgRVBHIEthdGVnb3JpZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1jYXRlZ29yeSI7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyItIl07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIiJdOwogICAgICAgICAgICB2YXIgZXBnQ2F0ZWdvcmllcyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllcyJdOwogICAgICAgICAgICB2YXIgY2F0ZWdvcmllcyA9IGVwZ0NhdGVnb3JpZXMuc3BsaXQoInwiKTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgY2F0ID0gY2F0ZWdvcmllc1tpXTsKICAgICAgICAgICAgICAgIGlmIChjYXQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2F0X3NwbGl0ID0gY2F0LnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGNhdF9zcGxpdFswXSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goY2F0X3NwbGl0WzFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5lcGdDYXRlZ29yeS50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgLy8gTTNVIEdydXBwZW50aXRlbAogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1ncm91cC10aXRsZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLm0zdUdyb3VwVGl0bGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgaWYgKGRhdGFbImdyb3VwLXRpdGxlIl0gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKGRhdGFbImdyb3VwLXRpdGxlIl0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFhNTFRWIERhdGVpCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXhtbHR2LWZpbGUiOwogICAgICAgICAgICB2YXIgeG1sRmlsZSA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSB4bWx0di5nZXRGaWxlcyhkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBkYktleSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoImlkIiwgInBvcHVwLXhtbHR2Iik7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBzZXRYbWx0dkNoYW5uZWwoJyIgKyBpZCArICInLHRoaXMsICciICsgZGF0YVsieC1tYXBwaW5nIl0gKyAiJyk7Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLnhtbHR2RmlsZS50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgdmFyIGZpbGUgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgLy8gWE1MVFYgTWFwcGluZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1tYXBwaW5nIjsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICBjb25zdCBjdXJyZW50WG1sVHZJZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb25zdCBbeG1sVHZJZENvbnRhaW5lciwgeG1sVHZJZElucHV0LCB4bWxUdklkRGF0YWxpc3RdID0geG1sdHYubmV3WG1sVHZJZFBpY2tlcih4bWxGaWxlLCBjdXJyZW50WG1sVHZJZCk7CiAgICAgICAgICAgIHhtbFR2SWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyJyk7CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAneC1tYXBwaW5nJyk7IC8vIFNob3VsZCBzdGF5IHgtbWFwcGluZyBhcyBpdCB3aWxsIGJlIHVzZWQgaW4gZG9uZVBvcHVwRGF0YSB0byBtYWtlIGEgc2VydmVyIHJlcXVlc3QKICAgICAgICAgICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWlucHV0Jyk7CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgYGphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGVja1htbHR2Q2hhbm5lbCgnJHtpZH0nLCB0aGlzLCAnJHt4bWxGaWxlfScpO2ApOwogICAgICAgICAgICB4bWxUdklkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgICAgICAgICAgLy8gc29ydFNlbGVjdCh4bWxUdklkRGF0YWxpc3QpOyAvLyBUT0RPOiBCZXR0ZXIgc29ydCBiZWZvcmUgYWRkaW5nCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCd7ey5tYXBwaW5nLnhtbHR2Q2hhbm5lbC50aXRsZX19JywgeG1sVHZJZENvbnRhaW5lcik7CiAgICAgICAgICAgIC8vIEV4dHJhIFBQViBEYXRhCiAgICAgICAgICAgIGlmIChjdXJyZW50WG1sVHZJZCA9PSAiUFBWIikgewogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtcHB2LWV4dHJhIjsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJwcHYtZXh0cmEiKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLnBwdmV4dHJhLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtYmFja3VwLWNoYW5uZWwtMSI7CiAgICAgICAgICAgIHZhciB4bWx0diA9IG5ldyBYTUxUVkZpbGUoKTsKICAgICAgICAgICAgY29uc3QgYmFja3VwMVhtbFR2SWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29uc3QgW3htbFR2QmFja3VwMUlkQ29udGFpbmVyLCB4bWxUdkJhY2t1cDFJZElucHV0LCB4bWxUdkJhY2t1cDFJZERhdGFsaXN0XSA9IHhtbHR2Lm5ld1htbFR2SWRQaWNrZXIoeG1sRmlsZSwgYmFja3VwMVhtbFR2SWQpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXItMScpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZElucHV0LnNldEF0dHJpYnV0ZSgnbGlzdCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYktleSk7IC8vIFNob3VsZCBzdGF5IHgtbWFwcGluZyBhcyBpdCB3aWxsIGJlIHVzZWQgaW4gZG9uZVBvcHVwRGF0YSB0byBtYWtlIGEgc2VydmVyIHJlcXVlc3QKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgImJhY2t1cC1jaGFubmVsLTEiKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgYGphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGVja1htbHR2Q2hhbm5lbCgnJHtpZH0nLCB0aGlzLCAnJHt4bWxGaWxlfScpO2ApOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0LWJhY2t1cDEnKTsKICAgICAgICAgICAgLy8gc29ydFNlbGVjdCh4bWxUdklkRGF0YWxpc3QpOyAvLyBUT0RPOiBCZXR0ZXIgc29ydCBiZWZvcmUgYWRkaW5nCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCd7ey5tYXBwaW5nLmJhY2t1cENoYW5uZWwxLnRpdGxlfX0nLCB4bWxUdkJhY2t1cDFJZENvbnRhaW5lcik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWJhY2t1cC1jaGFubmVsLTIiOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGJhY2t1cDJYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdkJhY2t1cDJJZENvbnRhaW5lciwgeG1sVHZCYWNrdXAySWRJbnB1dCwgeG1sVHZCYWNrdXAySWREYXRhbGlzdF0gPSB4bWx0di5uZXdYbWxUdklkUGlja2VyKHhtbEZpbGUsIGJhY2t1cDJYbWxUdklkKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyLTInKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgZGJLZXkpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkSW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJiYWNrdXAtY2hhbm5lbC0yIik7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdC1iYWNrdXAyJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmJhY2t1cENoYW5uZWwyLnRpdGxlfX0iLCB4bWxUdkJhY2t1cDJJZENvbnRhaW5lcik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWJhY2t1cC1jaGFubmVsLTMiOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGJhY2t1cDNYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdkJhY2t1cDNJZENvbnRhaW5lciwgeG1sVHZCYWNrdXAzSWRJbnB1dCwgeG1sVHZCYWNrdXAzSWREYXRhbGlzdF0gPSB4bWx0di5uZXdYbWxUdklkUGlja2VyKHhtbEZpbGUsIGJhY2t1cDNYbWxUdklkKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyLTMnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgZGJLZXkpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJiYWNrdXAtY2hhbm5lbC0zIik7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdC1iYWNrdXAzJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmJhY2t1cENoYW5uZWwzLnRpdGxlfX0iLCB4bWxUdkJhY2t1cDNJZENvbnRhaW5lcik7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTG9nbyBob2NobGFkZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24udXBsb2FkTG9nb319Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiB1cGxvYWRMb2dvKCk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEZlcnRpZwogICAgICAgICAgICB2YXIgaWRzID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgIGlkcyA9IGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKTsKICAgICAgICAgICAgaWYgKGlkcy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgaWRzLnB1c2goaWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5kb25lfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGRvbmVQb3B1cERhdGEoIicgKyBkYXRhVHlwZSArICciLCAiJyArIGlkcyArICciLCAiZmFsc2UiKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgc2hvd1BvcFVwRWxlbWVudCgncG9wdXAtY3VzdG9tJyk7Cn0KY2xhc3MgWE1MVFZGaWxlIHsKICAgIGdldEZpbGVzKHNldCkgewogICAgICAgIHZhciBmaWxlSURzID0gZ2V0T2JqS2V5cyhTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXSk7CiAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgiLSIpOwogICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCItIik7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlSURzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChmaWxlSURzW2ldICE9ICJUaHJlYWRmaW4gRHVtbXkiKSB7CiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZmlsZUlEc1tpXSwgInhtbHR2IiwgImZpbGUudGhyZWFkZmluIikpOwogICAgICAgICAgICAgICAgdGV4dC5wdXNoKGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShmaWxlSURzW2ldLCAieG1sdHYiLCAibmFtZSIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGZpbGVJRHNbaV0pOwogICAgICAgICAgICAgICAgdGV4dC5wdXNoKGZpbGVJRHNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTRUxFQ1QiKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlc1tpXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0W2ldOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNldCAhPSAiIikgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSBzZXQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9CiAgICAvKioKICAgKiBAcGFyYW0geG1sVHZGaWxlIFhNTCBmaWxlIHBhdGggdG8gZ2V0IEVQRyBmcm9tLgogICAqIEBwYXJhbSBjdXJyZW50WG1sVHZJZCBDdXJyZW50IFhNTFRWIElEIHRvIHNldCBpbml0aWFsIGlucHV0IHZhbHVlIHRvLgogICAqIEByZXR1cm5zIEFycmF5IG9mLCBzZXF1ZW50aWFsbHk6CiAgICogMSkgQ29udGFpbmVyIG9mIHRoZSBwaWNrZXIuCiAgICogMikgSW5wdXQgZmllbGQgdG8gdHlwZSBhdCBhbmQgZ2V0IGNob2ljZSBmcm9tLgogICAqIDMpIERhdGFsaXN0IGNvbnRhaW5pbmcgZXZlcnkgb3B0aW9uLgogICAqLwogICAgbmV3WG1sVHZJZFBpY2tlcih4bWxUdkZpbGUsIGN1cnJlbnRYbWxUdklkKSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7CiAgICAgICAgLy8gSW5pdGlhbGx5LCBzZXQgdmFsdWUgdG8gJy0nIGlmIGlucHV0IGlzIGVtcHR5CiAgICAgICAgaW5wdXQudmFsdWUgPSAoY3VycmVudFhtbFR2SWQpID8gY3VycmVudFhtbFR2SWQgOiAnLSc7CiAgICAgICAgLy8gV2hlbiBpbnB1dCBpcyBmb2N1c2VkLCByZW1vdmUgJy0nIGZyb20gaXQKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIChldnQpID0+IHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gKHRhcmdldC52YWx1ZSA9PT0gJy0nKSA/ICcnIDogdGFyZ2V0LnZhbHVlOwogICAgICAgIH0pOwogICAgICAgIC8vIFdoZW4gaW5wdXQgbG9zZSBmb2N1cyBvciB0YWtlIGEgdmFsdWUsIGlmIGl0J3MgZW1wdHksIHNldCB2YWx1ZSB0byAnLScKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgc2V0RmFsbGJhY2tWYWx1ZSk7CiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc2V0RmFsbGJhY2tWYWx1ZSk7CiAgICAgICAgZnVuY3Rpb24gc2V0RmFsbGJhY2tWYWx1ZShldnQpIHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gKHRhcmdldC52YWx1ZSkgPyB0YXJnZXQudmFsdWUgOiAnLSc7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgY29uc3QgZGF0YWxpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkYXRhbGlzdCcpOwogICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJy0nKTsKICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gJy0nOwogICAgICAgIGRhdGFsaXN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgY29uc3QgZXBnID0gU0VSVkVSWyd4ZXBnJ11bJ3htbHR2TWFwJ11beG1sVHZGaWxlXTsKICAgICAgICBpZiAoZXBnKSB7CiAgICAgICAgICAgIGNvbnN0IHByb2dyYW1JZHMgPSBnZXRPd25PYmpQcm9wcyhlcGcpOwogICAgICAgICAgICBwcm9ncmFtSWRzLmZvckVhY2goKHByb2dyYW1JZCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgcHJvZ3JhbSA9IGVwZ1twcm9ncmFtSWRdOwogICAgICAgICAgICAgICAgaWYgKHByb2dyYW0uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXktbmFtZScpKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBwcm9ncmFtSWQpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBwcm9ncmFtWyJkaXNwbGF5LW5hbWUiXTsKICAgICAgICAgICAgICAgICAgICBkYXRhbGlzdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBwcm9ncmFtSWQpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSAnLSc7CiAgICAgICAgICAgICAgICAgICAgZGF0YWxpc3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkYXRhbGlzdCk7CiAgICAgICAgcmV0dXJuIFtjb250YWluZXIsIGlucHV0LCBkYXRhbGlzdF07CiAgICB9CiAgICBnZXRQcm9ncmFtcyhmaWxlLCBzZXQsIGFjdGl2ZSkgewogICAgICAgIC8vdmFyIGZpbGVJRHM6c3RyaW5nW10gPSBnZXRPYmpLZXlzKFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdKQogICAgICAgIHZhciB2YWx1ZXMgPSBnZXRPYmpLZXlzKFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdW2ZpbGVdKTsKICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgIHZhciBkaXNwbGF5TmFtZTsKICAgICAgICB2YXIgYWN0aXZlcyA9IGdldE9iaktleXMoU0VSVkVSWyJkYXRhIl1bIlN0cmVhbVByZXZpZXdVSSJdWyJhY3RpdmVTdHJlYW1zIl0pOwogICAgICAgIHZhciBhY3RpdmVfbGlzdCA9IG5ldyBBcnJheSgpOwogICAgICAgIGlmIChhY3RpdmUgPT0gdHJ1ZSkgewogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBuYW1lc19zcGxpdCA9IFNFUlZFUlsiZGF0YSJdWyJTdHJlYW1QcmV2aWV3VUkiXVsiYWN0aXZlU3RyZWFtcyJdW2FjdGl2ZXNbaV1dLnNwbGl0KCJbIik7CiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZSA9IG5hbWVzX3NwbGl0WzBdLnRyaW0oKTsKICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5TmFtZSAhPSAiIikgewogICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7ICJ2YWx1ZSI6IGRpc3BsYXlOYW1lLCAiZGlzcGxheSI6IGRpc3BsYXlOYW1lIH07CiAgICAgICAgICAgICAgICAgICAgYWN0aXZlX2xpc3QucHVzaChvYmplY3QpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdW2ZpbGVdW3ZhbHVlc1tpXV0uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXktbmFtZScpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZSA9IFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdW2ZpbGVdW3ZhbHVlc1tpXV1bImRpc3BsYXktbmFtZSJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSAiLSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ZXh0W2ldID0gZGlzcGxheU5hbWUgKyAiICgiICsgdmFsdWVzW2ldICsgIikiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRleHQudW5zaGlmdCgiLSIpOwogICAgICAgIHZhbHVlcy51bnNoaWZ0KCItIik7CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNFTEVDVCIpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7CiAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWVzW2ldKTsKICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IHRleHRbaV07CiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZV9saXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTsKICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBhY3RpdmVfbGlzdFtpXVsidmFsdWUiXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBhY3RpdmVfbGlzdFtpXVsiZGlzcGxheSJdOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNldCAhPSAiIikgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSBzZXQ7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxlY3QudmFsdWUgIT0gc2V0KSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9ICItIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGVjdDsKICAgIH0KfQpmdW5jdGlvbiBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZmlsZSwgZmlsZVR5cGUsIGtleSkgewogICAgaWYgKGZpbGUgPT0gIlRocmVhZGZpbiBEdW1teSIpIHsKICAgICAgICByZXR1cm4gZmlsZTsKICAgIH0KICAgIHZhciBmaWxlSUQ7CiAgICB2YXIgaW5kaWNhdG9yID0gZmlsZS5jaGFyQXQoMCk7CiAgICBzd2l0Y2ggKGluZGljYXRvcikgewogICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICBmaWxlVHlwZSA9ICJtM3UiOwogICAgICAgICAgICBmaWxlSUQgPSBmaWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJIIjoKICAgICAgICAgICAgZmlsZVR5cGUgPSAiaGRociI7CiAgICAgICAgICAgIGZpbGVJRCA9IGZpbGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlgiOgogICAgICAgICAgICBmaWxlVHlwZSA9ICJ4bWx0diI7CiAgICAgICAgICAgIGZpbGVJRCA9IGZpbGUuc3Vic3RyaW5nKDAsIGZpbGUubGFzdEluZGV4T2YoJy4nKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtmaWxlVHlwZV0uaGFzT3duUHJvcGVydHkoZmlsZUlEKSA9PSB0cnVlKSB7CiAgICAgICAgdmFyIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZmlsZVR5cGVdW2ZpbGVJRF07CiAgICAgICAgcmV0dXJuIGRhdGFba2V5XTsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBzZXRYbWx0dkNoYW5uZWwoZXBnTWFwSWQsIHhtbFR2RmlsZVNlbGVjdCkgewogICAgY29uc3QgeG1sVHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICBjb25zdCBuZXdYbWxUdkZpbGUgPSB4bWxUdkZpbGVTZWxlY3QudmFsdWU7CiAgICAvLyBSZW1vdmUgb2xkIFhNTFRWIElEIHNlbGVjdGlvbiBib3gKICAgIGNvbnN0IHhtbFR2SWRQaWNrZXJQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lcicpLnBhcmVudEVsZW1lbnQ7CiAgICB4bWxUdklkUGlja2VyUGFyZW50LmlubmVySFRNTCA9ICcnOwogICAgLy8gQ3JlYXRlIG5ldyBYTUxUViBJRCBzZWxlY3Rpb24gYm94CiAgICBjb25zdCB0dmdJZCA9IFNFUlZFUlsneGVwZyddWydlcGdNYXBwaW5nJ11bZXBnTWFwSWRdWyd0dmctaWQnXTsKICAgIGNvbnN0IFt4bWxUdklkQ29udGFpbmVyLCB4bWxUdklkSW5wdXQsIHhtbFR2SWREYXRhbGlzdF0gPSB4bWxUdi5uZXdYbWxUdklkUGlja2VyKG5ld1htbFR2RmlsZSwgdHZnSWQpOwogICAgeG1sVHZJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXInKTsKICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ3gtbWFwcGluZycpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItaW5wdXQnKTsKICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgYGphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGVja1htbHR2Q2hhbm5lbCgnJHtlcGdNYXBJZH0nLCB0aGlzLnZhbHVlLCAnJHtuZXdYbWxUdkZpbGV9Jyk7YCk7CiAgICB4bWxUdklkSW5wdXQuY2xhc3NMaXN0LmFkZCgnY2hhbmdlZCcpOwogICAgeG1sVHZJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAvLyBBZGQgbmV3IFhNTFRWIElEIHNlbGVjdGlvbiBib3ggdG8gaXQncyBwYXJlbnQKICAgIHhtbFR2SWRQaWNrZXJQYXJlbnQuYXBwZW5kQ2hpbGQoeG1sVHZJZENvbnRhaW5lcik7CiAgICBjaGVja1htbHR2Q2hhbm5lbChlcGdNYXBJZCwgeG1sVHZJZElucHV0LnZhbHVlLCBuZXdYbWxUdkZpbGUpOwp9CmZ1bmN0aW9uIGNoZWNrUFBWKHRpdGxlLCBlbGVtZW50KSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwogICAgY29uc29sZS5sb2coIkRVTU1ZIFRZUEU6ICIgKyB2YWx1ZSk7CiAgICBpZiAodmFsdWUgPT0gIlBQViIpIHsKICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieC1wcHYtZXh0cmEiKS5wYXJlbnRFbGVtZW50OwogICAgICAgIHRkLmlubmVySFRNTCA9ICIiOwogICAgICAgIHZhciBkYktleSA9ICJ4LXBwdi1leHRyYSI7CiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIGRiS2V5KTsKICAgICAgICAvLyBpbnB1dC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpCiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAicHB2LWV4dHJhIik7CiAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAvLyBCZXplaWNobnVuZwogICAgICAgIGlmICh0aXRsZS5sZW5ndGggIT0gMCkgewogICAgICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSAibGVmdCI7CiAgICAgICAgICAgIHRkLmlubmVySFRNTCA9IHRpdGxlICsgIjoiOwogICAgICAgIH0KICAgICAgICAvLyBDb250ZW50CiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9Cn0KZnVuY3Rpb24gY2hlY2tYbWx0dkNoYW5uZWwoaWQsIGVsZW1lbnQsIHhtbEZpbGUpIHsKICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7CiAgICB2YXIgYm9vbDsKICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3RpdmUnKTsKICAgIHZhciBjaGFubmVsID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtpZF07CiAgICB2YXIgdXBkYXRlTG9nbzsKICAgIGlmICh2YWx1ZSA9PSAiLSIpIHsKICAgICAgICBib29sID0gZmFsc2U7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBib29sID0gdHJ1ZTsKICAgIH0KICAgIGNoZWNrYm94LmNoZWNrZWQgPSBib29sOwogICAgY2hlY2tib3guY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgY29uc29sZS5sb2coeG1sRmlsZSk7CiAgICAvLyBLYW5hbGxvZ28gYWt0dWFsaXNpZXJlbgogICAgLyoKICAgIHVwZGF0ZUxvZ28gPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZAogICAgY29uc29sZS5sb2codXBkYXRlTG9nbyk7CiAgICAqLwogICAgaWYgKHhtbEZpbGUgIT0gIlRocmVhZGZpbiBEdW1teSIgJiYgYm9vbCA9PSB0cnVlKSB7CiAgICAgICAgLy8oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgLy8oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgICAgIGNvbnNvbGUubG9nKCJJRCIsIGlkKTsKICAgICAgICBjaGFuZ2VDaGFubmVsTG9nbyhpZCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHhtbEZpbGUgPT0gIlRocmVhZGZpbiBEdW1teSIpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXBkYXRlLWljb24iKS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikuY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxMb2dvKGVwZ01hcElkKSB7CiAgICBjb25zdCBjaGFubmVsID0gU0VSVkVSWyd4ZXBnJ11bJ2VwZ01hcHBpbmcnXVtlcGdNYXBJZF07CiAgICBjb25zdCB4bWxUdkZpbGVTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9wdXAteG1sdHYnKTsKICAgIGNvbnN0IHhtbFR2RmlsZSA9IHhtbFR2RmlsZVNlbGVjdC5vcHRpb25zW3htbFR2RmlsZVNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGNvbnN0IHhtbFR2SWRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd4bWx0di1pZC1waWNrZXItaW5wdXQnKTsKICAgIGNvbnN0IG5ld1htbFR2SWQgPSB4bWxUdklkSW5wdXQudmFsdWU7CiAgICBjb25zdCB1cGRhdGVMb2dvID0gIUJVTEtfRURJVCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWljb24nKS5jaGVja2VkOwogICAgbGV0IGxvZ287CiAgICBpZiAodXBkYXRlTG9nbyA9PSB0cnVlICYmIHhtbFR2RmlsZSAhPSAnVGhyZWFkZmluIER1bW15JykgewogICAgICAgIGlmIChTRVJWRVJbJ3hlcGcnXVsneG1sdHZNYXAnXVt4bWxUdkZpbGVdLmhhc093blByb3BlcnR5KG5ld1htbFR2SWQpKSB7CiAgICAgICAgICAgIGxvZ28gPSBTRVJWRVJbJ3hlcGcnXVsneG1sdHZNYXAnXVt4bWxUdkZpbGVdW25ld1htbFR2SWRdWydpY29uJ107CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBsb2dvID0gY2hhbm5lbFsndHZnLWxvZ28nXTsKICAgICAgICB9CiAgICB9Cn0KZnVuY3Rpb24gc2F2ZVBvcHVwRGF0YShkYXRhVHlwZSwgaWQsIHJlbW92ZSwgb3B0aW9uKSB7CiAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIHRydWUpOwogICAgaWYgKGRhdGFUeXBlID09ICJtYXBwaW5nIikgewogICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgIGNvbnNvbGUubG9nKCJTYXZlIG1hcHBpbmcgZGF0YSIpOwogICAgICAgIGNtZCA9ICJzYXZlRXBnTWFwcGluZyI7CiAgICAgICAgZGF0YVsiZXBnTWFwcGluZyJdID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgICAgICBjb25zb2xlLmxvZygiU0VORCBUTyBTRVJWRVIiKTsKICAgICAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgICAgIGRlbGV0ZSBVTkRPWyJlcGdNYXBwaW5nIl07CiAgICAgICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc29sZS5sb2coIlNhdmUgcG9wdXAgZGF0YSIpOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3B1cC1jdXN0b20iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRBQkxFIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICB2YXIgc2VsZWN0cyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEFCTEUiKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VMRUNUIik7CiAgICB2YXIgaW5wdXQgPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgY29uZmlybU1zZzsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuYW1lOwogICAgICAgIG5hbWUgPSBzZWxlY3RzW2ldLm5hbWU7CiAgICAgICAgdmFyIHZhbHVlID0gc2VsZWN0c1tpXS52YWx1ZTsKICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBwYXJzZUludCh2YWx1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBpbnB1dHNbaV0uY2hlY2tlZDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgY2FzZSAiaGlkZGVuIjoKICAgICAgICAgICAgY2FzZSAicGFzc3dvcmQiOgogICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHBhcnNlSW50KGlucHV0c1tpXS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGNtZDsKICAgIGlmIChyZW1vdmUgPT0gdHJ1ZSkgewogICAgICAgIGlucHV0WyJkZWxldGUiXSA9IHRydWU7CiAgICB9CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIHVzZXI/IjsKICAgICAgICAgICAgaWYgKGlkID09ICItIikgewogICAgICAgICAgICAgICAgY21kID0gInNhdmVOZXdVc2VyIjsKICAgICAgICAgICAgICAgIGRhdGFbInVzZXJEYXRhIl0gPSBpbnB1dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlVXNlckRhdGEiOwogICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICBkW2lkXSA9IGlucHV0OwogICAgICAgICAgICAgICAgZGF0YVsidXNlckRhdGEiXSA9IGQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBwbGF5bGlzdD8iOwogICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikgewogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFNhdmUKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZUZpbGVzTTNVIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBVcGRhdGUKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICBjbWQgPSAidXBkYXRlRmlsZU0zVSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImhkaHIiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIEhESG9tZVJ1biB0dW5lcj8iOwogICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikgewogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFNhdmUKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZUZpbGVzSERIUiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVIREhSIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhWyJmaWxlcyJdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIFhNTFRWIGZpbGU/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc1hNTFRWIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBVcGRhdGUKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICBjbWQgPSAidXBkYXRlRmlsZVhNTFRWIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhWyJmaWxlcyJdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBmaWx0ZXI/IjsKICAgICAgICAgICAgY21kID0gInNhdmVGaWx0ZXIiOwogICAgICAgICAgICBkYXRhWyJmaWx0ZXIiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbHRlciJdW2lkXSA9IGlucHV0OwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhVHlwZSwgaWQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHJlbW92ZSA9PSB0cnVlKSB7CiAgICAgICAgaWYgKCFjb25maXJtKGNvbmZpcm1Nc2cpKSB7CiAgICAgICAgICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKCJTRU5EIFRPIFNFUlZFUiIpOwogICAgY29uc29sZS5sb2coZGF0YSk7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKfQpmdW5jdGlvbiBkb25lUG9wdXBEYXRhKGRhdGFUeXBlLCBpZHNTdHIpIHsKICAgIHZhciBpZHMgPSBpZHNTdHIuc3BsaXQoJywnKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAtY3VzdG9tIik7CiAgICB2YXIgaW5wdXRzID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImNoYW5nZWQiKTsKICAgIGlkcy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgaW5wdXQgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgaW5wdXQgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdW2lkXTsKICAgICAgICBjb25zb2xlLmxvZygiSU5QVVQ6ICIgKyBpbnB1dCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgICAgIHZhciB2YWx1ZTsKICAgICAgICAgICAgc3dpdGNoIChpbnB1dHNbaV0udGFnTmFtZSkgewogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVQiOgogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0uY2hlY2tlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gaW5wdXRzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgY2FzZSAidHZnLWxvZ28iOgogICAgICAgICAgICAgICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzJdLmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLnNldEF0dHJpYnV0ZSgic3JjIiwgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWNoYW5uZWwtc3RhcnQiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzNdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LW5hbWUiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzNdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWNhdGVnb3J5IjoKICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSAid2hpdGUiOwogICAgICAgICAgICAgICAgICAgIHZhciBjYXRDb2xvclNldHRpbmdzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzQ29sb3JzIl07CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yc19zcGxpdCA9IGNhdENvbG9yU2V0dGluZ3Muc3BsaXQoInwiKTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JzX3NwbGl0Lmxlbmd0aDsgaWkrKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0c0NvbG9yX3NwbGl0ID0gY29sb3JzX3NwbGl0W2lpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0c0NvbG9yX3NwbGl0WzBdID09IHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNhdHNDb2xvcl9zcGxpdFsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1szXS5maXJzdENoaWxkLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s1XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC14bWx0di1maWxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gIlRocmVhZGZpbiBEdW1teSIgJiYgdmFsdWUgIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKHZhbHVlLCAieG1sdHYiLCAibmFtZSIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0WyJ4LWFjdGl2ZSJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzZdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LW1hcHBpbmciOgogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbIngtYWN0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbN10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtYmFja3VwLWNoYW5uZWwiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzddLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWhpZGUtY2hhbm5lbCI6CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbN10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3JlYXRlU2VhcmNoT2JqKCk7CiAgICAgICAgICAgIHNlYXJjaEluTWFwcGluZygpOwogICAgICAgIH0KICAgICAgICBpZiAoaW5wdXRbIngtYWN0aXZlIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJub3RBY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBjb25zb2xlLmxvZyhpbnB1dFsidHZnLWxvZ28iXSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbMl0uZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInNyYyIsIGlucHV0WyJ0dmctbG9nbyJdKTsKICAgIH0pOwogICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHNob3dQcmV2aWV3KGVsZW1lbnQpIHsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlTdHJlYW1zQm94Iik7CiAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICBkaXYuY2xhc3NOYW1lID0gIm5vdFZpc2libGUiOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgdmFyIHN0cmVhbXMgPSBbImFjdGl2ZVN0cmVhbXMiLCAiaW5hY3RpdmVTdHJlYW1zIl07CiAgICBzdHJlYW1zLmZvckVhY2gocHJldmlldyA9PiB7CiAgICAgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJldmlldyk7CiAgICAgICAgdGFibGUuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdmFyIG9iaiA9IFNFUlZFUlsiZGF0YSJdWyJTdHJlYW1QcmV2aWV3VUkiXVtwcmV2aWV3XTsKICAgICAgICB2YXIgY2FwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkNBUFRJT04iKTsKICAgICAgICB2YXIgcmVzdWx0ID0gcHJldmlldy5yZXBsYWNlKC8oW0EtWl0pL2csICIgJDEiKTsKICAgICAgICB2YXIgZmluYWxSZXN1bHQgPSByZXN1bHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN1bHQuc2xpY2UoMSk7CiAgICAgICAgY2FwdGlvbi5pbm5lckhUTUwgPSBmaW5hbFJlc3VsdDsKICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChjYXB0aW9uKTsKICAgICAgICB2YXIgdGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQk9EWSIpOwogICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRib2R5KTsKICAgICAgICBvYmouc2xpY2UoMCwgMTAwMCkuZm9yRWFjaChjaGFubmVsID0+IHsKICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgdmFyIHRkS2V5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdmFyIHRkVmFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdGRLZXkuY2xhc3NOYW1lID0gInRkS2V5IjsKICAgICAgICAgICAgdGRWYWwuY2xhc3NOYW1lID0gInRkVmFsIjsKICAgICAgICAgICAgc3dpdGNoIChwcmV2aWV3KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhY3RpdmVTdHJlYW1zIjoKICAgICAgICAgICAgICAgICAgICB0ZEtleS5pbm5lclRleHQgPSAiQ2hhbm5lbDogKCspIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImluYWN0aXZlU3RyZWFtcyI6CiAgICAgICAgICAgICAgICAgICAgdGRLZXkuaW5uZXJUZXh0ID0gIkNoYW5uZWw6ICgtKSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGRWYWwuaW5uZXJUZXh0ID0gY2hhbm5lbDsKICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRLZXkpOwogICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZFZhbCk7CiAgICAgICAgICAgIHRib2R5LmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgIH0pOwogICAgfSk7CiAgICAvLyBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKQogICAgZGl2LmNsYXNzTmFtZSA9ICJ2aXNpYmxlIjsKICAgIHJldHVybjsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1tZW51X3RzLmpzLm1hcA==" - webUI["html/img/users.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0zMFQxNzowODozODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CjU01MMAAANJSURBVGgF1ZnLaxNRFMYz2rpoFbW+SCsihaJQRMT6rPhAXAq6c+HChSguRFd1oRtd+A/oWhQ3oiiWFB91UbqRqlXXgoIIQhFbQTTQao2/GzLDZEjIPefO7SQHPjJz55zzfd/MZCa5N8h5ilKptJvWp8FekAed4Bv4Cj6Dh2A4CIJZPpszMHEV2MQ0SZdB0DROENMHjoEzQBoFCpZnbgYR58E/qfpE/kv2F2dmBvJ94G9ClHb3SiZGUBuASa3qGnVzjG3RmFmkKYrVHGB7e2zfdbOdBhc1TVyNnNSQNqg5wVURf/FdjRxpIEpzuIOio9JCtRHO2hrINkgJLfPFt6vaCII2WYrSpPVJi1RGuBrmTbxeSibIX5j3CUauAfOo9BXzNH4nMJ5TXREI1gHzqPQVRtc2zCyxJdAaGbclcMj7zi/jOdt6rZFhCH7akijznknqVEY4U78heSAhUuTekNSojFQIChIiYe57TtZrSY2LkecQzUjIBLljglz3VJ4qg+AXSDNGabbWXZ2wA6Qjabqg136hhHK6y60V8o2EGyl8/qHHpKZPGkYeQzyvIa9RM86XvFhjvOGQsxGIp2B50ZDJLuG2XZqnLO5rM3viGh9o0OZJon1bRLxxdHLcns1jJiYOAu2U0D2P0uStMXJdcVU+UdMlZ/NYgaA28ERg5ge5/R4l6VsjrANMWJiZJWeXnqm60vnxW90ul6u8ByaS4zX2i+S+qjGuGkrdSEWFzT1vlhlSC19Gui0UtnNriSfi6vX1ZWRjPcLEeGrzYqkb4SyvQGxvQnC93cF6BzIfx8gpYBsfSdycuei4AAR1ggugCCRh1lbugIF4vwXbhtisjfSDc+ARSOOf4lv6mNWv1VIj1ouQNF9K851gDzArtWbV1uYxS5o4zB+sp+AuKPC+cVv5RXwPuATMmUpreY1Wopgh+ybYKj4dFHWB+8DMwTZTjCHmsJUhEgfAF9DMcQtx9V8dHMyDqWZ2ENM2FL8yVV92kkY56GM5Lc6Z1vY0jbp5EJQnuqPLg4kdLWTCnIxVIJoDi4wweNYcbbGIfuLEjRxqMRNGbvTvsmyE22oZg70taKQn1BxekXw40GKfK0O9oZHsJ8ZCRbLPaI3xP7YzeQoHxWckAAAAAElFTkSuQmCC" webUI["html/img/xmltv.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQyMDowNzozMzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Co6j9bsAAAGgSURBVGgF7VqxTsNADL0gYGEon8DOwsbAAH8BYmJn6cYIn8DC3h0+oixISFRiYYCJL0AwMMBAeK5w2rpV6uikxHfYknW98+vds18TK21DWGBlWR7CH+BfcEv2AzLP8HP42gLqkyUATuEp2PWEdQjF9ATs1zF/g29Mrxt+vVcUxR3xWxEktzFPJQmivsv8ZSI9DiQyVnxlIonwn6fpiczXpNuVVXH8O+a3Ys3y9NUyuf/NTTbEHZTjUlGSRzSiPhroUIENwB4AS/vS/susDwDhTpYBER9g7wHh5DWyibV9CiitCZbIafDEYUuJHQI3Nr/9ciWsjK6IFSWYhyvClbAyZqOIlYJG84jq7E1Ot97Zm+TinV1TrWwudk9EI3ebGFekzWprzspGEU2ySWCiOrs/s9dr7M/s9fVJJJrNXcsTsfaJc0WsKZINH+/sf1Jqvl1n1f2ZnStRN/pdq646XcSkIh9dkIg4s+IrE3nCpp8RG7f91ns+cCYR/LD4jcAZB42PN+A7/mcQ8ZxJhBYQvMJwBB/BKTFLVoLMC/wCfgyv7BesTKUC2LKM3wAAAABJRU5ErkJggg==" + webUI["html/js/network_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya190cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL25ldHdvcmtfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxNQUFNO0lBSVYsWUFBWSxHQUFXO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUVsQixrQ0FBa0M7UUFDbEMsVUFBVTtRQUNWLEdBQUc7UUFFSCxpQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFFeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDNUIsK0JBQStCO1lBQy9CLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO1FBQ3JCLENBQUM7UUFFRCxRQUFRLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO2dCQUN2QixNQUFLO1lBQ1AsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO2dCQUN4QixNQUFLO1FBQ1QsQ0FBQztRQUVELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXpILElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFBO1FBQ3RCLElBQUksRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzNCLEVBQUUsQ0FBQyxNQUFNLEdBQUc7WUFFVixZQUFZLEdBQUcsSUFB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" + webUI["html/img/log.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xNFQxMToxMDo0MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkP32mEAAANASURBVGgF7ZlPiE1RHMffw1AYhiL5k1HEijJiYaFZiHoyFspW2RFRkkSZGgtFWJIwi9FYmo0VOywkKTbKgjSlWcifRCPX51dv6s2d33md77vvXjfmV9859/7u93x/v98959x73p1KRbAkSargAhgDH0E/qIYkuHYEvAPGvwbmNOEerXM/0Q6BRSFuZj/ix0DaDnvCkGppIucDAe4OhzvkcUO+GaELAf8ux7/b8Zlrr+Pvc3zm6nX8NccXdKmFLHaUPJ/Ruhyu5zNap8Nd6PiCLrUQTyi0Rjy/5/M0Zd+smB7M32XwtgBr07aC6yfSTs7XO77OALfH4VbgHsD/HLytVquJx4nyIdQFBsHftscksK5Z0sGhpuN8Or4Aa5sJFHjtO7G2MjKvvZjN1sglOpSlCMt9LrDZ4S4Hd0Qg24vrK+gAZbPtjMqTdFKhEdkIsYxFWP720JlioUK6pzDL41jtpRIqxOOWxecuB3fhRGT8E85YBK8VygI6GSRTCxlH3TaJgyw4O2678aCxO94LbNPovYDdmOrUukIBN/MqwjJEOwGPOHR31W4VONVCLEBR9lAJpBbSrYhn5K5R+quFnGUOr1ICtMIlxjz6XVb6qot9JeKvCPSAdlQJJHDtd8hOIN0wtRDLxx6Ntr0ulalTq1TJNyYzXUjj3SjD8X87Iva7uR8s5+2bi6FtX1oOgi8g2tSn1g2yPx+t3gIR/c90s1+C1vuO/YkxdWrdjxFtE2dE0VELWaqIZ+QuUfqrhZxmyKUvgEoyE1xizOR4YOI8plXXyAZEbYsyTJvXFsUW+x6wGUSbWogJ237rZHSEgojq1CooLT3MdCH6Pcu3xz8zIq0s9lvc2+sgz6dWH/rnQPB/jlybZGoh99hCHJqk0P6TD0jaI/4b7dVYeXVq2bemokyKpRZiHwWKMimWWshxhryjoEpOKXHUNbIN8WcUc5s2r8Vue7l9oAaiTS3EhDeB6EUYnUlGojq1MobLr3uokB/5hcys7OYWKuRl5nD5Cbi5uYXw0ntPHoay2S8Seuol5RZSJ0r/n/DEc/BdrN9kTZrH7BkwDspgwyQxW6uggU3nHnAXvAG/QZE2SrARsL8hJffwDxM0mNDPvT8IAAAAAElFTkSuQmCC" + webUI["html/img/mapping.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0wMlQxMjowODo5NzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CpRxQsEAAAJLSURBVGgF7VoxTgMxEMwBHWlAaeABVCEtBcoD+EBewCdCyQsQtLyAPCBvCBSRIBUPCF1ogqBJjlkrezGr6HTrO98lhy1Z9trr2VmvnbMNjUadUhzHLeQB8hw5LS3QOUbubvIf7X3kKXIZibgS51bCZdWgMT6D8nECgArkngagQN0B8dhbkblalVmLIyheCGUthhjuLBq77MihA0xTjHHBEBBOorHLjjghbNOg4Mg2RYO4hIiEiHiaAV5aSwf8hRgjZdHtTTTc2ZFXpZkY+hMx5k3IZYlr7jgudJHp2JElLaF0K1mirYn8nAWgQB3ibM59ERNCA52d6Nghv9isQiUtn0kURe92I9eBcYA6YZxym8dyDuwRuMw82gjQYQbsPdLDdNCROO0US3uEfp3usTZpjf5J2CNtNFwjl7FHvmBnCB5PCQkQoJudJtGvE23sJEFuI39rQArS7dskXK6nlwkAKiB1VxAxLcyUePAH8cQmlbEul4+UM8LkVjPc2ZHcaFUDBEeqjoC0HyIiZ6RqOUSk6ghI+xyRD9mRQTYfIktPylaX16rhzo48KE29QH8kxjxC/hFtZYiGe70OjWVMW7Dx32bA3iO7//iAC8DOPweZFQhH6O+CmkRvW2f28oV8owEoUHdMPPg70rFJZajTkqT7uZ3ObaHEuuHOjnCpsb8vlKUsur2JhruLA94Y5QEOjuSZPR9jQ0R8zGoezNpFhN5RtUm+/bpgaG1u0jd2OSLDTRopbZ/okxcrLUYKvKprbRfHhXr8m5PK/y1V/gWRKLfiNSmxEAAAAABJRU5ErkJggg==" + webUI["html/js/banner.js"] = "dmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7CiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0KICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH0KICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9CiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH0KICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7CiAgICB9KTsKfTsKY29uc3QgYmFubmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5iYW5uZXInKTsgLy8gQmFubmVyLUVsZW1lbnQgYXVzd8OkaGxlbgpmdW5jdGlvbiBnZXROZXdlc3RSZWxlYXNlRnJvbUdpdGh1YigpIHsKICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7CiAgICAgICAgY29uc3QgcmVsZWFzZXNEYXRhID0geWllbGQgZ2V0UmVsZWFzZXMoKTsKICAgICAgICBpZiAocmVsZWFzZXNEYXRhKSB7CiAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VzID0gcmVsZWFzZXNEYXRhLm1hcCgocmVsZWFzZSkgPT4gKHsKICAgICAgICAgICAgICAgIG5hbWU6IHJlbGVhc2UubmFtZSwKICAgICAgICAgICAgICAgIHRhZ19uYW1lOiByZWxlYXNlLnRhZ19uYW1lLAogICAgICAgICAgICAgICAgcHVibGlzaGVkX2F0OiByZWxlYXNlLnB1Ymxpc2hlZF9hdCwKICAgICAgICAgICAgICAgIC8vIE1hcCBvdGhlciByZWxldmFudCBwcm9wZXJ0aWVzCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgY29uc29sZS5sb2coJ1BhcnNlZCByZWxlYXNlczonLCByZWxlYXNlcyk7CiAgICAgICAgICAgIHZhciByZWxlYXNlX3RhZyA9IHJlbGVhc2VzWzBdWyJ0YWdfbmFtZSJdOwogICAgICAgICAgICBjb25zdCByZWdleCA9IC9bXlxkXS9naTsKICAgICAgICAgICAgY29uc3QgbGF0ZXN0X3ZlcnNpb24gPSBOdW1iZXIocmVsZWFzZV90YWcucmVwbGFjZShyZWdleCwgJycpKTsKICAgICAgICAgICAgY29uc3QgdmVyc2lvbl9lbGVtbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmVyc2lvbicpOwogICAgICAgICAgICBjb25zdCBjdXJyZW50X3ZlcnNpb24gPSBOdW1iZXIodmVyc2lvbl9lbGVtbnQudmFsdWUucmVwbGFjZShyZWdleCwgJycpKTsKICAgICAgICAgICAgdmFyIHRlc3RfY3VycmVudF92ZXJzaW9uID0gMTExNDsKICAgICAgICAgICAgaWYgKGxhdGVzdF92ZXJzaW9uID4gdGVzdF9jdXJyZW50X3ZlcnNpb24pIHsKICAgICAgICAgICAgICAgIGJhbm5lckVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IC8vIEJhbm5lciBlaW5ibGVuZGVuCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBmZXRjaGluZyByZWxlYXNlcyBvciBubyByZWxlYXNlcyBmb3VuZC4nKTsKICAgICAgICB9CiAgICB9KTsKfQpmdW5jdGlvbiBnZXRSZWxlYXNlcygpIHsKICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9tYXJjZWxHb2VyZW50ei9UaHJlYWRmaW4vcmVsZWFzZXMnKTsKICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBmZXRjaGluZyByZWxlYXNlcy4gU3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCByZWxlYXNlcyA9IHlpZWxkIHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2VzOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcmVsZWFzZXM6JywgZXJyb3IpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9KTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1iYW5uZXIuanMubWFw" webUI["html/js/configuration_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbl90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NvbmZpZ3VyYXRpb25fdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxjQUFjO0lBQXBCO1FBQ0UsZUFBVSxHQUFHLFNBQVMsQ0FBQTtJQU94QixDQUFDO0lBTEMsc0JBQXNCLENBQUMsS0FBWTtRQUNqQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVyxTQUFRLGNBQWM7SUFJckMsWUFBWSxHQUFVLEVBQUUsUUFBZTtRQUNyQyxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFBO1FBQ2xCLElBQUksT0FBTyxHQUFnQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzdDLElBQUksV0FBa0IsQ0FBQTtRQUV0QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsRCxHQUFHLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNsQixHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXpCLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtnQkFDdEIs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" + webUI["html/js/settings_ts.js"] = "Y2xhc3MgU2V0dGluZ3NDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudF9zZXR0aW5ncyI7CiAgICB9CiAgICBjcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHZhbHVlKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJINCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVIUigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhSIik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVTZXR0aW5ncyhzZXR0aW5nc0tleSkgewogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVtzZXR0aW5nc0tleV07CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAvLyBUZXh0ZWluZ2FiZW4KICAgICAgICAgICAgY2FzZSAidXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVwZGF0ZSIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVwZGF0ZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJhY2t1cFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImJhY2t1cC5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmJhY2t1cFBhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRlbXAucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudGVtcFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInRlbXAucGF0aCIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy50bXBQYXRoLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51c2VyQWdlbnQudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVzZXIuYWdlbnQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudXNlckFnZW50LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiYnVmZmVyLnRpbWVvdXQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmZtcGVnLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImZmbXBlZy5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJmZm1wZWcub3B0aW9ucyIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ2bGMucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudmxjUGF0aC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidmxjLnBhdGgiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudmxjUGF0aC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLm9wdGlvbnMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnZsY09wdGlvbnMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInZsYy5vcHRpb25zIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnZsY09wdGlvbnMucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxpc3RlbmluZ0lwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5saXN0ZW5pbmdJcC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAibGlzdGVuaW5nSXAiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MubGlzdGVuaW5nSXAucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIENoZWNrYm94ZW4KICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ud2ViIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbldFQi50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ucG1zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblBNUy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbk0zVS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ueG1sIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblhNTC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24uYXBpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsZXMudXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5maWxlc1VwZGF0ZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiY2FjaGUuaW1hZ2VzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5jYWNoZUltYWdlcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5yZXBsYWNlRW1wdHlJbWFnZXMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5yZXBsYWNlQ2hhbm5lbFRpdGxlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzdG9yZUJ1ZmZlckluUkFNIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5zdG9yZUJ1ZmZlckluUkFNLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJvbWl0UG9ydHMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLm9taXRQb3J0cy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZm9yY2VIdHRwcyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZm9yY2VIdHRwcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlSHR0cHMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnVzZUh0dHBzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmb3JjZUNsaWVudEh0dHBzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mb3JjZUNsaWVudEh0dHBzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0aHJlYWRmaW5Eb21haW4iOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnRocmVhZGZpbkRvbWFpbi50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidGhyZWFkZmluRG9tYWluIiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudGhyZWFkZmluRG9tYWluLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkb21haW5Vc2VIdHRwcyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZG9tYWluVXNlSHR0cHMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVuYWJsZU5vbkFzY2lpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5lbmFibGVOb25Bc2NpaS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZXBnQ2F0ZWdvcmllcyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiZXBnQ2F0ZWdvcmllcyIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXNDb2xvcnMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXNDb2xvcnMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImVwZ0NhdGVnb3JpZXNDb2xvcnMiLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJUaHJlYWRmaW5BdXRvVXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5UaHJlYWRmaW5BdXRvVXBkYXRlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzc2RwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5zc2RwLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkdW1teSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZHVtbXkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImR1bW15Q2hhbm5lbCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZHVtbXlDaGFubmVsLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBQViIsICIzMCBNaW51dGVzIiwgIjYwIE1pbnV0ZXMiLCAiOTAgTWludXRlcyIsICIxMjAgTWludXRlcyIsICIxODAgTWludXRlcyIsICIyNDAgTWludXRlcyIsICIzNjAgTWludXRlcyJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiUFBWIiwgIjMwX01pbnV0ZXMiLCAiNjBfTWludXRlcyIsICI5MF9NaW51dGVzIiwgIjEyMF9NaW51dGVzIiwgIjE4MF9NaW51dGVzIiwgIjI0MF9NaW51dGVzIiwgIjM2MF9NaW51dGVzIl07CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJpZ25vcmVGaWx0ZXJzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5pZ25vcmVGaWx0ZXJzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhcGkiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmFwaS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgLy8gU2VsZWN0CiAgICAgICAgICAgIGNhc2UgInR1bmVyIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy50dW5lci50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDA7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChpKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ1NvdXJjZSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZXBnU291cmNlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLmtlZXAiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJhY2t1cEtlZXAudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsiNSIsICIxMCIsICIyMCIsICIzMCIsICI0MCIsICI1MCJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiNSIsICIxMCIsICIyMCIsICIzMCIsICI0MCIsICI1MCJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYnVmZmVyLnNpemUua2IiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJ1ZmZlclNpemUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsiMC41IE1CIiwgIjEgTUIiLCAiMiBNQiIsICIzIE1CIiwgIjQgTUIiLCAiNSBNQiIsICI2IE1CIiwgIjcgTUIiLCAiOCBNQiJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiNTEyIiwgIjEwMjQiLCAiMjA0OCIsICIzMDcyIiwgIjQwOTYiLCAiNTEyMCIsICI2MTQ0IiwgIjcxNjgiLCAiODE5MiJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYnVmZmVyIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsie3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fZmFsc2V9fSIsICJGRm1wZWc6ICh7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcuaW5mb19mZm1wZWd9fSkiLCAiVkxDOiAoe3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fdmxjfX0pIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyItIiwgImZmbXBlZyIsICJ2bGMiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInVkcHh5IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51ZHB4eS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidWRweHkiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudWRweHkucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZXR0aW5nOwogICAgfQogICAgY3JlYXRlRGVzY3JpcHRpb24oc2V0dGluZ3NLZXkpIHsKICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIHZhciB0ZXh0OwogICAgICAgIHN3aXRjaCAoc2V0dGluZ3NLZXkpIHsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ud2ViIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25XRUIuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25NM1UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ucG1zIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25QTVMuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ueG1sIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25YTUwuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24uYXBpIjoKICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uQVBJLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIlRocmVhZGZpbkF1dG9VcGRhdGUiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5UaHJlYWRmaW5BdXRvVXBkYXRlLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxpc3RlbmluZ0lwIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MubGlzdGVuaW5nSXAuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLmtlZXAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5iYWNrdXBLZWVwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJhY2t1cC5wYXRoIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYmFja3VwUGF0aC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0ZW1wLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy50ZW1wUGF0aC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYnVmZmVyLnNpemUua2IiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5idWZmZXJTaXplLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInN0b3JlQnVmZmVySW5SQU0iOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zdG9yZUJ1ZmZlckluUkFNLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm9taXRQb3J0cyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLm9taXRQb3J0cy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmb3JjZUh0dHBzIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZm9yY2VIdHRwcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VIdHRwcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnVzZUh0dHBzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZvcmNlQ2xpZW50SHR0cHMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5mb3JjZUNsaWVudEh0dHBzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRocmVhZGZpbkRvbWFpbiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnRocmVhZGZpbkRvbWFpbi5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlbmFibGVOb25Bc2NpaSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmVuYWJsZU5vbkFzY2lpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXNDb2xvcnMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci50aW1lb3V0IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudXNlckFnZW50LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5wYXRoIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZmZtcGVnUGF0aC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmZm1wZWcub3B0aW9ucyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZmbXBlZ09wdGlvbnMuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy52bGNQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInZsYy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudmxjT3B0aW9ucy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXBpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNzZHAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zc2RwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbGVzLnVwZGF0ZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZpbGVzVXBkYXRlLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImNhY2hlLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmNhY2hlSW1hZ2VzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5taXNzaW5nLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VFbXB0eUltYWdlcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4ZXBnLnJlcGxhY2UuY2hhbm5lbC50aXRsZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VDaGFubmVsVGl0bGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidWRweHkiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51ZHB4eS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGV4dCA9ICIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHByZS5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQocHJlKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KfQpjbGFzcyBTZXR0aW5nc0NhdGVnb3J5SXRlbSBleHRlbmRzIFNldHRpbmdzQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoaGVhZGxpbmUsIHNldHRpbmdzS2V5cykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5oZWFkbGluZSA9IGhlYWRsaW5lOwogICAgICAgIHRoaXMuc2V0dGluZ3NLZXlzID0gc2V0dGluZ3NLZXlzOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBzZXR0aW5nc0tleXMgPSB0aGlzLnNldHRpbmdzS2V5czsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5Eb2N1bWVudElEKTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaGVhZGxpbmUpOwogICAgICAgIC8vIFRhYmVsbGUgZsO8ciBkaWUgS2F0ZWdvcmllIGVyc3RlbGxlbgogICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdmFyIGtleXMgPSBzZXR0aW5nc0tleXMuc3BsaXQoIiwiKTsKICAgICAgICBrZXlzLmZvckVhY2goc2V0dGluZ3NLZXkgPT4gewogICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5wbXMiOgogICAgICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5hcGkiOgogICAgICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVNldHRpbmdzKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQodGFibGUpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUhSKCkpOwogICAgfQp9CmZ1bmN0aW9uIHNob3dTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTRVRUSU5HUyIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5nc0NhdGVnb3J5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc2V0dGluZ3NDYXRlZ29yeVtpXS5jcmVhdGVDYXRlZ29yeSgpOwogICAgfQp9CmZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTYXZlIFNldHRpbmdzIik7CiAgICB2YXIgY21kID0gInNhdmVTZXR0aW5ncyI7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfc2V0dGluZ3MiKTsKICAgIHZhciBzZXR0aW5ncyA9IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjaGFuZ2VkIik7CiAgICB2YXIgbmV3U2V0dGluZ3MgPSBuZXcgT2JqZWN0KCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldHRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoc2V0dGluZ3NbaV0udGFnTmFtZSkgewogICAgICAgICAgICBjYXNlICJJTlBVVCI6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZXR0aW5nc1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2V0dGluZ3NbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoIiwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZTsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHBhcnNlSW50KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgZGF0YVsic2V0dGluZ3MiXSA9IG5ld1NldHRpbmdzOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldHRpbmdzX3RzLmpzLm1hcA==" + webUI["html/video/stream-limit.ts"] = "R0AREABC8CUAAcEAAP8B/wAB/IAUSBIBBkZGbXBlZwlTZXJ2aWNlMDF3fEPK//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQAAQAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABAAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMAdQAAB7DH4AAAAB4AAAgMAKMQAJEKERAAfYYQAAAAEJ8AAAAAFnZAAorNlAeAIn5YpQAAADABAAAAMDIPGDGWAAAAABaOvjyyLAAAABBgX//6vcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5ZjkgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIzIC0gaHR0cDovL3dHAQARd3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZUcBABJhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz0xOCBsb29rYWhlYWRfdGhyZWFkcz0zIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hRwEAE2RhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXBHAQAUPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAWWIhAA7//73Tr8Cm1TCKgOSVwr2yqQmWblSawHypgAAAwAAAwAAAwAAAwAAAwKu2oohWn0yb00AAAMAAAMAABdQAAAFVAAAAwImAAADATcAAAMA1AAAAwDJAAADAOIAAAMA/gAAAwEyAAADAhoAAAQEAAAGKAAADsAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAEcBABUDAAADAAADAAADAAADAAADAAChf/N/ABpeGr/knWSkvnzSCnTqFulfzx7/VV32B4LEI1sJpGt0Z6LkvThKFEdMKr22My08C8Npfb9rRCyeDuN0NcDJNsl9Oj/ggvB7gi1P9ABlBmXQLF/o/RIG0WjexcfQ54LOG1WfxpU+ukchRq/UnRzzxTpTx0/fgblwGEjx/nicbaa7TodhYSouth3SXEoJRl2xozfuwm5IIG/eBBWdGQ2DtR+oRwEAFvecX60Bss/zd0CpxrKqkEdIST5qtXPVZwBG9G5SjaNxJtH9JnayknCAAAAj+SfTzWc0oFeLamuCIIh9pYM+Teihte1lFn294mWeGPOXXQ/DZwqDwH9aXQge4EzledXTQpIl2w30CYG3trJlcWJm7OKbZps/fEMn8XKfpkhAS/G+Eo9vk5ExErnNcLoky+oImhxkCDUCA/rj/Ej0/xQTSjQUIL5nvESs2tdoSOQC6NCHPMvGEMXO1WNHAQAXuK0geh4MXnyNmlWerzFr2hZQ4pQSuIY7HKollJ1/4G/5wqI4Ng1zp67CvIoBHxCE5I+IoD3BzMxWThTqh4lhnCZTXMvRv8zFcwyoORCjMAEI34NyHdRhbOn/b0kRpX3CwcA8AAADAAADAACRoAm9hdpz8xkDH3QqIsC8JbQemc8pCtHPMND53Frhk7LdU4H3HZefapA70WvCxQWFHR/Ujp9zqjG0f46lkPr2JRvuVb9JqLCqF+I1xUcBABiexEQv8+tvi1tR/McCQCVvzeZBkfXTPz7thRZKIyyEz+X/Op9DSSBn1RMV+JpC/Tgnj/UUWsPsDamRR90MD8Mbde7XBvEZsmSX3KiIgWa/2nVsNEX5lApN5NGdzahj5vNjm52dMoRyQXle6bnrhiZeveQ5cxzvD21f6IlVzR/L7qLuGTRyMcO675fVyMAct3jRyb1yMeIKX/G0pffApDl/VXzI3WWig9uDwVIXm9ign/Hb6KKMP4RbRwEAGc/IEyefD+/7IAVUSehRvYIrkweTq6gK+b6qDrqWQuM/VOxzdXDqOdYja1MUWxalmPWSN8spCKop96umM5ZHqHbHYRdcfG1F62jtgaEFdjVN8VuGutwnY7XUGkZ0gwg7quDBmNWaP0Dny56uAAADAn+BPza4389WuPFOTJIrCG8zD8IGps6PlkpFvMtE2t+ed5Tj1da0pUbrmhjKb6LDChFwT5EiWGb/ah6L2+96ZfMv+IxzZNwztgZHAQAaWUradxyLlbX2UtGWRcgfkxPljwz+8z8U5XaD6U8dJmaiUsWxz/zVZ2X0xGXcMzg/keTGnzJROpMxRvXKHjYSL9FYM/KQaSS5RuApBbm05Fus5ct2Q9C9KjjKJULhn3hStcQTdzXR61wMIz6VirGeBQiO6+z1nbPH7lSI3LJYrgv1kMxW1jxD7J6i3zCI9KHqX2eYKmp/erBPSVNMjZoL5nZ79bGfWvwLnfLlQN+47VomrSi7mU+CEUcBABsGka7VvzIc8/Bs+jwvzo70im2qi8xy6BPyhT7u43ZvsMSoFcPsmVlhYg2iBHCmJOHrVwifupH7tH9oh/Tos9cmD2rkONQzESi5deIjHRPC06lWC9l+xPbAM95itGQ04UvLQwHCOT61OOOUWIrZGXW1L8Oi1n0ws1uT5snXGo8onmEULl1nUxCctkoVfMwFYDASCt4xOgVFtgumTt+PYBMmrMLkrtAnk0vnxXDCu0u88kR4Vwjcq2f7RwEAHDzicRZ9UQTtnhR2QNIOxi2JToyouU+S59ULFYxRuDyXIX7zf7u+tnEtFl+CJMII89tiwwJxvpv+FI+WO7coIVdKUPpVlGKwS+ZZVqlC/W0hPZrbynpZ0syAOJJiVtK7zTUmE0eAJoNgYUonkRBI2qNDNOl+67W3jd15HWAsOhmHnZZ1t5/nYs7vhtwiNdvNpfm6Nfz/QZZ10i7TNmnbP95y9Xe7qp/FPSEjH8yrOo1x/VLarB8kojhHAQAd3fIDMrGCkBtJAOXI1rJuRNdMMMxdUCLcEMMnPW3LdGQmKrsGAgb9eGRjPlvr1zwxBaO0ZoyMRYSaubOwFcDez2PyZS6mJnIjCMNAbFPqWdSDT0HZbkim5FFuxD50eByIG22RgVp9UekY738mOsksd5ZAnVnYsRetdBfrwY9bHD4HgPNqH0n272gsqs4TYK5YQbD3+tfgqRm4D1EuhghtK1z72+a82o9gAADzgaPlGbgGiMBRmuQHKUcBAB6Ed/ySiKrkaqdTq+/ubzl1U8rpwaW/Ts+skBMmhoGJDAbnyhCIS/Zx1KcSeDNVq+8Ff5QKv/fIvE+SdOSgho4kyqrTvwH3m/RWi5qoQAAxGm8gYzzojd/kmpztOACLYBRO3Jd9oyy120kYTCGlTHXyg1HWmIBXHv+Bq2mZcD4kgwKwgZi4wh8scRL/+DGga/tFrL8NwX+ARxmm84V/fKR+V0xgFVPSXJIwzbrRU5z9cdmadenrosMbRwEAH1CaI36SQWcWRowCnflkOx4DS9JtC41UcpktnhcMgLlYJmRGVqz7UG/k0IyHTYjXYlFcHqpWbwfX7xJ+YbGMqIYfQ+N1rCXOxJiT9/w+bax1fKkHwvGf8FnrptBj64bNnx96sjfXq0IKu8liRZZ8MuHRgWJ9XWsUwJEynQnB8d+3c2WG+hiv6533i+qka5olczA2E8ToSqzEI1WX8E3GPYt9RCY0s2ZZ6WQCCs2iXE6A0JRtYpeSZwdHAQAQSmf3I4R8GgrMWoFIQcHRZMQVypEQZnegnFk0q7nvLtRtH94J3dGehHTkcCVq9mcBfBJjfSAW/B/zbR4KzPFcnUeJb043euX9kwyaML3pnU/EiFJJHjeu6GFmrN8Ml0gxIoVcTbxKIy8COFtPSR4ikCdmo+LXWf+e5o5MG7a42kk4SeAzaXbfWdFc95zT48j4JApuh2Dt2/7c8ofv9z3QHYuE26x+fjYeiOyT50aYAQ8zf9xYUBwWl0cBABE6R3QLY/8n+5rXmarntzbhfCtwqwDqr4J9ihvKaDJq0c2BrCy4ILhEEOgD3YBgQONJI84OtMBedQr/Sw5fW8tHFCVHyGAqeCIsNsBPti+DL1jakQe2DzmTbVAta5kFeBo25tMQWjDol0SkDwLnPfC47WCNSklW1TBeUBJ174XWNAlEO/C25Ta352ErXfYrcm1sxac5B45+BHygt5yOyjSt1Ou4cjzL+5PMbpB4TgtgHvWV9PpjnsVrRwEAEseHswAAAwAAAwABCslM4I3ZG0E9VxwMCSa3GzLbjB5gs0IXhDclkxjdimCeiG+xu7NaqzZSDgPApIUREQ4rHcaPVbyKwMyyub7Zl3zGm3YS0ZQveTqrR0fwcCYTkGmfcASLivOlH4itqu4OZVr4sFtk4Mi0nOXMGtoorLjuKFMHS28aHdJ7Oojmp6NgE+nAdqWmRsCz3ZzjL09dgxENwO8ql2g0jNN+pfu6hQFmfoCxWqb3eRKM7v5HAQATgGXpL4L8nWYmoFD81KlxrrOAlxrMVK+Yu+sOuSkgg0DWWjXExx1t0CaPMjzChFS2pHwMQR2MlD4Zhm1tUDxdYYKwINwhxtMGMjZhUyP8A9/dBNz79Y90Lkdu0FPNz7I6BYTYKndr0qxtqiWB7hwThOFoFfcqCGJFlX0fNvoghDFuDxtuBMavyO6HDTxv8/ObiHjN0PTb0BpHY5Ja8N849GDaZu3K5I6QydUviUNcXw9Hqe+4lR/GREcBABQ+SmK+TU6vcLLOQXg5dCu9DHqPHf8x+kvllwEyhoMYLEiOTkhPd+3M5P8ivrrGo9pSXfUD+UZ5B+bvNMlyFv7BoDhUVyEz8Wg21Llgiesw5VBeZOgoIFG6yw+gHA0jsQx0HFur1z0fFRKvEfKVYZOp01TMH8lDJc/D+HcS2I/JTe+++f3upSD4Fc6SXESOvzHDSBVUWSFHqGvoolQVI9RqkvRLKIa3+4+R5Vf+ZaAM/fBZfy14CnzKRwEAFTS7rz4smgWPdT8Z5QIYsw2Ir9npWdjRks/FUPxU78gROcIL8BFxWW1acn7JbZi+jqeitBsqpDICjczCiW5UZZfIkGJp8q0JnUrjdhIrZfYMbQ91a/KA3AU8dVQPuDaDTEwzQCp5CVX7ndlte0UlNdqCw2etKvpSybVbQIgICzZCc76DfSKNOFFtdVCKw7jeJnzw3MzcveB80YF/p6Qa3DgmjaM2JpazHCE/V+ICR18u+Pm6VGfJZ35HAQAWDAblI9h4LOOHw3kxqunbtxCt3EV+k1ONyJAtxsB5XusK/Uiq28n12XRJDTzY3gC8HUNZ3p5qtXjfUm9g/jtnlUHRIg6M3HeBBXMz3rLadh1Whq02CLqrKkBH8UwcWMSpW+oRIqSl1P+nFlEqwPz4DOTDntp3X3pKVVzQMlWhwe+4PMygbrx3fRy+1NcmRjD02P8xvCj2jbr/WrWr44sHn5PamHnNsIjSKxqqgEQg+OetWM4CnZHz2kcBABfR390wQGSy6dS3RedcFmkSVIJJgtjznZvbBoHoL1C9K1P+lny/j6w78SP2KPfK9tCR+44H+Xjn4X5DYSb83+AkVnK+YTucqHAFSw4xaK/Ot1An4PNE60wqrZCeOkC1W/InFIK9gnm+0o8y33vhCJ2/wV17Dj+4070defXGQC01ioIoEk2frKRQa2pqN+efeLeRyJJViGINlJ5mgAAAAwAC46Llwm7cHXcXwAkIjTGI23/muLoI/6DwRwEAGDSwguBU9zrh99+owOYeMs9ABeQTtZsNmh990AbIQ9/bVlXCjev8bmXfOzhcaHqypOoimmwB3Hinx60LA27H2LO/7EeEBSAtJ7mcxCRHGTUzKC8qEtrtfaO8ZcgVwr55FjidUJnMYC8Y1Z0w95Tc3Yn/7io3Thst/1W0xg1y/fhwPDVKK5JU5QW3n/Sfrub1WjlQwhxquiQngs2qMgWKRBvz6Wx95/Ir8eR/cV3piWLaY7z8BXUFP9pHAQAZlHmqNs8IDNjcfbwicYVk+8aq8rNIc3t8wyB0rh7Wv0A4CWRpIyNKwPW8U65pRhF3pN9mIWTJQD7NOv87x8V3xOw7wO5R8Wx7fOCqyY0GTZnn/e4X0ECKZrnv9EgPoXSGAFEyhVEEBMPHcc9GraO4Bf4LA0bK4jC0nNI3InyoPCto2OgNGI9GLaSNGQZCwOlW6HR3BHQ2VrYnXWB+v7Eh9h7LNH8YRnZsiWm6aDN8DpcIAHe5mvE2T0cBABqw11eDcRo/OyyqdX6JzouXlF/vak9cwHlcb+L/Er6XOIOw3sRa2WWW+pDIb6OTUOgRhed7QiXNAh6Y8BQyEdq2Ld7LMaOhnbjbDRedvH1Ibau+vfJnfcg0+amv1Qeg5L/ajemDu/6Wv6ATfNLgr3fqpO0XDN/DyUbMIKroFUdl+eWlMC830KZiSjIsyagKSFumiCXsbtHjnYyZkW25RPLvX8oAAAMATZhzUTaRMruOWdyCleJVC0Q2RwEAG3kA1VwtlNjf9aZxH/m9m3v7+dwcehAyxiD8DjLBo+O3HlWvjFRAq/FTqUBHkueDni52x575qaKEzAuMJlOPVBrEo3iyeMR+eFbv70GRr25Jd1slRtKVpy0bPnX6eKlruHiyishKfvOltO7+q670NZ9OwgMSWcxytbVWvnWOaT9aGYFyQ+kiaEF76CuMefLTPIsJpVI+m/kdSwt5vt5CMmwxfBXd0fVB+HDw5vmU47hlk890s46g9/5HAQAckotGc75vYh2HQEVdvBMxdiN8LhEGoPbFm34UEFNVTYCy4gwkycT3/9so9gSpukTeg3+/YaSDmI/F8zDS3WdT29P0peXd+WPieJgnJmLO5Iz9tpPNqss9260suEb12u/yShCx3f5kBKg344Ne2NFc2B5bRgJSUcIW/gLgip/6yaE5IOO41VbWm65OQW53ZLzhgSw6DES6ChMDXd/BIkywuVhX7nJT1gp9aX352CTNGAjkbhkKtEHIo0cBAB2uFx9ua/PDLpf1Lnm2cxDCdbHeMEtTVQkYoNorEsDkIHIDgFctbUHNvUMCzSjJFmLXBU5+wNJ7yX5MLOnznL3RaDJZT70WuMViciLfmHaldRT7dBz407ql0uaq7MbfYNOhmvrPCGknWcyRSeFcp5LenoPjJi1VODk64BfL6Y/pDJJt2Yv052vTscXxPr39hWV0rDmMZfI5wL5f3Fl4kIGQ3fet2+OvKz4PvkYMoy8lvYxr28h37UZ/RwEAHoiy5Xhvzglyy8moaKXEzuHMbtqaOqyTwwtna2eM1C+ubTezdBO4yq/zkQ0mlzNGJdz6I2jPJXzyTrUYKsYdXT1fXYGBOkwMr7WGSWvVcXWWfhvQ1a7AFsz/tXTUAeDZmnUV9QQiYf9CrYLmEwXGOX1D6Yvax+1s0CEZ5SpRjBaLLVIobvx4WCvPN4KAJKKHvgx4/YV1tdccnzWayHf1xKiBnXqiL34T4MjBukLD7PyqQTOqbOyvkUhHAQAfoHJA1ZErYZKcOuNmXqm3movKJ819CK2ytmgKtSP8mvXVGFX24JP6DlGMBp2eD/mz2At58ORp+hW02dbW3385BY6Peeu7Ir2n7yClv3l4JJrSKw2iHMVYzjz6tsYADnwMpuAMdeREqAhmmfYFGXyHr2scd9MPhbCcm3MaSda1FSAN4v+yGL1za2Fb8p+vpfFtPEspC6wSNvOfO4kl5554ERJT3SXuk2GarJyCVxdSzMCv2+lYM09IFUcBABDlaDyp87py6hNiO5F34LlI3Bt9ujw6Cw5yjYCewcXsuyINLQQoBW6o5JVVsz9G4ZnJgQJs7AM28FqVHKFrRCY5qGk6zPc5x5HaR9Au2SWjAV2Ey1FTv7X/7WKca4HxC8H1Y05KvJAvQ8tPP5NkP5Px5G4GEGmezEVZQvpM7iXImWBxXuk55EwMU6fxN5qkQqurrIlSROiKcQAH/g0kQ8fKcrpDrqSw7RgBliRtOQKER0J65kFiqZSgRwEAEegLIehhFfpeMP+eEsi1nUs1ii4++/pa+N4Y5VeFjJhkhPwXbIgnQR45RdIR4CIGKvl/W65QiMg8MPLBGqeonlHHD/J/N5u+YzPdvwr6/zZrmPPIXYiGnpwj3Eqzbhsap5eDfDdHWrbGWRl0Vof+ZW2+25Xi03/Garij/3dZUiwUfU5bm8ZVTQVhjSwvo6o4X1VunS3tVx62HvhGGWW+Y4CHs/wGMMemYn70thuotXrY/Mdp1+czn5hHAQASHGWf0DFd9Kmlk2LaVcQ4FzqBYwEmcdp1l0n7hGzg+UkIfCQlkHYoDRgF1Y4gzgTpZLdC3RjH6uFoh0JKAMXYoNvdlSN9d70fYlds6vtPkRGRsWvqrX1xQb5FqRPXhXSmJZMQAhNYSWXL4k7DvbjQeJU3mABdWeltjT9RkJIc2vqDNxuo5bH8HsV4uGRNl0evR2sgRr1MkfV+yd6YP8qeQn/iTe2hqZzcM7VjBXN0Z2Z9LR42Fp9Y8UcBABMqATWsCKy6YtQ995l1kMZWmbMhVcYP9XjxBgo5F91THwmCStCGNQfYiM+jTG14aECJgdoYmbMztDyn9ao2XiV+cn8iFwhChT471Xg/Iu7es2C+kIqjOzi5tGqy3n/huMvv4VEwcKrHu0y+WKUKGUTvs5FV4UNjvBUyP3dydBrIxJJALolMzqb0nddEY5/jjPrTI7mh1IOAx8kG6QXYsF+h1pYYvRk/vyBdBaQ/NzrEUR9bf0HCzcHoRwEAFH/CPRZY0sD77mm7Rm5wH0I5mj++16kRhrZuBE22qL3tmSi+mLjCSXwj0aPXWP2KbT65Cp1/+7hF5SaWjW+QebDf4n2slxfgWwDYUOGFsqCriq2jRRyIXcxAV66zVAmFzUEfyw89xpu9ZsJiHihTmNr2OHat8zRN2W7QPM1Ps8x/p6kiQC9qZ09OVl4USzZ9xi5/+S55iNITCAgxYylxY4Y0cw2UtKC9jaYzBGpCrY4OwJEnNEylHBRHAQAV4XAErl4xkQ/EaZbY4LtviOLqfOUNMwOM7sF3AsAUIGMUn5rgfueg/k8ZWANFL13/TEGugHq0f9axkIaMtBM1Lw0SG0R+I00qhg29KPI+nr3wLpxaCMsyxoK7fRb2BDNJS9Xe0qsvxjNAQtIMFqHZuZ6tWZvSBUxcRP1MMJsTCY+iuwJIp8hA4nwpbCGvRet1LDPQ5fQty8+/aKxWD70ieYVvU8LFvAC4icvLOgiwCRTwX/jkAeJnPUcBABbA329eIm5Zg3WRAtt1Yz3tDvZ5chHTqQlcE3061nKNWAXK5lXOTaBdvTjxnyUsUKd12R+SXbF/QIB5yC8DhNfe0Qs2anHAbYblhnUCEpTfffKqYYXKzAPAAACEAKuJkmqk3mho0e02uoG7CCAsSzCBrdGGtOsCWwwAAAMAAAMAC8qAAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADRwEAFwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAUhsBkZofF9SG/S/CD2c7o957r4p1sJ9CkW43D8qi1ug5rIi3+hRWRaasP0vzNXydoF7uqYaiCXjeVO3fFfhXq+Qillhr7BmcXXI5/FesWGDTTaN0LY8s9LYHNMXsRjrFw1xP4X/ikSCYiH7JUhL96JXFHAQAYaFEmkg34rMKo7ddFGsE0hz6AAIKY6FurbYgXfgR6CWiXN+wRXStid+CBc00zEHpmBqavOAe/nqxRgYOLoznbthzqCQpOlMReQxKmGWw853MEzEn+WcKAAAAJi/7gE4xEjR1hSwrgQYf6wr4VHU9lamAwRysIS3jcfHZ+O2l+Gj4SRb9/jDSl2t2ldOsByD3of3VUhVoC5enU8+xtsLtpPrv1/D5/qiZWel+et7gFMMhWkSBdAmLeXEcBABkpSABkf+Mvg1KZgiWSSQPBmwoTfaxEQR09WfwMCUvvNqwu4UMH1j1SDXb+DeiQZwlZz9ycuIMv2At4eHUeAggbsqcQxuM7XG/cFgGH6EdZdy1us0bJ4XY6Wvf93+nK1ZgKyYbyuQ1gmlwFYYrgB+Phyk44OpEhDGfFofzHCpHPKd0mru04e2mHDHtd7Pr7wF0itALJdHGlmkOS07Q/5VJa0b9UZPSysxpAbOzLJeWKM6fO1M71FBSERwEAGihB/xtns1O6HG7mKVqWFrVOcAEkfP7InRjIESCeLjxOzdHo+e9KNyPHHgGeYBjv5Tm/U++SoT23OlDVvGwbXNxv9QqQXhzFT+Lqd2FgtJQ0LJVaz4h1+YovV7A6fLFk70nHyJ1EwVAzO82WBAqUfNehMJN9uiLMfd0Isea4f9ZruxDMzyORi7Q54VCNC/HnXEVuPykzq515huKC3GMl2w8D0vXCRFRM1zz01yOfnOxdIjE9iv6rXURHAQAbSTh7crewyLxAD3t0YSs2pRoMCBHpoiS/4V4cZY2lx1U5ejdh1MqH8GIzb0zZRLsMUfOPe4EmmQyFMCoggW9qXOvwgLs0D8C7oB0761s/MIzY51FKwcQf6hDkiFff5v+yWWlChTMurlWlSEM4JQ3U44ipO/d38UR1137nkum/qiREXPhpelkdBI7AGZDtnN+07Bsi5ttwRGIu42AY9lMrYUgW0K+zA1QmXSuLUD/WPiSo648Vi8d7pEcBABw39iZbYqPTh7O6ynZj7U1WHkGTN4PGglMoLg3/LqUtZs+CR9P9+b5OyFV2HwrnmyMjAFNdyJ+qI/TO4WGAdWafox0J4Ec8muKVXpeOoJMXTveuXiOUrcdYtXMWaPfL9l53CDT1wBd9QX9zw1vtRFl7XHkzB1Fhl/9YBVZLdIZ8kBnoec++95EOyX6MwozvUTDj+XNIu1o7478zBG/+CCXtlXwvDQ7IB9PLvKwyLe4W7/O/ifQzVBZRRwEAHf53XAT5/dSPXM03yWA+kpBn+XQPyQ6eEBWC2/vdryMFIfFzpVOVqDDf/lVXDAx24IiD6qnytfU5c2gK5C15UwR0GdZIpdSnMHY1q4N2a82Xo7FF8D3oPZYtjBzX20LMbhwWg6TT4GDdl5/fHNpDF5otwzMNPUtnfeq29Pa05B729D3R6u7+AUKLu7y2tZi6Hh0rlDcJsze3V9nOYcQ/jRL6kTZPN2zv6owEu+bx4ojrDEGVc5vFPa5HAQAe95K+yXEBs9CG9esI32qjVhV2mD37NwWTSQQ6jYYL6hIuRJQQaTGKkuD6kSd0BOX7ia6c5BKwa4DKk3GaBwbHLWW3H46pIk+0Yg3Tr6ZPQEmJMYVU3c8zKWAA9JmZxr5X2iJF+Dj5vlFzVVBrwbdduCyKoVHUghmgQdcC/ZnE8VBuymGX1gzl+g+w5Xpbs2cNUt2nc/4hv4xMzsRkgv7v2TahCRy/lrjL/+mQH7krAvJIIz1Ovnl9hkcBAB/wwAkLDhPlqWe2UyNgKtRPbFNSTlZNJqMv7Isg5azvWwF8YeWufKZiFRRiewNgB5x5HXvw23wh6Ul3FsyfXclpNvbWNHAEuUyu1NjnHBpcOU+8uRiyPQtGiVpeil8IJ7b9YBV+W40m0NOFh36LrEj8cPhZozABfq6s58uIqlypCHt50fr/Gfb5r2Zzh7WzohS8Z080QEgg1z+e3E7iA+G65F1RyLTvEXvexMMVAkq6v2lXXqFSs42pRwEAEKb35TyueVnk/6UdiiNyR40RrdvmvWHK/cBadCTX6Bu/jsIbERrWF6GnjaiCqY3MkciliyCMVznwRyNEFVVPWFgkFP/lGwqRakxSe02x3B2PYJkgtLQvKP38KwiqYje7ujDKVoD/X7NxLwMk2dyjueD9UNPufFN58DcZbhB8mx6TGnPX4CnkjZFcDXs36j6mK9nyX/P5htGomxkqnvz6/fR2JQd/RDISn9l4Hqf7/xjTDkybCFF96PtHAQARjB1Pg2CIx3w7xIprvoxDA6b7Jeed3n6WigOWuwLDGAZCPE2FW1aXMXSufSsOh+mxzdaGIqG6sR7Otbn88IkkaKa5Fzaz5LsqWS5hDO/zvlC2T3NY+Yq+RKt2SdOvJbWsmbtrxR16dTVQsDHQdjO0uDQIN7wzNTKD9cXUcZBWzGmcnvlYl+UMzjIFkNd6bRFnd9/SwWVtJR97bVl33pnFtbYXH8v1yVM7/78GpAEUrykjoKRE10fz60cBABI51xcEIZQQEVggtAR/Wh4NgGLWcp9amylYs6hAVeAsoHutGyske+k2MN1HT/NPdLIp20Rh1gwIoBFJ1OePQCfDS8y3EVQhOioULGpJT/7aXN19FhMFhI3sxS0/LAVUac4uIme6lfpPL5erl/o97K6mpIePhoXtWo3Y6hoJUi6HejSa46Z+9IPfRHzE3bMhT6FNu3aQ1xvJvgCV1PEoQh2DYRbCDEgVW2h5m3lKOHUnPLleC7SXC6vJRwEAE6YpIta471OTzMyQiawuBjSkQ4tnkJ6dLF1/WGJryrlLVuB+PS+g6DrKvYjt2XFS3yn5RHLdBzrzkkPfRAxtpX+wevx0Hy1f2D2NN0/nU5eNePo9nENzlT2GPcwY4LQkr2MVzBv6L7GpqyRXsI5BAu2/R6N+pByapNkn5QHo50K0U3Cyw++TbpaU1DnfHqV/XndsDOw2NA4K0UyGJZeQ5DqHvzk/UE2mdteymXBcdbHLucSh2xFZRBFHAQAUeexQgyeZ/dTNu9+uVy/qNu/K/7ORx7cABbSHtfBXJXT1nE7lXMixR78LgY+j30M+1KoDXr6f2I3cDCg6iMtYZGPfvUf3D9/yxtGtc+3b05LA7vt2HgA2aTUtqw0o2CQvak9a4IeLkWFX1XDr4GWEBKOuIKfOa00b5UK14mhg0hemQz6yFX7yKGi0zYpKMj9YEegbr2cQ+nsd710Djnqm0hD8ha7y2VL1HLyfxMIkImazMbeSe23iDEcBABVqoEapOQAAAwAAW5AuZzuOtZb9Yx///9EGP9E7laII1d0johKIpWxjj+tOW+nT04k9bbnf8VUniWVW7LfH6UfHGE5UfVihoE1vuSeTncAbjcUJZWUeQxmxT5zWWiyTrx2SEli98I5anlTHPY9r/kQ0bn8AfnYIP6WaMpQN9b6YOmd2JbWcvf0gVAlXgGNirXd3gIscCTho2kAtUhGEXebrMSNqNOHvXzvGH7C0EcQaOW3WHnxSc8++RwEAFm7ycx3Uq6vDtvtn6nsSfMltg8eJFHf5JqboNK5kkkjTaQ9gcJV+j/n+0JsxodW/gAwsqz26eT+cEyhMVN6/0nFsJnl5FcMSbaoZw8lhNZpZrmnFcJRa75lxTMb13NFnIVxDJTOZfVHYpAR7i/1CXxQfxZQ5cLRDqAKUrnXoEigt1JNk9QFqRry1sKX4hgMPwSg1milrhBEjZwM1Vrk6q30ysVKVCuR8x2NcmsNs+LHiDrkPcIslzrhHAQAXjE75tqNr0kOriMQ4iotU0pOh3RQzWxJVkTVNmXwuXkq1XG9B4SPFWnVdboBRcyTpJXzWuKTOA473vQeq+boq6YLG+TKbjS9o6edNOhTyWjbhxDeGE1caaWSMW99GkpNepqxG+knAKQxmljJhoWK7IwqJGJjc8fOmIXPJJCjgkOmjLS3nCIlhG217ckZXMdqDykZhfYDuLjjPSNTAZOwLixFMWJQMBe9LTQ1F5hYUxgOvcG8LzkBvDkcBABgnGAhE/LqdJ9dEHSkBHjgVOU6tzYBuRyXGyE8h3S4SJYRwVrNuaDmy5KHxv5NNLk8I8FHKNM4azlDMMUxyYsmpJnZCtwX8IpMYTSQWbOTNvRizO1d3kh3aKpbB3mNw3e2LUjS6QqKnhwknIZAEj5QmeitTiPJWGl29CDRDybEsQv+OSBXAgyvv9/2iAxfYymEI6ZdMJokowU9Rn4LmE7/W6UH/5rgGNgrYjuNmpSk+12FitDN0BK8MRwEAGZtT/2SQJ++hhXbNN3gD3uQhjb+PEfb/1rKKVGGWqUodgL2yglVsL8oDJHMG0zxmSIehM2jncA1cW3r5wbBW3TLqMo5YpJRIqpAde5U9dKdEGqUQXoFp1wxXGzIHlvwX2QTxZ7VVgMWv1kSCwRFckWjXh3JHei7/i/xn/7qev8q4lcVve+erTn4SHKDoE/z7n5hx/hDqCBjJd7NLj7/ujEQ1y3Vz2bgTqbe2eFBv9GfJzT3GJ04gbwZHAQAakrg8QeL+ipW2KLqehlIVHwVVg2+iUVe9ZnJL7pvFh2dc8A/8wKvRWTJsPeb64h747Bx0GAG49Em6FDdP0NRwM4kCD7ykhgH3xIw5UEqwgEoqu/VgMYzo58im9YH0PAM/giJoTkY6x68vw1w7AYVG4P5qUy4L99dSh3Y5d2vL59G8a8ca7wypjeH+ryLuVq45I+QWYyhrCvBwF2GC+c6CRBC9xnbvQ37ovecRQSqNcwadasG2nmDkrEcBABvnR5v08qlT/w/xxolkW/LOd72oOjf09CqKxg579Sy/CE1swBmTzDGBdYG7hiuLle9JPh/xP+1VLfgAtv1Be766lO64+6ZR22XT0SAoL3zB40vSRl1Bs3Lq8DVn/8Id07N1ZjK7Xjyx3CWk+ZSU/OIs0m20zpxzFrdFmk2C54p+f24x9MRIVqImW0wHThwznpqU218OchogoNiwJkljgTHeRy8ccdgswayrReHK0O7aFo7S1U+15ABbRwEAHP1gHYTH6W5pUay7H/SjgDCtOmjnDl4ePIHHu4limnbrteR9FybM40XBE+YPbsFyWcn6WeuB98mcJ1QgSYqPXVemP0da7wbIKtQ+Wy8TG50/Tp6AmZticNgC+GrOpIyhla6IddylIZ4tyREitYYTDEfgcbMxOsxJWqSWV0ys2JlcY1rPcq/FZwo7RKJvQK46/bwmOZF87oLbmGJtyXOxzYsy4UXrzQUz2hJQFTu/hEbpa5qBmhdvf7ZHAQAdFGb4s4tCRFF/SpCnmNw3L7t85usC7ywsDmFU/1mTAfJOVwKJO3vGHLiDw/NjCBtnpEOQuN5UfTBpLnTa3x+kAq+nM6FI7uiIlb0AYhFkpHC0JFO2bkzGF3iPzmF0JRoscAHNP+2UxvqdC4I67DwnhSsiuEwr3iPqiAz4LVHsr+WSXninsowFNKFk5cowAAj3sciye+33/0/Xyg0L4w0l+TPAxXl9mYGWSGsiYD4dGj9dFJSpOT1ufEcBAB6jvV/OltLbaoO0OpKH/OfoRFl09vo9N5A9CM9TMdNCJqWPxDxceKCDe+ixUEWvYNMC5S6TCyS0fL3Hog+OzEWfI1fONq/jp98QAAFaAyYeAxrS2M9B4ZccNcyltTnCJoBT5YWJYr8WgAARGgXO9gPK8WneyUYJI9zf/KTJfxz3cbpPTc8jW6eeJoOaZHU72qt2Hf5T6OaryQ3PYF7qyqe9MRs88a9xFrmHpGzXMhMIyTVT9OoO8lKWRwEAH6E/IfCR7h5puYD90yExZHncJXL4gFV+YhXSvbiSJROiuI1vQPwFBuVu94Utn+cPF0au5ZIAvszObqA6MlcFmspyYrE8G4PkxB/KVtW9xuSMcRhcHWGLgqmMeYZxyHtf1VWhaGMN4GhAM1RDVkDldCHUpzX4oXCKuFa7yCznCzxv7VdL6zR7qOrtnTX2v0ZFhiRJ+Kn4AQ0IQyc+uuEsiES6iwgppxZsh8o7bWIQYRm52mjIxr4hMyVHAQAQjLPnETbak41nraXCv3g2/eYuyYVD57TtaNKmiXNQ5iVUP1PsIu/zS5ZBE3FBnWN0H+0WaW6N4cehaZgok5lBzPrPw2OEWpyb+XcrNfn93jPyH2DdfZdcLs1NWiGA1C7zLS6eqh53SL6LR6CuC3Zifg2FnhpjiOQ9twMo5/kdsdWw/uYPrIF5wo/1Nf/ml8g3vXuhiZugRtJNj8++lk3en6S1N6vzCzGEcVaTTdqBuRTjrC4x0QVdBkcBABHRKAa7WwnIbF8zgi91XVKoxlTT8ydBHVu5CvBGlOpdJx//AoIJ3UM0EfrcNxFFO8TQahPfanz3y1la1nmfzpBr8hh73mEU4bfGUezXhXLqqRj2Pgahk0sUN6P5g0EA4dvGzSEwzRFUQMA+Z08+V9puzefSpQsEbHFHBHBECWClIDEFBKfYd/iCCDosv1IXIH5pDap+BruTQzIp4IOKTZU2NZ7bC9X8u0m5WcZ8RuDB1yP7yKzLDxkqRwEAEqcwvt0ULS9Q/vEyEW4wSFEodK4KsngVMAlD7OBr5sBkJsgwW8ggeBKGB4Z0+S2c3Tp+LlsfWX03B2UwA5t607hDSX5QQQwWw+LSV8rdqN1JiZhbiZQ0kUIUWswmy9H48W4apSrW8Mjp3Hx1AmbxlkANMD8jBWnquJZ9sdXaainono8GntqLeJ7IJNUVByvm/WCfs2j/HfDBL5DEaqVuV/JqXwTnAArcYRw4LQgkDZwjSToBM36EPatHAQAT41npxt8QQuSifqjv8t+z5wRxem6MS0k5vNiCdJH7+uuvM1XOQMZ3WG2ZAPH7FuSlY0XmcHXYq1223yebny9oF/HZD79uPEnyk2xns1ttHRXW9ZHUfrA1gKx6SrzKMK3ItX6/2YoBFa6iIWo2ZNOPvyfs5RhX5sf8mRWGJb9tGBjGNzyDQpotAznjl7xuLvntZ04SdCTqRavG4sIvqmsm02aqKi6mYa4SQ92hA/4RQnDG3nxKVXquQkcBABS/bgSAXXiGVrzpvSvvC+K4jynr0X6dvu73B7LYDztdIRSu2JAKIHPhptXPA6tjxPgfbjtN8+1Tj5SK1v1NTvycwTLVyS95uLe+LYaHEFgmqfW+80UfTiweEE80H/M0Vgfq7cYCcMQkBzfIhcuGqro3XQ0sz8iz3aXLLW0flrHja3phWq+FOF/vSE3Sf5S7en3K3pGI30X9oT0SBBZCI3AtJaE1scGsmpXrX+6L7ECx+XYakivHzMbORwEAFX6jycIYObFMA8cO1RQbKqBjRSwmV6s3Bvymh1Uy2Q4NYGetxxqA4TS9AAsfEnTWSPnioguTXby9YCaR4TjGhn8NBtHaAqal7fT8Mi6Fx48bLZLUw8vE0oyOXRPPZ7YEaZ8VtCcKvfPmIXDe+CICjSg/14litlDqWjesyqV20kGkxEXxFBxQ6opg8rJ5nrXpJ7Yg7f1kVB6kfioI546wX4WiVIHMnIjolv1sVV16hPOoaheE0P72F7ZHAQAW7HIsDRCfdXPaYJO+kI1KnbprbBU8l9EpUeesa13zPgeLsD/2jy8om6zqqaZBpDO3+joQU+lzMfu74FIaVthokTCHq+okILC+gMpWqJ9gii24CxJR1eAEEaVrQma2Vqt0eRRTQKRgUz3U+yFZEROE+9eX4DBqMlOFD6/RPC32sesdhyOVL9peV/fimBhb4rcmjAOm79hlThrtz/TWGfACtvoNRAwACV66tkmnc4GPMdLg0xEkq+1LSEcBADcNAP///////////////5trYpfJL+GISCBj9FiUkOtbkee6L9I58mjnY1y/WDNqht+Qw3+9i+KfyBbjdz/46xUXVuCItwfw/gdYKyy+IjRZiv53kEqW+PD7lPLLRgAAL2BITMTuwQL79Q01wkomp2ZPIBYiBP6WREAZAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAW9R0EAGAAAAeAAAIDACjEACYEhEQAH9IEAAAABCfAAAAABQZokbEO//qmWAAADAAADAAADAAADAAADAAADAAADAhPyO6dd23w9DkWWQJotXSbxVzBxaMjhfbwK5hWmvMGszdWhoszx1x0hDXN8c9BgYxwvxRZXkmrTPV9ZQAAAAwAAAwAAAwAAAwAKyANRq59GNuA0ghi7BmsDn4KOtIcIHn/KA8ZjXdDU0cUWk7qRZwNMMelaC07cZyBZW9BHAQA5EgD//////////////////////472Ji2hDXNKdWiA/xvCwGEXvTeFAvXO+jhlL6AOli2RGJa+ncBbXMf/Fv/nG9TOUvI8v62JTNsuhHbKPEq9HPF4/Uizrx3rjCTMC69d6+VoYrKv6XxKyvGcL7/QDEDKbwk4eCFgJZJEAlH+N25TWR6KYwzkYYgGuXdrBv3UkeA7VHwdf9Xzh5cuSg4ngVmnfeIpA9JsLqp2wIu9AAADAAADAAAIuEdBADoHEAAAiRx+AAAAAeAAAIDACjEACUjhEQAJEKEAAAABCfAAAAABQZ5CeIX/AAADAAADAAADAAADAAADAAADAAADAnzE28Zci1VBf0H4k1nWmJ0ogyjKdI6LAY1zorGVIRF7G8uwAAADAAADAAADAAADAAADAqrZOCXhGzA4u24KPtb92mgjNUnlvc9Xhr0gBo7u2GDR+aPxP9hnLhhlBtu4gqLkmscLxiv7oXnm033sXadVffC0UcIARwEAO64A//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAwAAAwAAM+FHQAARAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABEAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAPCUA////////////////////////////////////////////////AAAB4AAAgIAFIQAJLMEAAAABCfAAAAABAZ5hdEK/AAADAAADAAADAAADAAADAAADAAADA1/+i67DypGtrhJHPx4hDO6/W1t2QWamAxImT0NjhBVoAAADAAADAAADAAADAAAFMUbvocN9sGd3vACpQrs5+mzAC6i5WG4adCZ7bcVeOzo7AFpOoAAAAwAAAwAAMqBHQQA9QhAAAJcsfgD//////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACWUBEQAJSOEAAAABCfAAAAABAZ5jakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAAF+YuLcI2IxJ27WrhAZp7Yh4CElw5RRRGjq0bAAADAAADAABEwUdBAD4uAP///////////////////////////////////////////////////////////wAAAeAAAIDACjEACfGhEQAJZQEAAAABCfAAAAABQZpoSahBaJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAK78A5Ntd6FmvObqU2qkO9/nBjO187SEClZ2zAWMgqZxWCxcqvQx+wgAAADAAADAAU1R0AAEgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAASAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBAD86EAAApTx+AP///////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACblhEQAJgSEAAAABCfAAAAABQZ6GRREsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAB1LjAMsF1v3AJeffDUP0gAbzkVi7LRpW7+1eciThATL+0AAADAAADAAIPR0EAMEYA////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQAJnUEAAAABCfAAAAABAZ6ldEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAOo9u4wKtZ9mouspMor7zADZAcKEUQKmIGN/qFqwAAAMAAAMAA1NHQQAxURAAALNMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACdWBEQAJuWEAAAABCfAAAAABAZ6nakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABMAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAEwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQAyTgD//////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC2IhEQAJ1YEAAAABCfAAAAABQZqsSahBbJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAF4+AbzVAAAAwAAAwAAAwBAwEdBADNKEAAAwVx+AP////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAsp4REACfGhAAAAAQnwAAAAAUGeykUVLC//AAADAAADAAADAAADAAADAAADAAADAAE1849qKzqh1YAAAAMAAAMAAAMAAAMAAPrcuImYkdwSCsiv8h6ss58AAAMAAAMAAM+BR0EANFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALDcEAAAABCfAAAAABAZ7pdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAH1fABVCgbyQRhNELHHAAAAMAAAMACyhHQAAUAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABQAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EANVEQAADPbH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAtGAREACynhAAAAAQnwAAAAAQGe62pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTBHQBERAELwJQABwQAA/wH/AAH8gBRIEgEGRkZtcGVnCVNlcnZpY2UwMXd8Q8r//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADZOAP//////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQAL0qERAAtGAQAAAAEJ8AAAAAFBmvBJqEFsmUwIb//+p4QAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAv/sqEpwAAADAAADAAADAMCBR0EAN0oQAADdfH4A/////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC5phEQALYiEAAAABCfAAAAABQZ8ORRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwABAV2OiZ9R3aIKyK/yHqyznwAAAwAAAwAAz4FHQAAVAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABUAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAOFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALfkEAAAABCfAAAAABAZ8tdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAICUVFVNgckQRhNELHHAAAAMAAAMACylHQQA5URAAAOuMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC7aBEQALmmEAAAABCfAAAAABAZ8vakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdBADpRAP//////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQANQyERAAu2gQAAAAEJ8AAAAAFBmzRJqEFsmUwIZ//+nhAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAGVAR0AAFgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAAWAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADtMEAAA+Zx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADQrhEQAL0qEAAAABCfAAAAABQZ9SRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe1R0EAPFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEAC+7BAAAAAQnwAAAAAQGfcXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0BHQQA9URAAAQesfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADScBEQANCuEAAAABCfAAAAABAZ9zakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABcAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAFwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQA+UgD///////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2zoREADScBAAAAAQnwAAAAAUGbeEmoQWyZTAhX//44QAAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABi0dBAD9MEAABFbx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADXthEQANQyEAAAABCfAAAAABQZ+WRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe0R0EAMFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEADV9BAAAAAQnwAAAAAQGftXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0FHQAAYAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABgAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMVEQAAEjzH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2XgREADXthAAAAAQnwAAAAAQGft2pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTE=" + webUI["html/js/authentication_ts.js"] = "ZnVuY3Rpb24gbG9naW4oKSB7CiAgICB2YXIgZXJyID0gZmFsc2U7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOwogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXV0aGVudGljYXRpb24iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICBjb25zb2xlLmxvZyhpbnB1dHMpOwogICAgZm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBrZXkgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICB2YXIgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIGlucHV0c1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9ICJyZWQiOwogICAgICAgICAgICBlcnIgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIGlmIChlcnIgPT0gdHJ1ZSkgewogICAgICAgIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoImNvbmZpcm0iKSkgewogICAgICAgIGlmIChkYXRhWyJjb25maXJtIl0gIT0gZGF0YVsicGFzc3dvcmQiXSkgewogICAgICAgICAgICBhbGVydCgic2RhZnNkIik7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXNzd29yZCcpLnN0eWxlLmJvcmRlckNvbG9yID0gInJlZCI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtJykuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9ICJ7ey5hY2NvdW50LmZhaWxlZH19IjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgZm9ybS5zdWJtaXQoKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1hdXRoZW50aWNhdGlvbl90cy5qcy5tYXA=" + webUI["html/js/banner.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvYmFubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFnQixDQUFDLENBQUMsMkJBQTJCO0FBRW5HLFNBQWUsMEJBQTBCOztRQUVyQyxNQUFNLFlBQVksR0FBRyxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDZixNQUFNLFFBQVEsR0FBYyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQ2xCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtnQkFDMUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxnQ0FBZ0M7YUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDSixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDeEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQXFCLENBQUM7WUFDOUUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFBO1lBQy9CLElBQUksY0FBYyxHQUFHLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3hDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQjtZQUMvRCxDQUFDO1FBRUwsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNMLENBQUM7Q0FBQTtBQUVELFNBQWUsV0FBVzs7UUFDdEIsSUFBSSxDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztZQUMvRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7Q0FBQSJ9" + webUI["html/js/base_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2Jhc2VfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUN6QixJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUE7QUFDOUIsSUFBSSxjQUFzQixDQUFBO0FBQzFCLElBQUksdUJBQStCLENBQUE7QUFDbkMsSUFBSSxjQUFjLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUNqQyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0FBQ3ZCLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFBO0FBQzdCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQTtBQUl4QixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtBQUM1RyxnQ0FBZ0M7QUFDaEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDN0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBUyxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RCxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUV0RCxDQUFDLENBQUMsQ0FBQztBQUNILFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVMsQ0FBQztJQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7SUFDckUsUUFBUSxFQUFFLElBQUk7SUFDZCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUMsQ0FBQTtBQUVGLElBQUksWUFBWSxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0lBQ3pFLFFBQVEsRUFBRSxJQUFJO0lBQ2QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDLENBQUE7QUFFRixPQUFPO0FBQ1AsSUFBSSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtBQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsaUNBQWlDLENBQUMsQ0FBQyxDQUFBO0FBQ3pILFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDLENBQUE7QUFDbEgsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLCtCQUErQixDQUFDLENBQUMsQ0FBQTtBQUN0SCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxhQUFhLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQyxDQUFBO0FBQzFILFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDLENBQUE7QUFDbEgsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsNkJBQTZCLEVBQUUsY0FBYyxFQUFFLGlDQUFpQyxDQUFDLENBQUMsQ0FBQTtBQUM5SCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFBO0FBQzFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLDJCQUEyQixFQUFFLFlBQVksRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLENBQUE7QUFFdEgsbUNBQW1DO0FBQ25DLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtBQUNsQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxnQ0FBZ0MsRUFBRSxpSEFBaUgsQ0FBQyxDQUFDLENBQUE7QUFDcE0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLENBQUMsOEJBQThCLEVBQUUsNEhBQTRILENBQUMsQ0FBQyxDQUFBO0FBQzdNLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFvQixDQUFDLGdDQUFnQyxFQUFFLGtFQUFrRSxDQUFDLENBQUMsQ0FBQTtBQUNySixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxrQ0FBa0MsRUFBRSx3SEFBd0gsQ0FBQyxDQUFDLENBQUE7QUFDN00sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLENBQUMsK0JBQStCLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFBO0FBQzNHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFvQixDQUFDLHVDQUF1QyxFQUFFLGdHQUFnRyxDQUFDLENBQUMsQ0FBQTtBQUUxTCxTQUFTLGdCQUFnQixDQUFDLEdBQUc7SUFFM0IsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUV0QiwyQkFBMkI7SUFDM0IsZ0NBQWdDO0lBQ2hDLFVBQVU7SUFFVixPQUFNO0FBQ1IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJO0lBQzlCLElBQUksS0FBSyxJQUFJLGNBQWMsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDaEQsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssSUFBSTtnQkFDUCxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQ2pCLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFBO2dCQUNqQixNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUN2QixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxJQUFJO2dCQUNULFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDakIsTUFBTTtZQUNSLEtBQUssS0FBSztnQkFDVixZQUFZLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQ2pCLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUztJQUN0RCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRTtJQUNoQyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0lBQ3ZCLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNoRCxNQUFLO1FBRVAsS0FBSyxNQUFNO1lBQ1QsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNoRCxNQUFLO1FBRVAsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLGVBQWUsQ0FBQztRQUNyQixLQUFLLGFBQWE7WUFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFBO2dCQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsS0FBSyxDQUFBO2dCQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFBO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUN2QixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFBO1lBQ3pDLENBQUM7WUFDRCxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3ZDLE1BQUs7UUFFUCxLQUFLLE9BQU87WUFDVixJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ2hELE1BQUs7UUFFUCxLQUFLLE9BQU87WUFDVixJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2xDLE1BQUs7UUFFUCxLQUFLLFNBQVM7WUFDWixJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3ZDLE1BQUs7UUFFUCxLQUFLLFdBQVc7WUFDZCxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ2xELE1BQUs7SUFDVCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBRztJQUNyQixJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBRXZCLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsTUFBYztJQUNwQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFDekQsQ0FBQztBQUVELFNBQVMsc0JBQXNCO0lBRTdCLElBQUksUUFBUSxHQUFhLElBQUksS0FBSyxFQUFFLENBQUE7SUFFcEMsSUFBSSxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdkIsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFN0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUVwQyxJQUFLLEdBQUcsQ0FBQyxDQUFDLENBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUVwRCxJQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBK0IsQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzFCLENBQUM7UUFFSCxDQUFDO0lBRUgsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxlQUFlO0lBRXJELElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQTtJQUN6QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXhFLElBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUErQixDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2RSxJQUFJLEdBQUcsSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFcEMsSUFBSyxHQUFHLENBQUMsQ0FBQyxDQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7WUFFcEQsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFFYixLQUFLLElBQUk7b0JBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUErQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7b0JBQ2pFLE1BQUs7Z0JBRVAsS0FBSyxLQUFLO29CQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBK0IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO29CQUNsRSxNQUFLO1lBRVQsQ0FBQztRQUVILENBQUM7SUFFSCxDQUFDO0lBRUQsT0FBTTtBQUNSLENBQUM7QUFFRCxTQUFTLFFBQVE7SUFFZixTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUE7SUFDdEIsSUFBSSxTQUFpQixDQUFBO0lBQ3JCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuRCxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSTtZQUNQLFNBQVMsR0FBRyxlQUFlLENBQUE7WUFDM0IsTUFBTTtRQUVSLEtBQUssS0FBSztZQUNSLFNBQVMsR0FBRyxlQUFlLENBQUE7WUFDM0IsTUFBTTtJQUNWLENBQUM7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzdCLElBQUksQ0FBQyxDQUFDLENBQXNCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUMvQyxDQUFDO0lBRUQsT0FBTTtBQUNSLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxHQUFHLGVBQWU7SUFDckQsb0NBQW9DO0lBRXBDLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxJQUFJLFVBQVUsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSx1QkFBdUIsSUFBSSxVQUFVLElBQUksd0JBQXdCLENBQUMsRUFBRSxDQUFDO1FBQ2pKLE9BQU87SUFDVCxDQUFDO0lBR0QsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXRELElBQUksT0FBTyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7SUFDM0IsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2QsSUFBSSxXQUFXLENBQUE7SUFDZixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUE7SUFFeEIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLGNBQWMsR0FBRyxDQUFDLElBQUksVUFBVSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3RFLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO0lBQzVDLENBQUM7U0FBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLFVBQVUsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQy9GLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDMUQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksVUFBVSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2xDLGNBQWMsR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztTQUFNLElBQUksVUFBVSxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDbEQsdUJBQXVCLEdBQUcsTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFJRCxJQUFJLElBQUksR0FBSSxLQUEwQixDQUFDLElBQUksQ0FBQztJQUU1QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUN6QixXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXJCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFFakMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUvQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLEtBQUssT0FBTztvQkFDVixNQUFNLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDaEUsTUFBTTtnQkFFUixLQUFLLEdBQUc7b0JBQ04sTUFBTSxHQUFHLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ2hFLE1BQU07Z0JBRVIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFFRCxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFFakIsTUFBTSxHQUFHLENBQUMsQ0FBQTtnQkFDVixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXZCLENBQUM7aUJBQU0sQ0FBQztnQkFFTixRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUN0QixLQUFLLEtBQUs7d0JBRVIsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTt3QkFDekIsTUFBTTtvQkFFUixLQUFLLElBQUk7d0JBRVAsWUFBWSxHQUFHLElBQUksQ0FBQTt3QkFDbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7d0JBQzNDLE1BQU07Z0JBRVYsQ0FBQztZQUVILENBQUM7UUFFSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVwQyxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7Z0JBQ2xGLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ25DLENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDbkIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7WUFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRTlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFFM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUUzQyxDQUFDO0lBRUgsQ0FBQztJQUVELE9BQU07QUFDUixDQUFDO0FBRUQsU0FBUyxlQUFlO0lBRXRCLGNBQWMsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0lBQzdCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN2QyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFL0IsSUFBSSxXQUFXLEdBQWEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFFcEgsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUVwQixXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBRXhCLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUV0QixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QixLQUFLLElBQUk7d0JBQ1AsY0FBYyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQTt3QkFDOUIsTUFBTTtvQkFFUixLQUFLLEtBQUs7d0JBQ1IsY0FBYyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQTt3QkFDL0IsTUFBTTtnQkFFVixDQUFDO1lBRUgsQ0FBQztpQkFBTSxDQUFDO2dCQUVOLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUMxQixJQUFJLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFBO29CQUV4RSxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDM0IsY0FBYyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFBO29CQUMzRCxDQUFDO2dCQUVILENBQUM7cUJBQU0sQ0FBQztvQkFDTixjQUFjLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUE7Z0JBQy9ELENBQUM7WUFHSCxDQUFDO1FBRUgsQ0FBQyxDQUFDLENBQUE7SUFFSixDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU07QUFDUixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxRQUFRO0lBQ3BDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQSxDQUFDLDRCQUE0QjtJQUVqRCx5QkFBeUI7SUFDekIsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3BELDZDQUE2QztJQUM3QyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxFQUFFLEdBQUc7UUFDekQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUc7WUFDekMsZ0VBQWdFO1lBQ2hFLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUQsK0RBQStEO2dCQUMvRCx1Q0FBdUM7Z0JBQ3ZDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3hGLHFCQUFxQjtxQkFDcEIsT0FBTyxDQUFDLFVBQVUsSUFBSTtvQkFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ3JCLENBQUMsQ0FBQyxDQUFBO1lBQ04sQ0FBQztZQUNELFNBQVMsR0FBRyxHQUFHLENBQUEsQ0FBQyw4Q0FBOEM7UUFDaEUsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFFdEIsSUFBSSxXQUFXLEdBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQXNCLENBQUMsS0FBSyxDQUFDO0lBQ3ZGLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFN0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUVwQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2xDLElBQUksT0FBTyxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUVoQyxRQUFRLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNsRSxLQUFLLElBQUk7Z0JBQ1AsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtnQkFDOUMsTUFBTTtZQUVSLEtBQUssS0FBSztnQkFDUixRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO2dCQUNsRCxNQUFNO1FBQ1YsQ0FBQztJQUdILENBQUM7SUFFRCxPQUFNO0FBQ1IsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsUUFBUTtJQUNwQyxJQUFJLHVCQUF1QixHQUFJLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBc0IsQ0FBQTtJQUNyRyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9CLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMvRCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDdkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLElBQUksS0FBSyxHQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBK0IsQ0FBQTtRQUMvRCxLQUFLLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ3pELGVBQWUsRUFBRSxDQUFBO0lBQ25CLENBQUMsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ25CLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNkLENBQUM7SUFDRCxJQUFJLHVCQUF1QixJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pDLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzVCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsT0FBTztJQUVsQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUE7SUFFM0MsSUFBSSxTQUFTLEdBQVcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNqRCxJQUFJLGNBQWMsR0FBYSxFQUFFLENBQUE7SUFDakMsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3ZDLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUvQixJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1FBQ3hDLE9BQU07SUFDUixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUVwQixJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7UUFDdkQsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUVwQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFL0MsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDNUMsTUFBSztRQUNQLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdkMsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUE7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUM1QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDN0MsQ0FBQztJQUVILENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2hELE9BQU8sQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFBO0lBRXpCLElBQUksY0FBYyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNuQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDZCxDQUFDO0lBRUQsSUFBSSx1QkFBdUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUM1QixTQUFTLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUVELE9BQU07QUFDUixDQUFDO0FBRUQsU0FBUyxNQUFNO0lBRWIsSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtJQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRTFCLElBQUksR0FBRyxHQUFHLGlCQUFpQixDQUFBO0lBRTNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRWpCLElBQUksTUFBTSxHQUFXLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFcEIsT0FBTTtBQUNSLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEVBQVU7SUFFckMsSUFBSSxPQUFZLENBQUE7SUFDaEIsSUFBSSxNQUFlLENBQUE7SUFFbkIsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEMsSUFBSSxRQUFRLEdBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQXNCLENBQUE7UUFDdEUsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFBO0lBQzdCLENBQUM7SUFHRCxJQUFJLEdBQUcsR0FBYSxzQkFBc0IsRUFBRSxDQUFBO0lBQzVDLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFFZixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFOUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtRQUU1QixRQUFRLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzVCLEtBQUssSUFBSTtnQkFDUCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUVsRSxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQzt3QkFDdkIsOERBQThEO3dCQUM5RCxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtvQkFDekIsQ0FBQztvQkFFRCxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFBO2dCQUU1QixDQUFDO2dCQUVELE1BQUs7WUFFUCxLQUFLLEtBQUs7Z0JBQ1IsVUFBVTtnQkFDVixNQUFNO1FBQ1YsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQTtRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQTtRQUNyRCxDQUFDO0lBRUgsQ0FBQyxDQUFDLENBQUM7QUFFTCxDQUFDO0FBRUQsU0FBUyxPQUFPO0lBRWQsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqQyxPQUFPLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUV0QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFaEIsT0FBTyxDQUFDLFFBQVEsR0FBRztRQUVqQixJQUFJLFFBQVEsR0FBSSxPQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDMUQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztRQUVwRSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUVsQixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxHQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJGLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBRVQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRztvQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxHQUFHLEdBQUcsa0JBQWtCLENBQUE7b0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFBO29CQUU5QixJQUFJLE1BQU0sR0FBVyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFFdEIsQ0FBQyxDQUFDO1lBRUosQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1lBQ25DLENBQUM7WUFFRCxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDaEIsT0FBTTtRQUNSLENBQUM7SUFFSCxDQUFDLENBQUE7SUFFRCxPQUFNO0FBQ1IsQ0FBQztBQUVELFNBQVMsVUFBVTtJQUVqQixJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFFRCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBRXJCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVmLE1BQU0sQ0FBQyxNQUFNLEdBQUc7UUFDZCxLQUFLLEVBQUUsQ0FBQTtJQUNULENBQUMsQ0FBQTtJQUVELE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFFaEIsSUFBSSxRQUFRLEdBQUksTUFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBRXpELElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckYsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUVULE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRztnQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFBO2dCQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7Z0JBRTVCLElBQUksTUFBTSxHQUFXLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUVwQixJQUFJLFVBQVUsR0FBSSxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBc0IsQ0FBQTtnQkFDN0UsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQzFCLFVBQVUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1lBRWxDLENBQUMsQ0FBQztRQUVKLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFDbkMsQ0FBQztRQUVELE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUNmLE9BQU07SUFDUixDQUFDLENBQUE7QUFFSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBVztJQUU1QixRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ1osS0FBSyxZQUFZO1lBQ2YsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM3RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxNQUFNO1FBRVI7WUFFRSxNQUFNO0lBQ1YsQ0FBQztJQUVELE9BQU07QUFDUixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBSTtJQUV0QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFFbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtRQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRXZELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBRXpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxhQUFhO1lBQUUsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBRW5FLENBQUM7SUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUMsdUNBQXVDO0lBQzlFLE9BQU87QUFDVCxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBRWhCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEIsSUFBSSxNQUFNLEdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUE7QUFFOUIsQ0FBQyJ9" + webUI["html/js/base_ts.js"] = "dmFyIFNFUlZFUiA9IG5ldyBPYmplY3QoKTsKdmFyIEJVTEtfRURJVCA9IGZhbHNlOwp2YXIgQ09MVU1OX1RPX1NPUlQ7CnZhciBJTkFDVElWRV9DT0xVTU5fVE9fU09SVDsKdmFyIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwp2YXIgVU5ETyA9IG5ldyBPYmplY3QoKTsKdmFyIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CnZhciBXU19BVkFJTEFCTEUgPSBmYWxzZTsKY29uc3QgdG9vbHRpcFRyaWdnZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYnMtdG9nZ2xlPSJ0b29sdGlwIl0nKTsKY29uc3QgdG9vbHRpcExpc3QgPSBbLi4udG9vbHRpcFRyaWdnZXJMaXN0XS5tYXAodG9vbHRpcFRyaWdnZXJFbCA9PiBuZXcgYm9vdHN0cmFwLlRvb2x0aXAodG9vbHRpcFRyaWdnZXJFbCkpOwovLyBuZXcgQ2xpcGJvYXJkSlMoJy5jb3B5LWJ0bicpOwp2YXIgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZEpTKCcuY29weS1idG4nKTsKY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24gKGUpIHsKICAgIGNvbnN0IHRvb2x0aXAgPSBib290c3RyYXAuVG9vbHRpcC5nZXRJbnN0YW5jZShlLnRyaWdnZXIpOwogICAgdG9vbHRpcC5zZXRDb250ZW50KHsgJy50b29sdGlwLWlubmVyJzogJ0NvcGllZCEnIH0pOwp9KTsKY2xpcGJvYXJkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7CiAgICBjb25zb2xlLmxvZyhlKTsKfSk7CnZhciBwb3B1cE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKdmFyIGxvYWRpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKLy8gTWVuw7wKdmFyIG1lbnVJdGVtcyA9IG5ldyBBcnJheSgpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJwbGF5bGlzdCIsICJ7ey5tYWluTWVudS5pdGVtLnBsYXlsaXN0fX0iLCAibTN1LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5wbGF5bGlzdH19IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ4bWx0diIsICJ7ey5tYWluTWVudS5pdGVtLnhtbHR2fX0iLCAieG1sdHYucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnhtbHR2fX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oImZpbHRlciIsICJ7ey5tYWluTWVudS5pdGVtLmZpbHRlcn19IiwgImZpbHRlci5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuZmlsdGVyfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oIm1hcHBpbmciLCAie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iLCAibWFwcGluZy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUubWFwcGluZ319IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ1c2VycyIsICJ7ey5tYWluTWVudS5pdGVtLnVzZXJzfX0iLCAidXNlcnMucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnVzZXJzfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oInNldHRpbmdzIiwgInt7Lm1haW5NZW51Lml0ZW0uc2V0dGluZ3N9fSIsICJzZXR0aW5ncy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuc2V0dGluZ3N9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nIiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nfX0iLCAibG9nLnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2d9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nb3V0IiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nb3V0fX0iLCAibG9nb3V0LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2dvdXR9fSIpKTsKLy8gS2F0ZWdvcmllbiBmw7xyIGRpZSBFaW5zdGVsbHVuZ2VuCnZhciBzZXR0aW5nc0NhdGVnb3J5ID0gbmV3IEFycmF5KCk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmdlbmVyYWx9fSIsICJUaHJlYWRmaW5BdXRvVXBkYXRlLHNzZHAsdHVuZXIsZXBnU291cmNlLGVwZ0NhdGVnb3JpZXMsZXBnQ2F0ZWdvcmllc0NvbG9ycyxkdW1teSxkdW1teUNoYW5uZWwsaWdub3JlRmlsdGVycyxhcGkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmZpbGVzfX0iLCAidXBkYXRlLGZpbGVzLnVwZGF0ZSx0ZW1wLnBhdGgsY2FjaGUuaW1hZ2VzLG9taXRQb3J0cyx4ZXBnLnJlcGxhY2UubWlzc2luZy5pbWFnZXMseGVwZy5yZXBsYWNlLmNoYW5uZWwudGl0bGUsZW5hYmxlTm9uQXNjaWkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5Lm5ldHdvcmt9fSIsICJsaXN0ZW5pbmdJcCx0aHJlYWRmaW5Eb21haW4sdXNlSHR0cHMsZm9yY2VDbGllbnRIdHRwcyxmb3JjZUh0dHBzIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5zdHJlYW1pbmd9fSIsICJidWZmZXIsdWRweHksYnVmZmVyLnNpemUua2Isc3RvcmVCdWZmZXJJblJBTSxidWZmZXIudGltZW91dCx1c2VyLmFnZW50LGZmbXBlZy5wYXRoLGZmbXBlZy5vcHRpb25zLHZsYy5wYXRoLHZsYy5vcHRpb25zIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5iYWNrdXB9fSIsICJiYWNrdXAucGF0aCxiYWNrdXAua2VlcCIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkuYXV0aGVudGljYXRpb259fSIsICJhdXRoZW50aWNhdGlvbi53ZWIsYXV0aGVudGljYXRpb24ucG1zLGF1dGhlbnRpY2F0aW9uLm0zdSxhdXRoZW50aWNhdGlvbi54bWwsYXV0aGVudGljYXRpb24uYXBpIikpOwpmdW5jdGlvbiBzaG93UG9wVXBFbGVtZW50KGVsbSkgewogICAgc2hvd0VsZW1lbnQoZWxtLCB0cnVlKTsKICAgIC8vIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgLy8gICBzaG93RWxlbWVudCgicG9wdXAiLCB0cnVlKTsKICAgIC8vIH0sIDEwKTsKICAgIHJldHVybjsKfQpmdW5jdGlvbiBzaG93RWxlbWVudChlbG1JRCwgdHlwZSkgewogICAgaWYgKGVsbUlEID09ICJwb3B1cC1jdXN0b20iIHx8IGVsbUlEID09ICJwb3B1cCIpIHsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgcG9wdXBNb2RhbC5zaG93KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIHBvcHVwTW9kYWwuaGlkZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgaWYgKGVsbUlEID09ICJsb2FkaW5nIikgewogICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICBsb2FkaW5nTW9kYWwuc2hvdygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBsb2FkaW5nTW9kYWwuaGlkZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIGNoYW5nZUJ1dHRvbkFjdGlvbihlbGVtZW50LCBidXR0b25JRCwgYXR0cmlidXRlKSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50Lm9wdGlvbnNbZWxlbWVudC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dHRvbklEKS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7Cn0KZnVuY3Rpb24gZ2V0TG9jYWxEYXRhKGRhdGFUeXBlLCBpZCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJoZGhyIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgaWYgKGlkID09IC0xKSB7CiAgICAgICAgICAgICAgICBkYXRhWyJhY3RpdmUiXSA9IHRydWU7CiAgICAgICAgICAgICAgICBkYXRhWyJjYXNlU2Vuc2l0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGRhdGFbImRlc2NyaXB0aW9uIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImV4Y2x1ZGUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsiZmlsdGVyIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImluY2x1ZGUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsibmFtZSJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICAgICAgZGF0YVsieC1jYXRlZ29yeSJdID0gIiI7CiAgICAgICAgICAgICAgICBTRVJWRVJbInNldHRpbmdzIl1bImZpbHRlciJdW2lkXSA9IGRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsdGVyIl1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJ1c2VycyJdW2lkXVsiZGF0YSJdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtM3VHcm91cHMiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJkYXRhIl1bInBsYXlsaXN0Il1bIm0zdSJdWyJncm91cHMiXTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKfQpmdW5jdGlvbiBnZXRPYmpLZXlzKG9iaikgewogICAgdmFyIGtleXMgPSBuZXcgQXJyYXkoKTsKICAgIGZvciAodmFyIGkgaW4gb2JqKSB7CiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkgewogICAgICAgICAgICBrZXlzLnB1c2goaSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGtleXM7Cn0KZnVuY3Rpb24gZ2V0T3duT2JqUHJvcHMob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSA6IFtdOwp9CmZ1bmN0aW9uIGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKSB7CiAgICB2YXIgY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTsKICAgIGlmIChCVUxLX0VESVQgPT0gZmFsc2UpIHsKICAgICAgICByZXR1cm4gY2hhbm5lbHM7CiAgICB9CiAgICB2YXIgdHJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfdGFibGUiKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdHJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRyc1tpXS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIikgewogICAgICAgICAgICBpZiAodHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID09IHRydWUpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWxzLnB1c2godHJzW2ldLmlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjaGFubmVsczsKfQpmdW5jdGlvbiBzZWxlY3RBbGxDaGFubmVscyh0YWJsZV9uYW1lID0gImNvbnRlbnRfdGFibGUiKSB7CiAgICB2YXIgYnVsayA9IGZhbHNlOwogICAgdmFyIHRycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlX25hbWUpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgaWYgKHRyc1swXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9PSB0cnVlKSB7CiAgICAgICAgYnVsayA9IHRydWU7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0cnNbaV0uc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsKICAgICAgICAgICAgc3dpdGNoIChidWxrKSB7CiAgICAgICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICAgICAgdHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgdHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gYnVsa0VkaXQoKSB7CiAgICBCVUxLX0VESVQgPSAhQlVMS19FRElUOwogICAgdmFyIGNsYXNzTmFtZTsKICAgIHZhciByb3dzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYnVsayIpOwogICAgc3dpdGNoIChCVUxLX0VESVQpIHsKICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJidWxrIHNob3dCdWxrIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykgewogICAgICAgIHJvd3NbaV0uY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgICAgIHJvd3NbaV0uY2hlY2tlZCA9IGZhbHNlOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHNvcnRUYWJsZShjb2x1bW4sIHRhYmxlX25hbWUgPSAiY29udGVudF90YWJsZSIpIHsKICAgIC8vIGNvbnNvbGUubG9nKCJDT0xVTU46ICIgKyBjb2x1bW4pOwogICAgaWYgKChjb2x1bW4gPT0gQ09MVU1OX1RPX1NPUlQgJiYgdGFibGVfbmFtZSA9PSAiY29udGVudF90YWJsZSIpIHx8IChjb2x1bW4gPT0gSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgJiYgdGFibGVfbmFtZSA9PSAiaW5hY3RpdmVfY29udGVudF90YWJsZSIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVfbmFtZSk7CiAgICB2YXIgdGFibGVIZWFkID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRSIilbMF07CiAgICB2YXIgdGFibGVJdGVtcyA9IHRhYmxlSGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKTsKICAgIHZhciBzb3J0T2JqID0gbmV3IE9iamVjdCgpOwogICAgdmFyIHgsIHhWYWx1ZTsKICAgIHZhciB0YWJsZUhlYWRlcjsKICAgIHZhciBzb3J0QnlTdHJpbmcgPSBmYWxzZTsKICAgIGlmIChjb2x1bW4gPiAwICYmIENPTFVNTl9UT19TT1JUID4gMCAmJiB0YWJsZV9uYW1lID09ICJjb250ZW50X3RhYmxlIikgewogICAgICAgIHRhYmxlSXRlbXNbQ09MVU1OX1RPX1NPUlRdLmNsYXNzTmFtZSA9ICJwb2ludGVyIjsKICAgICAgICB0YWJsZUl0ZW1zW2NvbHVtbl0uY2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgIH0KICAgIGVsc2UgaWYgKGNvbHVtbiA+IDAgJiYgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPiAwICYmIHRhYmxlX25hbWUgPT0gImluYWN0aXZlX2NvbnRlbnRfdGFibGUiKSB7CiAgICAgICAgdGFibGVJdGVtc1tJTkFDVElWRV9DT0xVTU5fVE9fU09SVF0uY2xhc3NOYW1lID0gInBvaW50ZXIiOwogICAgICAgIHRhYmxlSXRlbXNbY29sdW1uXS5jbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgfQogICAgaWYgKHRhYmxlX25hbWUgPT0gImNvbnRlbnRfdGFibGUiKSB7CiAgICAgICAgQ09MVU1OX1RPX1NPUlQgPSBjb2x1bW47CiAgICB9CiAgICBlbHNlIGlmICh0YWJsZV9uYW1lID09ICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIikgewogICAgICAgIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID0gY29sdW1uOwogICAgfQogICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzOwogICAgaWYgKHJvd3NbMV0gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdGFibGVIZWFkZXIgPSByb3dzWzBdOwogICAgICAgIHggPSByb3dzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpW2NvbHVtbl07CiAgICAgICAgZm9yIChpID0gMTsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgeCA9IHJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIilbY29sdW1uXTsKICAgICAgICAgICAgc3dpdGNoICh4LmNoaWxkTm9kZXNbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSU5QVVQiKVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicCI6CiAgICAgICAgICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUCIpWzBdLmlubmVyVGV4dC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDogY29uc29sZS5sb2coeC5jaGlsZE5vZGVzWzBdLnRhZ05hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh4VmFsdWUgPT0gIiIpIHsKICAgICAgICAgICAgICAgIHhWYWx1ZSA9IGk7CiAgICAgICAgICAgICAgICBzb3J0T2JqW2ldID0gcm93c1tpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoaXNOYU4oeFZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHBhcnNlRmxvYXQoeFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9ialt4VmFsdWVdID0gcm93c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgICAgICBzb3J0QnlTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBzb3J0T2JqW3hWYWx1ZS50b0xvd2VyQ2FzZSgpICsgaV0gPSByb3dzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3aGlsZSAodGFibGUuZmlyc3RDaGlsZCkgewogICAgICAgICAgICB0YWJsZS5yZW1vdmVDaGlsZCh0YWJsZS5maXJzdENoaWxkKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNvcnRWYWx1ZXMgPSBnZXRPYmpLZXlzKHNvcnRPYmopOwogICAgICAgIGlmIChzb3J0QnlTdHJpbmcgPT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoY29sdW1uID09IDMpIHsKICAgICAgICAgICAgICAgIHZhciBjb2xsYXRvciA9IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogJ2Jhc2UnIH0pOwogICAgICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KGNvbGxhdG9yLmNvbXBhcmUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZ1bmN0aW9uIHNvcnRGbG9hdChhLCBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYSAtIGI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KHNvcnRGbG9hdCk7CiAgICAgICAgfQogICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRhYmxlSGVhZGVyKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRWYWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoc29ydE9ialtzb3J0VmFsdWVzW2ldXSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaE9iaigpIHsKICAgIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgdmFyIGNoYW5uZWxzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgIHZhciBjaGFubmVsS2V5cyA9IFsieC1hY3RpdmUiLCAieC1jaGFubmVsSUQiLCAieC1uYW1lIiwgIl9maWxlLm0zdS5uYW1lIiwgIngtZ3JvdXAtdGl0bGUiLCAieC14bWx0di1maWxlIl07CiAgICBjaGFubmVscy5mb3JFYWNoKGlkID0+IHsKICAgICAgICBjaGFubmVsS2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgIGlmIChrZXkgPT0gIngtYWN0aXZlIikgewogICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhW2lkXVtrZXldKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSAib25saW5lICI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSF9NQVBQSU5HW2lkXSA9ICJvZmZsaW5lICI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGtleSA9PSAieC14bWx0di1maWxlIikgewogICAgICAgICAgICAgICAgICAgIHZhciB4bWx0dkZpbGUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtpZF1ba2V5XSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoeG1sdHZGaWxlICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSBTRUFSQ0hfTUFQUElOR1tpZF0gKyB4bWx0dkZpbGUgKyAiICI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gU0VBUkNIX01BUFBJTkdbaWRdICsgZGF0YVtpZF1ba2V5XSArICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gZW5hYmxlR3JvdXBTZWxlY3Rpb24oc2VsZWN0b3IpIHsKICAgIHZhciBsYXN0Y2hlY2sgPSBudWxsOyAvLyBubyBjaGVja2JveGVzIGNsaWNrZWQgeWV0CiAgICAvLyBnZXQgZGVzaXJlZCBjaGVja2JveGVzCiAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgLy8gbG9vcCBvdmVyIGNoZWNrYm94ZXMgdG8gYWRkIGV2ZW50IGxpc3RlbmVyCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGNoZWNrYm94ZXMsIGZ1bmN0aW9uIChjYngsIGlkeCkgewogICAgICAgIGNieC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgLy8gdGVzdCBmb3Igc2hpZnQga2V5LCBub3QgZmlyc3QgY2hlY2tib3gsIGFuZCBub3Qgc2FtZSBjaGVja2JveAogICAgICAgICAgICBpZiAoZXZ0LnNoaWZ0S2V5ICYmIG51bGwgIT09IGxhc3RjaGVjayAmJiBpZHggIT09IGxhc3RjaGVjaykgewogICAgICAgICAgICAgICAgLy8gZ2V0IHJhbmdlIG9mIGNoZWNrcyBiZXR3ZWVuIGxhc3QtY2hlY2tib3ggYW5kIHNoaWZ0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAvLyBNYXRoLm1pbi9tYXggZG9lcyBvdXIgc29ydGluZyBmb3IgdXMKICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGNoZWNrYm94ZXMsIE1hdGgubWluKGxhc3RjaGVjaywgaWR4KSwgTWF0aC5tYXgobGFzdGNoZWNrLCBpZHgpKQogICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsb29wIG92ZXIgZWFjaAogICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChjY2J4KSB7CiAgICAgICAgICAgICAgICAgICAgY2NieC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhc3RjaGVjayA9IGlkeDsgLy8gc2V0IHRoaXMgY2hlY2tib3ggYXMgbGFzdC1jaGVja2VkIGZvciBsYXRlcgogICAgICAgIH0pOwogICAgfSk7Cn0KZnVuY3Rpb24gc2VhcmNoSW5NYXBwaW5nKCkgewogICAgdmFyIHNlYXJjaFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaE1hcHBpbmciKS52YWx1ZTsKICAgIHZhciB0cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF90YWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgaWQgPSB0cnNbaV0uZ2V0QXR0cmlidXRlKCJpZCIpOwogICAgICAgIHZhciBlbGVtZW50ID0gU0VBUkNIX01BUFBJTkdbaWRdOwogICAgICAgIHN3aXRjaCAoZWxlbWVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxOdW1iZXJzKGVsZW1lbnRzKSB7CiAgICB2YXIgc3RhcnRpbmdfbnVtYmVyX2VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgieC1jaGFubmVscy1zdGFydCIpWzBdOwogICAgdmFyIGVsZW1zID0gZWxlbWVudHMuc3BsaXQoIiwiKTsKICAgIHZhciBzdGFydGluZ19udW1iZXIgPSBwYXJzZUZsb2F0KHN0YXJ0aW5nX251bWJlcl9lbGVtZW50LnZhbHVlKTsKICAgIHZhciBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgIGVsZW1zLmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTsKICAgICAgICB2YXIgaW5wdXQgPSBlbGVtLmNoaWxkTm9kZXNbMV0uZmlyc3RDaGlsZDsKICAgICAgICBpbnB1dC52YWx1ZSA9IHN0YXJ0aW5nX251bWJlci50b1N0cmluZygpOwogICAgICAgIGRhdGFbZWxlbWVudF1bIngtY2hhbm5lbElEIl0gPSBzdGFydGluZ19udW1iZXIudG9TdHJpbmcoKTsKICAgICAgICBzdGFydGluZ19udW1iZXIrKzsKICAgIH0pOwogICAgaWYgKENPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxKTsKICAgIH0KICAgIGlmIChJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSwgImluYWN0aXZlX2NvbnRlbnRfcGFnZSIpOwogICAgfQp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxOdW1iZXIoZWxlbWVudCkgewogICAgdmFyIGRiSUQgPSBlbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZDsKICAgIHZhciBuZXdOdW1iZXIgPSBwYXJzZUZsb2F0KGVsZW1lbnQudmFsdWUpOwogICAgdmFyIGNoYW5uZWxOdW1iZXJzID0gW107CiAgICB2YXIgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICB2YXIgY2hhbm5lbHMgPSBnZXRPYmpLZXlzKGRhdGEpOwogICAgaWYgKGlzTmFOKG5ld051bWJlcikpIHsKICAgICAgICBhbGVydCgie3suYWxlcnQuaW52YWxpZENoYW5uZWxOdW1iZXJ9fSIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNoYW5uZWxzLmZvckVhY2goaWQgPT4gewogICAgICAgIHZhciBjaGFubmVsTnVtYmVyID0gcGFyc2VGbG9hdChkYXRhW2lkXVsieC1jaGFubmVsSUQiXSk7CiAgICAgICAgY2hhbm5lbE51bWJlcnMucHVzaChjaGFubmVsTnVtYmVyKTsKICAgIH0pOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsTnVtYmVycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjaGFubmVsTnVtYmVycy5pbmRleE9mKG5ld051bWJlcikgPT0gLTEpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChNYXRoLmZsb29yKG5ld051bWJlcikgPT0gbmV3TnVtYmVyKSB7CiAgICAgICAgICAgIG5ld051bWJlciA9IG5ld051bWJlciArIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXdOdW1iZXIgPSBuZXdOdW1iZXIgKyAwLjE7CiAgICAgICAgICAgIG5ld051bWJlci50b0ZpeGVkKDEpOwogICAgICAgICAgICBuZXdOdW1iZXIgPSBNYXRoLnJvdW5kKG5ld051bWJlciAqIDEwKSAvIDEwOwogICAgICAgIH0KICAgIH0KICAgIGRhdGFbZGJJRF1bIngtY2hhbm5lbElEIl0gPSBuZXdOdW1iZXIudG9TdHJpbmcoKTsKICAgIGVsZW1lbnQudmFsdWUgPSBuZXdOdW1iZXI7CiAgICBpZiAoQ09MVU1OX1RPX1NPUlQgPT0gMSkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgc29ydFRhYmxlKDEpOwogICAgfQogICAgaWYgKElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxLCAiaW5hY3RpdmVfY29udGVudF9wYWdlIik7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gYmFja3VwKCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBjb25zb2xlLmxvZygiQmFja3VwIGRhdGEiKTsKICAgIHZhciBjbWQgPSAiVGhyZWFkZmluQmFja3VwIjsKICAgIGNvbnNvbGUubG9nKCJTRU5EIFRPIFNFUlZFUiIpOwogICAgY29uc29sZS5sb2coZGF0YSk7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdG9nZ2xlQ2hhbm5lbFN0YXR1cyhpZCkgewogICAgdmFyIGVsZW1lbnQ7CiAgICB2YXIgc3RhdHVzOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUiKSkgewogICAgICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUiKTsKICAgICAgICBzdGF0dXMgPSAoY2hlY2tib3gpLmNoZWNrZWQ7CiAgICB9CiAgICB2YXIgaWRzID0gZ2V0QWxsU2VsZWN0ZWRDaGFubmVscygpOwogICAgaWYgKGlkcy5sZW5ndGggPT0gMCkgewogICAgICAgIGlkcy5wdXNoKGlkKTsKICAgIH0KICAgIGlkcy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgIGNoYW5uZWxbIngtYWN0aXZlIl0gPSBzdGF0dXM7CiAgICAgICAgc3dpdGNoIChjaGFubmVsWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIGlmIChjaGFubmVsWyJ4LXhtbHR2LWZpbGUiXSA9PSAiLSIgfHwgY2hhbm5lbFsieC1tYXBwaW5nIl0gPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEJVTEtfRURJVCA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGVydChjaGFubmVsWyJ4LW5hbWUiXSArICI6IE1pc3NpbmcgWE1MVFYgZmlsZSAvIGNoYW5uZWwiKQogICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFsieC1hY3RpdmUiXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIC8vIGNvZGUuLi4KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhbm5lbFsieC1hY3RpdmUiXSA9PSBmYWxzZSkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gImFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgfSk7Cn0KZnVuY3Rpb24gcmVzdG9yZSgpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgcmVzdG9yZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgidHlwZSIsICJmaWxlIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogICAgcmVzdG9yZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiIik7CiAgICByZXN0b3JlLmlkID0gInVwbG9hZCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlc3RvcmUpOwogICAgcmVzdG9yZS5jbGljaygpOwogICAgcmVzdG9yZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZmlsZW5hbWUgPSByZXN0b3JlLmZpbGVzWzBdLm5hbWU7CiAgICAgICAgdmFyIGNoZWNrID0gY29uZmlybSgiRmlsZTogIiArIGZpbGVuYW1lICsgIlxue3suY29uZmlybS5yZXN0b3JlfX0iKTsKICAgICAgICBpZiAoY2hlY2sgPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgICAgdmFyIGZpbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPWZpbGVdJykuZmlsZXNbMF07CiAgICAgICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNtZCA9ICJUaHJlYWRmaW5SZXN0b3JlIjsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJiYXNlNjQiXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBhbGVydCgiRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdG9yZS5yZW1vdmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdXBsb2FkTG9nbygpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgdXBsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgibmFtZSIsICIiKTsKICAgIHVwbG9hZC5pZCA9ICJ1cGxvYWQiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1cGxvYWQpOwogICAgdXBsb2FkLmNsaWNrKCk7CiAgICB1cGxvYWQub25ibHVyID0gZnVuY3Rpb24gKCkgewogICAgICAgIGFsZXJ0KCk7CiAgICB9OwogICAgdXBsb2FkLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBmaWxlbmFtZSA9IHVwbG9hZC5maWxlc1swXS5uYW1lOwogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgIHZhciBmaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzWzBdOwogICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICAgIHZhciBjbWQgPSAidXBsb2FkTG9nbyI7CiAgICAgICAgICAgICAgICBkYXRhWyJiYXNlNjQiXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICBkYXRhWyJmaWxlbmFtZSJdID0gZmlsZS5uYW1lOwogICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgICAgICAgICAgICAgdmFyIHVwZGF0ZUxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWljb24nKTsKICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ28uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgdXBkYXRlTG9nby5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhbGVydCgiRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkIik7CiAgICAgICAgfQogICAgICAgIHVwbG9hZC5yZW1vdmUoKTsKICAgICAgICByZXR1cm47CiAgICB9Owp9CmZ1bmN0aW9uIGNoZWNrVW5kbyhrZXkpIHsKICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgY2FzZSAiZXBnTWFwcGluZyI6CiAgICAgICAgICAgIGlmIChVTkRPLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgIFNFUlZFUlsieGVwZyJdW2tleV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVORE9ba2V5XSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgVU5ET1trZXldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShTRVJWRVJbInhlcGciXVtrZXldKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc29ydFNlbGVjdChlbGVtKSB7CiAgICB2YXIgdG1wQXJ5ID0gW107CiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IGVsZW1bZWxlbS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5vcHRpb25zLmxlbmd0aDsgaSsrKQogICAgICAgIHRtcEFyeS5wdXNoKGVsZW0ub3B0aW9uc1tpXSk7CiAgICB0bXBBcnkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKGEudGV4dCA8IGIudGV4dCkgPyAtMSA6IDE7IH0pOwogICAgd2hpbGUgKGVsZW0ub3B0aW9ucy5sZW5ndGggPiAwKQogICAgICAgIGVsZW0ub3B0aW9uc1swXSA9IG51bGw7CiAgICB2YXIgbmV3U2VsZWN0ZWRJbmRleCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcEFyeS5sZW5ndGg7IGkrKykgewogICAgICAgIGVsZW0ub3B0aW9uc1tpXSA9IHRtcEFyeVtpXTsKICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnZhbHVlID09IHNlbGVjdGVkVmFsdWUpCiAgICAgICAgICAgIG5ld1NlbGVjdGVkSW5kZXggPSBpOwogICAgfQogICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gbmV3U2VsZWN0ZWRJbmRleDsgLy8gU2V0IG5ldyBzZWxlY3RlZCBpbmRleCBhZnRlciBzb3J0aW5nCiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdXBkYXRlTG9nKCkgewogICAgY29uc29sZS5sb2coIlRPS0VOIik7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcigidXBkYXRlTG9nIik7CiAgICBzZXJ2ZXIucmVxdWVzdChuZXcgT2JqZWN0KCkpOwp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2VfdHMuanMubWFw" webUI["html/js/logs_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nc190cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2xvZ3NfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHO0lBRVAsU0FBUyxDQUFDLEtBQVk7UUFFcEIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQTtRQUNsQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUE7UUFDaEMsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFBO1FBQ2hDLENBQUM7UUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUV6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBRUY7QUFFRCxTQUFTLFFBQVEsQ0FBQyxNQUFjO0lBRTlCLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFbkIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQy9CLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFaEQsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFbEIsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFFbkIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUV0QyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRW5CLENBQUMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDO1FBRVQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFFbkIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFFM0MsQ0FBQztJQUVILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVULENBQUM7QUFFRCxTQUFTLFNBQVM7SUFFaEIsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFBO0lBQ3JCLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7SUFDdkIsSUFBSSxNQUFNLEdBQVUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUV0QixDQUFDIn0=" - webUI["html/img/logout.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xM1QxMToxMDoxODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cg27QeEAAANQSURBVGgF7Zk9aBRBGIZzSRSN8YdoCpEkghCCqK1o4g9IsBCCNmIniCAiWAhqI8G02qiIoqCCWggSEcFKEFPYpVAU8QdFUyiKRpRokBjP55OdZDLZvZnZ7N3Ngh887M7sN/O9797t7c5eTc3/8D8DxWKxGS5Ai//oAEYgvB4OwleQaAtAlp8ERG+Bp6Jei/wYQfRy6NfE67vhG0FtA/TBqK7c2A/bCGJ3wpAhOq4ZphGUroEHcYoT+sIygsgmOAu/EwQndYdhBHV1sB8+Jym19Lf6/faVIRuBG+GRRajtcPWMoKwFbtgUOh6vvBGEzYFj8MNRpEtaZY2gaAe8cVHmmXOc/K3QXIZv/+SUFFgJ96AS8ZwiZ6Ab6iZVzGCPiRbCKRiDasQHip6EdD/PDKyFvfAJQgg5kVfB/VoieT0MQojxE1G9UG/7otWS0A7pPkrb7DM/Ppcp+mAAM/bFGEmL4RL8gVDjI8JWOZ0bEjvhSahO0CXXsLMZWZYegREIMV4jaoHTJyNJJLfC7RCdoOm6sxGVyKAeeBegoU6l0XmLiXlwAqp1o4w7j3d1AwW9YdtnNrnQzkOXLddyfAPHv8Ey6ABpd8N88In2QqHwymfARC5mCrAH0i6qGDr9jk3fbNgFz8A1DkwIS7tDpSVwGdLcexIfPZhPHpf2wS+wRX9a/dPGUakLzBdwNgGJRlQBJtgMw5aJ3qr8TLYUmwVHwXXxZTUiwphvHYxDUnzPxIA5CdXa4E5SVa3fyUhkRtYqpSKbNYxpJiq+ncpDJar7GGlknvcl5mqM05BZH4Xl3iOLpLh7j7OR6MScSzAykplg20QIWA0PDSG+RuTdQVy8sNXP9DgK5N4jK9AvkRpfI4sYF/c2836mQl0nQ4zce66AfZFkTMqYl2DGaSMt/CYOHpsuaPco5bLUzUuMGkLHaQ+ovjwZUZrVdpAHRnnw/Bd5MrJCiY62t4x2+E2uBfkfRg95TdSkK8/LJ7JWF83+Nb5Ww0Zf+E3OviwXVMgT8dLwVRsKEd0A+uP8biMlH01MHAYVF/Oh2lCJenkDqpbUN9nPyzU91QnCRbyEPEXn1sQhxMv7tG1T7cW3rK/r44eVtxfxm6gwBh38zJqPJuUtXu3Z/wLwuBaBLgMkKwAAAABJRU5ErkJggg==" - webUI["html/index.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPCEtLS0NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4gDQogICAgLS0+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8IS0tIGZvbnQtYXdlc29tZSAtLT4NCiAgPGxpbmsNCiAgICByZWw9InN0eWxlc2hlZXQiDQogICAgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzUuMTQuMC9jc3MvYWxsLm1pbi5jc3MiDQogIC8+DQogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jhc2UuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQogIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaW1nL3RocmVhZGZpbi5pY28iPg0KDQo8L2hlYWQ+DQoNCjxib2R5IG9ubG9hZD0iamF2YXNjcmlwdDogUGFnZVJlYWR5KCk7Ij4NCg0KICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+DQogIDwvZGl2Pg0KDQogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cF9oZWFkZXIiPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgICAgICAgICAgPGRpdiBpZD0icG9wdXAtY3VzdG9tIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIiBpZD0icG9wdXBfZm9vdGVyIj48L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0ic2VydmVyX2luZm9ybWF0aW9uIj4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwteGwiPg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+DQogICAgICAgICAgPGgzIGNsYXNzPSJtb2RhbC10aXRsZSI+U2VydmVyIEluZm9ybWF0aW9uPC9oMz4NCiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+DQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5TZXJ2ZXIgSW5mb3JtYXRpb248L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0idmVyc2lvbiIgY2xhc3M9ImZvcm0tbGFiZWwiPlRocmVhZGZpbiBWZXJzaW9uPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0idmVyc2lvbiIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImJyYW5jaCIgY2xhc3M9ImZvcm0tbGFiZWwiPlRocmVhZGZpbiBCcmFuY2g8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJicmFuY2giIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJlcnJvcnMiIGNsYXNzPSJmb3JtLWxhYmVsIj5FcnJvcnM8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJlcnJvcnMiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ3YXJuaW5ncyIgY2xhc3M9ImZvcm0tbGFiZWwiPldhcm5pbmdzPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0id2FybmluZ3MiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+U3RyZWFtIEluZm9ybWF0aW9uPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRWUiIgY2xhc3M9ImZvcm0tbGFiZWwiPkRWUiBJUDwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9IkRWUiIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Im0zdS11cmwiIGNsYXNzPSJmb3JtLWxhYmVsIj5NM1UgVVJMIChTcGVjaWZpYyBncm91cHM6IFtodHRwOi8vLi4uP2dyb3VwLXRpdGxlPWZvbyxiYXJdKTwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibTN1LXVybCIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seT4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaW5wdXQtZ3JvdXAtdGV4dCBjb3B5LWJ0biIgZGF0YS1jbGlwYm9hcmQtdGFyZ2V0PSIjbTN1LXVybCIgZGF0YS1icy10aXRsZT0iQ29weSB0byBjbGlwYm9hcmQiIGRhdGEtYnMtdG9nZ2xlPSJ0b29sdGlwIiBkYXRhLWJzLXBsYWNlbWVudD0iYm90dG9tIj48aSBjbGFzcz0iZmFyIGZhLWNsaXBib2FyZCI+PC9pPjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ4ZXBnLXVybCIgY2xhc3M9ImZvcm0tbGFiZWwiPlhNTFRWIFVSTDwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZy11cmwiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHk+DQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImlucHV0LWdyb3VwLXRleHQgY29weS1idG4iIGRhdGEtY2xpcGJvYXJkLXRhcmdldD0iI3hlcGctdXJsIiBkYXRhLWJzLXRpdGxlPSJDb3B5IHRvIGNsaXBib2FyZCIgZGF0YS1icy10b2dnbGU9InRvb2x0aXAiIGRhdGEtYnMtcGxhY2VtZW50PSJib3R0b20iPjxpIGNsYXNzPSJmYXIgZmEtY2xpcGJvYXJkIj48L2k+PC9idXR0b24+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0cmVhbXMiIGNsYXNzPSJmb3JtLWxhYmVsIj5GaWx0ZXJlZCBDaGFubmVsczwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9InN0cmVhbXMiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ4ZXBnIiBjbGFzcz0iZm9ybS1sYWJlbCI+TWFwcGVkIENoYW5uZWxzPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSIvd2ViIj4NCiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4NCiAgICAgIDwvYT4NCiAgICAgIDxidXR0b24gY2xhc3M9Im5hdmJhci10b2dnbGVyIiB0eXBlPSJidXR0b24iIGRhdGEtYnMtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS1icy10YXJnZXQ9IiNuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBhcmlhLWNvbnRyb2xzPSJuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1sYWJlbD0iVG9nZ2xlIG5hdmlnYXRpb24iPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXItaWNvbiI+PC9zcGFuPg0KICAgICAgPC9idXR0b24+DQogICAgICA8ZGl2IGNsYXNzPSJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2UiIGlkPSJuYXZiYXJTdXBwb3J0ZWRDb250ZW50Ij4NCiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIiBpZD0ibWFpbi1tZW51Ij4NCiAgICAgICAgPC91bD4NCiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIj4NCiAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1saW5rIiBkYXRhLWJzLXRvZ2dsZT0ibW9kYWwiIGRhdGEtYnMtdGFyZ2V0PSIjc2VydmVyX2luZm9ybWF0aW9uIj48aSBjbGFzcz0iZmFzIGZhLWluZm8tY2lyY2xlIj48L2k+IFNlcnZlciBJbmZvcm1hdGlvbjwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9uYXY+DQogIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbGV4Ij4NCiAgICA8ZGl2IGNsYXNzPSJyb3ciPg0KICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIGNvbC1zbS0xMiI+DQogICAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJ0YWJsZS1yZXNwb25zaXZlIj48L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9InJvdyIgaWQ9Im15U3RyZWFtc0JveCI+DQogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtc20tMTIgdGFibGUtcmVzcG9uc2l2ZSBmbG9hdC1zdGFydCI+DQogICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtZGFyayB0YWJsZS1ib3JkZXJlZCBjYXB0aW9uLXRvcCIgaWQ9ImFjdGl2ZVN0cmVhbXMiPjwvdGFibGU+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC01IGNvbC1zbS0xMiB0YWJsZS1yZXNwb25zaXZlIGZsb2F0LWVuZCI+DQogICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtZGFyayB0YWJsZS1ib3JkZXJlZCBjYXB0aW9uLXRvcCIgaWQ9ImluYWN0aXZlU3RyZWFtcyI+PC90YWJsZT4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbmV0d29ya190cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9tZW51X3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL3NldHRpbmdzX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2xvZ3NfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYmFzZV90cy5qcyI+PC9zY3JpcHQ+DQo8L2JvZHk+DQoNCjwvaHRtbD4=" - webUI["html/js/classes_ts.js"] = "dmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkgew0KICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHsNCiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fA0KICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fA0KICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07DQogICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpOw0KICAgIH07DQogICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7DQogICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7DQogICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfQ0KICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7DQogICAgfTsNCn0pKCk7DQp2YXIgTWFpbk1lbnUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7DQogICAgZnVuY3Rpb24gTWFpbk1lbnUoKSB7DQogICAgICAgIHRoaXMuRG9jdW1lbnRJRCA9ICJtYWluLW1lbnUiOw0KICAgICAgICB0aGlzLkhUTUxUYWcgPSAiTEkiOw0KICAgIH0NCiAgICBNYWluTWVudS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKCkgew0KICAgICAgICBjb25zb2xlLmxvZyh0aGlzLkRvY3VtZW50SUQpOw0KICAgIH07DQogICAgcmV0dXJuIE1haW5NZW51Ow0KfSgpKTsNCnZhciBNYWluTWVudUl0ZW0gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7DQogICAgX19leHRlbmRzKE1haW5NZW51SXRlbSwgX3N1cGVyKTsNCiAgICBmdW5jdGlvbiBNYWluTWVudUl0ZW0oKSB7DQogICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsNCiAgICB9DQogICAgTWFpbk1lbnVJdGVtLnByb3RvdHlwZS5jcmVhdGUyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5IVE1MVGFnKTsNCiAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSB0aGlzLlZhbHVlOw0KICAgICAgICBjb25zb2xlLmxvZyhlbGVtZW50KTsNCiAgICB9Ow0KICAgIHJldHVybiBNYWluTWVudUl0ZW07DQp9KE1haW5NZW51KSk7DQpmdW5jdGlvbiBwYWdlUmVhZHkoKSB7DQogICAgdmFyIGl0ZW0gPSBuZXcgTWFpbk1lbnVJdGVtKCk7DQogICAgaXRlbS5WYWx1ZSA9ICJUZXN0IjsNCiAgICBpdGVtLmNyZWF0ZTIoKTsNCn0NCg==" - webUI["html/login.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHk+DQogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSIvd2ViIj4NCiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4NCiAgICAgIDwvYT4NCiAgICA8L2Rpdj4NCiAgPC9uYXY+DQogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj4NCiAgICAgICAgICAgIDxoMz57ey5sb2dpbi5oZWFkbGluZX19PC9oMz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgPHAgaWQ9ImVyciIgY2xhc3M9ImVycm9yTXNnIGNlbnRlciI+e3suYXV0aGVudGljYXRpb25FcnJ9fTwvcD4NCiAgICAgICAgICAgIDxmb3JtIGlkPSJhdXRoZW50aWNhdGlvbiIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgICAgICAgPGg1Pnt7LmxvZ2luLnVzZXJuYW1lLnRpdGxlfX06PC9oNT4NCiAgICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VybmFtZSIgdHlwZT0idGV4dCIgbmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJVc2VybmFtZSIgdmFsdWU9IiI+DQogICAgICAgICAgICAgIDxoNT57ey5sb2dpbi5wYXNzd29yZC50aXRsZX19OjwvaDU+DQogICAgICAgICAgICAgIDxpbnB1dCBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiB2YWx1ZT0iIj4NCiAgICAgICAgICAgICAgPGlucHV0IGlkPSJzdWJtaXQiIGNsYXNzPSIiIHR5cGU9InN1Ym1pdCIgb25zdWJtaXQ9ImphdmFzY3JpcHQ6bG9naW4oKTsiIHZhbHVlPSJ7ey5idXR0b24ubG9naW59fSI+DQogICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KDQogIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1BM3JKRDg1Nktvd1NiN2R3bFpkWUVrTzM5R2FnaTd2SXNGMGpyUkFvUW1ES0t0UUJIVXVMWjlBc1N2NGpENFhhIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9uZXR3b3JrX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2F1dGhlbnRpY2F0aW9uX3RzLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCg0KPC9odG1sPg==" - webUI["html/img/mapping.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0wMlQxMjowODo5NzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CpRxQsEAAAJLSURBVGgF7VoxTgMxEMwBHWlAaeABVCEtBcoD+EBewCdCyQsQtLyAPCBvCBSRIBUPCF1ogqBJjlkrezGr6HTrO98lhy1Z9trr2VmvnbMNjUadUhzHLeQB8hw5LS3QOUbubvIf7X3kKXIZibgS51bCZdWgMT6D8nECgArkngagQN0B8dhbkblalVmLIyheCGUthhjuLBq77MihA0xTjHHBEBBOorHLjjghbNOg4Mg2RYO4hIiEiHiaAV5aSwf8hRgjZdHtTTTc2ZFXpZkY+hMx5k3IZYlr7jgudJHp2JElLaF0K1mirYn8nAWgQB3ibM59ERNCA52d6Nghv9isQiUtn0kURe92I9eBcYA6YZxym8dyDuwRuMw82gjQYQbsPdLDdNCROO0US3uEfp3usTZpjf5J2CNtNFwjl7FHvmBnCB5PCQkQoJudJtGvE23sJEFuI39rQArS7dskXK6nlwkAKiB1VxAxLcyUePAH8cQmlbEul4+UM8LkVjPc2ZHcaFUDBEeqjoC0HyIiZ6RqOUSk6ghI+xyRD9mRQTYfIktPylaX16rhzo48KE29QH8kxjxC/hFtZYiGe70OjWVMW7Dx32bA3iO7//iAC8DOPweZFQhH6O+CmkRvW2f28oV8owEoUHdMPPg70rFJZajTkqT7uZ3ObaHEuuHOjnCpsb8vlKUsur2JhruLA94Y5QEOjuSZPR9jQ0R8zGoezNpFhN5RtUm+/bpgaG1u0jd2OSLDTRopbZ/okxcrLUYKvKprbRfHhXr8m5PK/y1V/gWRKLfiNSmxEAAAAABJRU5ErkJggg==" - webUI["html/img/stream-limit.jpg"] = "/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA3LjItYzAwMCA3OS4xYjY1YTc5YjQsIDIwMjIvMDYvMTMtMjI6MDE6MDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy41IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIyQTc2MDAzNDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIyQTc2MDA0NDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjJBNzYwMDE0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjJBNzYwMDI0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAQCwsLDAsQDAwQFw8NDxcbFBAQFBsfFxcXFxcfHhcaGhoaFx4eIyUnJSMeLy8zMy8vQEBAQEBAQEBAQEBAQEBAAREPDxETERUSEhUUERQRFBoUFhYUGiYaGhwaGiYwIx4eHh4jMCsuJycnLis1NTAwNTVAQD9AQEBAQEBAQEBAQED/wAARCAQ4B4ADASIAAhEBAxEB/8QAtAABAAIDAQEBAAAAAAAAAAAAAAYHAwQFAgEIAQEAAwEBAQAAAAAAAAAAAAAAAwQFAQIGEAEAAgEDAQMFCwgIAwcDBQEAAQIDEQQFEiExBkFRcRMHYYGRIjJScrIzNDahsXOzFHQVNcHRQmKCkiOTVBYX4aLC4kNTw9LTJPBjg0RVJREBAAIBAgIIBQQCAgMAAAAAAAECAxEEMRIhUXEiMhMzBUFhUnI0gZGhI0JisRTB0RX/2gAMAwEAAhEDEQA/AK/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxPCHhTgeT4HBvN7tfW7i9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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2Q==" - webUI["html/js/configuration_ts.js"] = "Y2xhc3MgV2l6YXJkQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDQiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQp9CmNsYXNzIFdpemFyZEl0ZW0gZXh0ZW5kcyBXaXphcmRDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihrZXksIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICB9CiAgICBjcmVhdGVXaXphcmQoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBrZXkgPSB0aGlzLmtleTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGVzY3JpcHRpb247CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChoZWFkbGluZSk7CiAgICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIjEiLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIlhFUEciLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBrZXksICIiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sud2l6YXJkLm0zdS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLm0zdS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0Iiwga2V5LCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LndpemFyZC54bWx0di5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLnhtbHR2LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhrZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBwcmUuaW5uZXJIVE1MID0gZGVzY3JpcHRpb247CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHByZSk7CiAgICAgICAgY29uc29sZS5sb2coaGVhZGxpbmUsIGtleSk7CiAgICB9Cn0KZnVuY3Rpb24gcmVhZHlGb3JDb25maWd1cmF0aW9uKHdpemFyZCkgewogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoImdldFNlcnZlckNvbmZpZyIpOwogICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgY29uZmlndXJhdGlvbldpemFyZFt3aXphcmRdLmNyZWF0ZVdpemFyZCgpOwp9CmZ1bmN0aW9uIHNhdmVXaXphcmQoKSB7CiAgICB2YXIgY21kID0gInNhdmVXaXphcmQiOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgICB2YXIgY29uZmlnID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndpemFyZCIpOwogICAgdmFyIHdpemFyZCA9IG5ldyBPYmplY3QoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBjb25maWdbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gY29uZmlnW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2l6YXJkW25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNvbmZpZ1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbmZpZ1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gbmFtZS50b1VwcGVyQ2FzZSgpICsgIjogIiArICJ7ey5hbGVydC5taXNzaW5nSW5wdXR9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gY29kZS4uLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBkYXRhWyJ3aXphcmQiXSA9IHdpemFyZDsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwp9Ci8vIFdpemFyZAp2YXIgY29uZmlndXJhdGlvbldpemFyZCA9IG5ldyBBcnJheSgpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oInR1bmVyIiwgInt7LndpemFyZC50dW5lci50aXRsZX19IikpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oImVwZ1NvdXJjZSIsICJ7ey53aXphcmQuZXBnU291cmNlLnRpdGxlfX0iKSk7CmNvbmZpZ3VyYXRpb25XaXphcmQucHVzaChuZXcgV2l6YXJkSXRlbSgibTN1IiwgInt7LndpemFyZC5tM3UudGl0bGV9fSIpKTsKY29uZmlndXJhdGlvbldpemFyZC5wdXNoKG5ldyBXaXphcmRJdGVtKCJ4bWx0diIsICJ7ey53aXphcmQueG1sdHYudGl0bGV9fSIpKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlndXJhdGlvbl90cy5qcy5tYXA=" - webUI["html/js/logs_ts.js"] = "Y2xhc3MgTG9nIHsKICAgIGNyZWF0ZUxvZyhlbnRyeSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIldBUk5JTkciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJ3YXJuaW5nTXNnIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIkVSUk9SIikgIT0gLTEpIHsKICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiZXJyb3JNc2ciOwogICAgICAgIH0KICAgICAgICBpZiAoZW50cnkuaW5kZXhPZigiREVCVUciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJkZWJ1Z01zZyI7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZW50cnk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KZnVuY3Rpb24gc2hvd0xvZ3MoYm90dG9tKSB7CiAgICB2YXIgbG9nID0gbmV3IExvZygpOwogICAgdmFyIGxvZ3MgPSBTRVJWRVJbImxvZyJdWyJsb2ciXTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKTsKICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhsb2dzKTsKICAgIGtleXMuZm9yRWFjaChsb2dJRCA9PiB7CiAgICAgICAgdmFyIGVudHJ5ID0gbG9nLmNyZWF0ZUxvZyhsb2dzW2xvZ0lEXSk7CiAgICAgICAgZGl2LmFwcGVuZChlbnRyeSk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChib3R0b20gPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpOwogICAgICAgICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IHdyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgIH0KICAgIH0sIDEwKTsKfQpmdW5jdGlvbiByZXNldExvZ3MoKSB7CiAgICB2YXIgY21kID0gInJlc2V0TG9ncyI7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1sb2dzX3RzLmpzLm1hcA==" + webUI["html/js/menu_ts.js"] = "Y2xhc3MgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gIm1haW4tbWVudSI7CiAgICAgICAgdGhpcy5IVE1MVGFnID0gIkxJIjsKICAgICAgICB0aGlzLkltYWdlUGF0aCA9ICJpbWcvIjsKICAgIH0KICAgIGNyZWF0ZUlNRyhzcmMpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwogICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJzcmMiLCB0aGlzLkltYWdlUGF0aCArIHNyYyk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVWYWx1ZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KY2xhc3MgTWFpbk1lbnVJdGVtIGV4dGVuZHMgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IobWVudUtleSwgdmFsdWUsIGltYWdlLCBoZWFkbGluZSkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51S2V5ID0gbWVudUtleTsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgdGhpcy5pbWdTcmMgPSBpbWFnZTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICB9CiAgICBjcmVhdGVJdGVtKCkgewogICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiTEkiKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgib25jbGljayIsICJqYXZhc2NyaXB0OiBvcGVuVGhpc01lbnUodGhpcykiKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmlkKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibmF2LWl0ZW0iKTsKICAgICAgICB2YXIgaW1nID0gdGhpcy5jcmVhdGVJTUcodGhpcy5pbWdTcmMpOwogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY3JlYXRlVmFsdWUodGhpcy52YWx1ZSk7CiAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChpbWcpOwogICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQodmFsdWUpOwogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRvY3VtZW50SUQpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICBzd2l0Y2ggKHRoaXMubWVudUtleSkgewogICAgICAgICAgICBjYXNlICJwbGF5bGlzdCI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJ7ey5wbGF5bGlzdC50YWJsZS5wbGF5bGlzdH19IiwgInt7LnBsYXlsaXN0LnRhYmxlLnR1bmVyfX0iLCAie3sucGxheWxpc3QudGFibGUubGFzdFVwZGF0ZX19IiwgInt7LnBsYXlsaXN0LnRhYmxlLmF2YWlsYWJpbGl0eX19ICUiLCAie3sucGxheWxpc3QudGFibGUudHlwZX19IiwgInt7LnBsYXlsaXN0LnRhYmxlLnN0cmVhbXN9fSIsICJ7ey5wbGF5bGlzdC50YWJsZS5ncm91cFRpdGxlfX0gJSIsICJ7ey5wbGF5bGlzdC50YWJsZS50dmdJRH19ICUiLCAie3sucGxheWxpc3QudGFibGUudW5pcXVlSUR9fSAlIl07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3sueG1sdHYudGFibGUuZ3VpZGV9fSIsICJ7ey54bWx0di50YWJsZS5sYXN0VXBkYXRlfX0iLCAie3sueG1sdHYudGFibGUuYXZhaWxhYmlsaXR5fX0gJSIsICJ7ey54bWx0di50YWJsZS5jaGFubmVsc319IiwgInt7LnhtbHR2LnRhYmxlLnByb2dyYW1zfX0iXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3suZmlsdGVyLnRhYmxlLm5hbWV9fSIsICJ7ey5maWx0ZXIudGFibGUudHlwZX19IiwgInt7LmZpbHRlci50YWJsZS5maWx0ZXJ9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgICAgIHRoaXMudGFibGVIZWFkZXIgPSBbInt7LnVzZXJzLnRhYmxlLnVzZXJuYW1lfX0iLCAie3sudXNlcnMudGFibGUucGFzc3dvcmR9fSIsICJ7ey51c2Vycy50YWJsZS53ZWJ9fSIsICJ7ey51c2Vycy50YWJsZS5wbXN9fSIsICJ7ey51c2Vycy50YWJsZS5tM3V9fSIsICJ7ey51c2Vycy50YWJsZS54bWx9fSIsICJ7ey51c2Vycy50YWJsZS5hcGl9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsiQlVMSyIsICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIsICJ7ey5tYXBwaW5nLnRhYmxlLmxvZ299fSIsICJ7ey5tYXBwaW5nLnRhYmxlLmNoYW5uZWxOYW1lfX0iLCAie3subWFwcGluZy50YWJsZS5wbGF5bGlzdH19IiwgInt7Lm1hcHBpbmcudGFibGUuZ3JvdXBUaXRsZX19IiwgInt7Lm1hcHBpbmcudGFibGUueG1sdHZGaWxlfX0iLCAie3subWFwcGluZy50YWJsZS54bWx0dklEfX0iXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubWVudUtleSwgdGhpcy50YWJsZUhlYWRlcik7CiAgICB9Cn0KY2xhc3MgQ29udGVudCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudCI7CiAgICAgICAgdGhpcy5IZWFkZXJJRCA9ICJwb3B1cF9oZWFkZXIiOwogICAgICAgIHRoaXMuRm9vdGVySUQgPSAicG9wdXBfZm9vdGVyIjsKICAgICAgICB0aGlzLlRhYmxlSUQgPSAiY29udGVudF90YWJsZSI7CiAgICAgICAgdGhpcy5JbmFjdGl2ZVRhYmxlSUQgPSAiaW5hY3RpdmVfY29udGVudF90YWJsZSI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzcyA9ICJjb250ZW50X3RhYmxlX2hlYWRlciI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzc0luYWN0aXZlID0gImluYWN0aXZlX2NvbnRlbnRfdGFibGVfaGVhZGVyIjsKICAgICAgICB0aGlzLmludGVyYWN0aW9uSUQgPSAiY29udGVudC1pbnRlcmFjdGlvbiI7CiAgICB9CiAgICBjcmVhdGVIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDMiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSFIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlQlIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmludGVyYWN0aW9uSUQpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlRElWKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuRGl2SUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVUQUJMRSgpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3RhYmxlJyk7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuVGFibGVJRDsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3M7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRBQkxFKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKTsKICAgICAgICBlbGVtZW50LmlkID0gdGhpcy5JbmFjdGl2ZVRhYmxlSUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3NJbmFjdGl2ZTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgibTN1IiwgImhkaHIiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ0dW5lciJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJsYXN0LnVwZGF0ZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJwcm92aWRlci5hdmFpbGFiaWxpdHkiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsidHlwZSJdLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bImdyb3VwLnRpdGxlIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsidHZnLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICBkZWxldGUgU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXVstMV07CiAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXTsKICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgdHIuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiJyArIGRhdGFba2V5XVsidHlwZSJdICsgJyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtrZXldWyJ0eXBlIl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gInt7LmZpbHRlci5jdXN0b219fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICJ7ey5maWx0ZXIuZ3JvdXB9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImZpbHRlciJdOwogICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgieG1sdHYiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsibGFzdC51cGRhdGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsicHJvdmlkZXIuYXZhaWxhYmlsaXR5Il07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsieG1sdHYuY2hhbm5lbHMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiY29tcGF0aWJpbGl0eSJdWyJ4bWx0di5wcm9ncmFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0cik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGVzID0gbmV3IEFycmF5KCJ1c2VycyIpOwogICAgICAgICAgICAgICAgZmlsZVR5cGVzLmZvckVhY2goZmlsZVR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbZmlsZVR5cGVdOwogICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIicgKyBmaWxlVHlwZSArICciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiZGF0YSJdWyJ1c2VybmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIioqKioqKiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ud2ViIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLnBtcyJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsiZGF0YSJdWyJhdXRoZW50aWNhdGlvbi5tM3UiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIuKckyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIi0iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ueG1sIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLmFwaSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVsawogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJCVUxLIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbnVtbWVyCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIklOUFVUQ0hBTk5FTCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IGNoYW5nZUNoYW5uZWxOdW1iZXIoIicgKyBrZXkgKyAnIiwgdGhpcyknKQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvZ28KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiSU1HIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pbWFnZVVSTCA9IGRhdGFba2V5XVsidHZnLWxvZ28iXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0cyA9IGRhdGFba2V5XVsieC1jYXRlZ29yeSJdLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAiY2F0ZWdvcnkiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0Q29sb3JTZXR0aW5ncyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllc0NvbG9ycyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzX3NwbGl0ID0gY2F0Q29sb3JTZXR0aW5ncy5zcGxpdCgifCIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yc19zcGxpdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHNDb2xvcl9zcGxpdCA9IGNvbG9yc19zcGxpdFtpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdHNDb2xvcl9zcGxpdFswXSA9PSBjYXRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0NvbG9yID0gY2F0c0NvbG9yX3NwbGl0WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtbmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXlsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL2NlbGwudmFsdWUgPSBkYXRhW2tleV1bIl9maWxlLm0zdS5uYW1lIl0gCiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJfZmlsZS5tM3UuaWQiXSwgIm0zdSIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3J1cHBlIChncm91cC10aXRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtZ3JvdXAtdGl0bGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIEthbmFsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB2YWx1ZSA9IHN0ci5zdWJzdHJpbmcoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV1bIngtbWFwcGluZyJdLnN1YnN0cmluZygwLCAyMCkgKyAiLi4uIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICBhbGVydCgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGFibGUgY29udGVudCAobWVudUtleSk6IiwgbWVudUtleSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvd3M7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1bGsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMSyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG51bW1lcgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTlBVVENIQU5ORUwiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LWNoYW5uZWxJRCJdICogMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy90ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogY2hhbmdlQ2hhbm5lbE51bWJlcigiJyArIGtleSArICciLCB0aGlzKScpCiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9nbwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTUciOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmltYWdlVVJMID0gZGF0YVtrZXldWyJ0dmctbG9nbyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbmFtZQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzID0gZGF0YVtrZXldWyJ4LWNhdGVnb3J5Il0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9ICJjYXRlZ29yeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRDb2xvclNldHRpbmdzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzQ29sb3JzIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNfc3BsaXQgPSBjYXRDb2xvclNldHRpbmdzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzX3NwbGl0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0c0NvbG9yX3NwbGl0ID0gY29sb3JzX3NwbGl0W2ldLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0c0NvbG9yX3NwbGl0WzBdID09IGNhdHNbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzQ29sb3IgPSBjYXRzQ29sb3Jfc3BsaXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1uYW1lIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGxheWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiX2ZpbGUubTN1Lm5hbWUiXSAKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShkYXRhW2tleV1bIl9maWxlLm0zdS5pZCJdLCAibTN1IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBHcnVwcGUgKGdyb3VwLXRpdGxlKQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1ncm91cC10aXRsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIERhdGVpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngteG1sdHYtZmlsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MVFYgS2FuYWwKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHZhbHVlID0gc3RyLnN1YnN0cmluZygxLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtrZXldWyJ4LW1hcHBpbmciXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl0uc3Vic3RyaW5nKDAsIDIwKSArICIuLi4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNldHRpbmdzIjoKICAgICAgICAgICAgICAgIGFsZXJ0KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJUYWJsZSBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcm93czsKICAgIH0KfQpjbGFzcyBDZWxsIHsKICAgIGNyZWF0ZUNlbGwoKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICBpZiAodGhpcy5jaGlsZCA9PSB0cnVlKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50OwogICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY2hpbGRUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJQIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5jbGFzc0NvbG9yOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVRDSEFOTkVMIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2c2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVyKHRoaXMpIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMSyI6CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAiY2hlY2tib3giOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMS19IRUFEIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiYnVsayBoaWRlQnVsayI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCkiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCdpbmFjdGl2ZV9jb250ZW50X3RhYmxlJykiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJJTUciOgogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY2hpbGRUeXBlKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgdGhpcy5pbWFnZVVSTCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VVUkwgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm9uZXJyb3IiLCAiamF2YXNjcmlwdDogdGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9JyciKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmVycm9yPSJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nbWlzc2luZy5naWYnOyIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vbmNsaWNrID09IHRydWUpIHsKICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgdGhpcy5vbmNsaWNrRnVua3Rpb24pOwogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSAicG9pbnRlciI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRkQ2xhc3NOYW1lICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSB0aGlzLnRkQ2xhc3NOYW1lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGQ7CiAgICB9Cn0KY2xhc3MgU2hvd0NvbnRlbnQgZXh0ZW5kcyBDb250ZW50IHsKICAgIGNvbnN0cnVjdG9yKG1lbnVJRCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51SUQgPSBtZW51SUQ7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdHlwZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBzaG93KCkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgLy8gQWx0ZW4gSW5oYWx0IGzDtnNjaGVuCiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIHNob3dQcmV2aWV3KGZhbHNlKTsKICAgICAgICAvLyDDnGJlcnNjaHJpZnQKICAgICAgICB2YXIgcG9wdXBfaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5IZWFkZXJJRCk7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gbWVudUl0ZW1zW3RoaXMubWVudUlEXS5oZWFkbGluZTsKICAgICAgICB2YXIgbWVudUtleSA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0ubWVudUtleTsKICAgICAgICB2YXIgaCA9IHRoaXMuY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpOwogICAgICAgIHZhciBleGlzdGluZ0hlYWRlciA9IHBvcHVwX2hlYWRlci5xdWVyeVNlbGVjdG9yKCdoMycpOwogICAgICAgIGlmIChleGlzdGluZ0hlYWRlcikgewogICAgICAgICAgICBwb3B1cF9oZWFkZXIucmVwbGFjZUNoaWxkKGgsIGV4aXN0aW5nSGVhZGVyKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcHVwX2hlYWRlci5hcHBlbmRDaGlsZChoKTsKICAgICAgICB9CiAgICAgICAgdmFyIGhyID0gdGhpcy5jcmVhdGVIUigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChocik7CiAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICB2YXIgZGl2ID0gdGhpcy5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgIHZhciBpbnRlcmFjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaW50ZXJhY3Rpb25JRCk7CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiLSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgicGxheWxpc3QiKScpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICdtb2RhbCcpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcsICcjcG9wdXAnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsIC0xKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoImZpbHRlciIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdG9nZ2xlJywgJ21vZGFsJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0JywgJyNwb3B1cCcpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAieG1sdHYiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInhtbHR2IiknKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1icy10b2dnbGUnLCAnbW9kYWwnKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnLCAnI3BvcHVwJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJ1c2VycyIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgidXNlcnMiKScpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICdtb2RhbCcpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcsICcjcG9wdXAnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCAiIiknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uYnVsa0VkaXR9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGJ1bGtFZGl0KCknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoInNlYXJjaCIsICJzZWFyY2giLCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInNlYXJjaE1hcHBpbmciKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suYnV0dG9uLnNlYXJjaH19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAic2VhcmNoIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogc2VhcmNoSW5NYXBwaW5nKCknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVTZXR0aW5ncygpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5iYWNrdXB9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGJhY2t1cCgpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5yZXN0b3JlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiByZXN0b3JlKCk7Jyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpOwogICAgICAgICAgICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImlkIiwgImJveC13cmFwcGVyIik7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQod3JhcHBlcik7CiAgICAgICAgICAgICAgICB0aGlzLkRpdklEID0gImNvbnRlbnRfc2V0dGluZ3MiOwogICAgICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5jcmVhdGVESVYoKTsKICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgc2hvd1NldHRpbmdzKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibG9nIjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ucmVzZXRMb2dzfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiByZXNldExvZ3MoKTsnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgICAgIGRvYy5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKICAgICAgICAgICAgICAgIHRoaXMuRGl2SUQgPSAiY29udGVudF9sb2ciOwogICAgICAgICAgICAgICAgdmFyIGxvZ3MgPSB0aGlzLmNyZWF0ZURJVigpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChsb2dzKTsKICAgICAgICAgICAgICAgIHNob3dMb2dzKHRydWUpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxvZ291dCI6CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJUb2tlbj0gOyBleHBpcmVzID0gVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU2hvdyBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBUYWJlbGxlIGVyc3RlbGxlbiAoZmFsbHMgYmVuw7Z0aWd0KQogICAgICAgIHZhciB0YWJsZUhlYWRlciA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0udGFibGVIZWFkZXI7CiAgICAgICAgaWYgKHRhYmxlSGVhZGVyLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICAgICAgZG9jLmFwcGVuZENoaWxkKHdyYXBwZXIpOwogICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgdmFyIHRhYmxlID0gdGhpcy5jcmVhdGVUQUJMRSgpOwogICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRhYmxlKTsKICAgICAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMuY3JlYXRlVGFibGVSb3coKTsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgLy8gS29wZnplaWxlIGRlciBUYWJsbGUKICAgICAgICAgICAgdGFibGVIZWFkZXIuZm9yRWFjaChlbGVtZW50ID0+IHsKICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZWxlbWVudDsKICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJCVUxLIikgewogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIkJVTEtfSEVBRCI7CiAgICAgICAgICAgICAgICAgICAgY2VsbC5hY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChtZW51S2V5ID09ICJtYXBwaW5nIikgewogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDEpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudGRDbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoMyk7IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDQpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmdyb3VwVGl0bGV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDUpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKGhlYWRlcik7CiAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuY3JlYXRlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICByb3dzLmZvckVhY2godHIgPT4gewogICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGJyID0gdGhpcy5jcmVhdGVCUigpOwogICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoYnIpOwogICAgICAgICAgICAvLyBDcmVhdGUgaW5hY3RpdmUgY2hhbm5lbHMgZm9yIG1hcHBpbmcKICAgICAgICAgICAgaWYgKG1lbnVLZXkgPT0gIm1hcHBpbmciKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5hY3RpdmV0YWJsZSA9IHRoaXMuY3JlYXRlSW5hY3RpdmVUQUJMRSgpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbmFjdGl2ZXRhYmxlKTsKICAgICAgICAgICAgICAgIHZhciBoZWFkZXIgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVSb3coKTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEtvcGZ6ZWlsZSBkZXIgVGFibGxlCiAgICAgICAgICAgICAgICB0YWJsZUhlYWRlci5mb3JFYWNoKGVsZW1lbnQgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZWxlbWVudDsKICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAiQlVMSyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMS19IRUFEIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5hY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobWVudUtleSA9PSAibWFwcGluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUuY2hOb319IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgxLCAnaW5hY3RpdmVfY29udGVudF90YWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnRkQ2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgzLCAnaW5hY3RpdmVfY29udGVudF90YWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNCwgJ2luYWN0aXZlX2NvbnRlbnRfdGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmdyb3VwVGl0bGV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNSwgJ2luYWN0aXZlX2NvbnRlbnRfdGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICAgICAgcm93cy5mb3JFYWNoKHRyID0+IHsKICAgICAgICAgICAgICAgICAgICBpbmFjdGl2ZXRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCBmYWxzZSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEsICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgICAgIHNob3dQcmV2aWV3KHRydWUpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgfQp9CmZ1bmN0aW9uIFBhZ2VSZWFkeSgpIHsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCJnZXRTZXJ2ZXJDb25maWciKTsKICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7CiAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgdXBkYXRlTG9nKCk7CiAgICB9LCAxMDAwMCk7CiAgICBnZXROZXdlc3RSZWxlYXNlRnJvbUdpdGh1YigpOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNyZWF0ZUxheW91dCgpIHsKICAgIC8vIENsaWVudCBJbmZvCiAgICB2YXIgb2JqID0gU0VSVkVSWyJjbGllbnRJbmZvIl07CiAgICB2YXIga2V5cyA9IGdldE9iaktleXMob2JqKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKSkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrZXlzW2ldKS52YWx1ZSA9IG9ialtrZXlzW2ldXTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLW1lbnUiKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIE1lbsO8IGVyc3RlbGxlbgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tbWVudSIpLmlubmVySFRNTCA9ICIiOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW51SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBtZW51SXRlbXNbaV0uaWQgPSBpOwogICAgICAgIHN3aXRjaCAobWVudUl0ZW1zW2ldWyJtZW51S2V5Il0pIHsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBjYXNlICJsb2dvdXQiOgogICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYXV0aGVudGljYXRpb24ud2ViIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtc1tpXS5jcmVhdGVJdGVtKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgICAgIG1lbnVJdGVtc1tpXS5jcmVhdGVJdGVtKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIG1lbnVJdGVtc1tpXS5jcmVhdGVJdGVtKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gb3BlblRoaXNNZW51KGVsZW1lbnQpIHsKICAgIHZhciBpZCA9IGVsZW1lbnQuaWQ7CiAgICB2YXIgY29udGVudCA9IG5ldyBTaG93Q29udGVudChpZCk7CiAgICBjb250ZW50LnNob3coKTsKICAgIGVuYWJsZUdyb3VwU2VsZWN0aW9uKCIuYnVsayIpOwogICAgcmV0dXJuOwp9CmNsYXNzIFBvcHVwV2luZG93IHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuRG9jdW1lbnRJRCA9ICJwb3B1cC1jdXN0b20iOwogICAgICAgIHRoaXMuSW50ZXJhY3Rpb25JRCA9ICJpbnRlcmFjdGlvbiI7CiAgICAgICAgdGhpcy5kb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRvY3VtZW50SUQpOwogICAgfQogICAgY3JlYXRlVGl0bGUodGl0bGUpIHsKICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkLmNsYXNzTmFtZSA9ICJsZWZ0IjsKICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aXRsZSArICI6IjsKICAgICAgICByZXR1cm4gdGQ7CiAgICB9CiAgICBjcmVhdGVDb250ZW50KGVsZW1lbnQpIHsKICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIHJldHVybiB0ZDsKICAgIH0KICAgIGNyZWF0ZUludGVyYWN0aW9uKCkgewogICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCJpZCIsICJwb3B1cC1pbnRlcmFjdGlvbiIpOwogICAgICAgIGRpdi5jbGFzc05hbWUgPSAiaW50ZXJhY3Rpb24iOwogICAgICAgIHRoaXMuZG9jLmFwcGVuZENoaWxkKGRpdik7CiAgICB9Cn0KY2xhc3MgUG9wdXBDb250ZW50IGV4dGVuZHMgUG9wdXBXaW5kb3cgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICB0aGlzLnRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKTsKICAgIH0KICAgIGNyZWF0ZUhlYWRsaW5lKGhlYWRsaW5lKSB7CiAgICAgICAgdGhpcy5kb2MuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIMyIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaGVhZGxpbmUudG9VcHBlckNhc2UoKTsKICAgICAgICB0aGlzLmRvYy5hcHBlbmRDaGlsZChlbGVtZW50KTsKICAgICAgICAvLyBUYWJlbGxlIGVyc3RlbGxlbgogICAgICAgIHRoaXMudGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQUJMRSIpOwogICAgICAgIHRoaXMuZG9jLmFwcGVuZENoaWxkKHRoaXMudGFibGUpOwogICAgfQogICAgYXBwZW5kUm93KHRpdGxlLCBlbGVtZW50KSB7CiAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAvLyBCZXplaWNobnVuZwogICAgICAgIGlmICh0aXRsZS5sZW5ndGggIT0gMCkgewogICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVRpdGxlKHRpdGxlKSk7CiAgICAgICAgfQogICAgICAgIC8vIENvbnRlbnQKICAgICAgICB0ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbnRlbnQoZWxlbWVudCkpOwogICAgICAgIHRoaXMudGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgfQogICAgY3JlYXRlSW5wdXQodHlwZSwgbmFtZSwgdmFsdWUpIHsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgdmFsdWUgPSAiIjsKICAgICAgICB9CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdHlwZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBjcmVhdGVDaGVja2JveChuYW1lKSB7CiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiY2hlY2tib3giKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBjcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBzZXQsIGRiS2V5KSB7CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNFTEVDVCIpOwogICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBkYktleSk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTsKICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZXNbaV0pOwogICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gdGV4dFtpXTsKICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgIT0gIiIpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gc2V0OwogICAgICAgIH0KICAgICAgICBpZiAoc2V0ID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSB2YWx1ZXNbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9CiAgICBzZWxlY3RPcHRpb24oc2VsZWN0LCB2YWx1ZSkgewogICAgICAgIC8vc2VsZWN0LnNlbGVjdGVkT3B0aW9ucyA9IHZhbHVlCiAgICAgICAgdmFyIHMgPSBzZWxlY3Q7CiAgICAgICAgcy5vcHRpb25zW3Muc2VsZWN0ZWRJbmRleF0udmFsdWUgPSB2YWx1ZTsKICAgICAgICByZXR1cm4gc2VsZWN0OwogICAgfQogICAgZGVzY3JpcHRpb24odmFsdWUpIHsKICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBzcGFuLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICB0ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbnRlbnQoc3BhbikpOwogICAgICAgIHRoaXMudGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgfQogICAgLy8gSW50ZXJha3Rpb24KICAgIGFkZEludGVyYWN0aW9uKGVsZW1lbnQpIHsKICAgICAgICB2YXIgaW50ZXJhY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAtaW50ZXJhY3Rpb24iKTsKICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChlbGVtZW50KTsKICAgIH0KfQpmdW5jdGlvbiBvcGVuUG9wVXAoZGF0YVR5cGUsIGVsZW1lbnQpIHsKICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGlkOwogICAgc3dpdGNoIChlbGVtZW50KSB7CiAgICAgICAgY2FzZSB1bmRlZmluZWQ6CiAgICAgICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbERhdGEoImZpbHRlciIsIGlkKTsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgaWYgKGlkID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IC0xOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxEYXRhKCJmaWx0ZXIiLCBpZCk7CiAgICAgICAgICAgICAgICAgICAgZGF0YVsidHlwZSJdID0gImN1c3RvbS1maWx0ZXIiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBkYXRhWyJpZC5wcm92aWRlciJdID0gIi0iOwogICAgICAgICAgICAgICAgICAgIGRhdGFbInR5cGUiXSA9IGRhdGFUeXBlOwogICAgICAgICAgICAgICAgICAgIGlkID0gIi0iOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGlkID0gZWxlbWVudC5pZDsKICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsRGF0YShkYXRhVHlwZSwgaWQpOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHZhciBjb250ZW50ID0gbmV3IFBvcHVwQ29udGVudCgpOwogICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3sucGxheWxpc3QucGxheWxpc3RUeXBlLnRpdGxlfX0iKTsKICAgICAgICAgICAgLy8gVHlwZQogICAgICAgICAgICB2YXIgdGV4dCA9IFsiTTNVIiwgIkhESG9tZVJ1biJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJqYXZhc2NyaXB0OiBvcGVuUG9wVXAoJ20zdScpIiwgImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnaGRocicpIl07CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsICIiLCAidHlwZSIpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJ0eXBlIik7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgJ2phdmFzY3JpcHQ6IGNoYW5nZUJ1dHRvbkFjdGlvbih0aGlzLCAibmV4dCIsICJvbmNsaWNrIiknKTsgLy8gY2hhbmdlQnV0dG9uQWN0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50eXBlLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gV2VpdGVyCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJuZXh0IiwgInt7LmJ1dHRvbi5uZXh0fX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibTN1IiknKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICduZXh0Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtM3UiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gTmFtZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0Lm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZGVzY3JpcHRpb24udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVVJMCiAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWxlLnNvdXJjZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0LmZpbGVNM1UucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZmlsZU0zVS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBUdW5lcgogICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJidWZmZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDA7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uZm9jdXMiLCAiamF2YXNjcmlwdDogcmV0dXJuOyIpOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR1bmVyLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR1bmVyIjsKICAgICAgICAgICAgICAgIGlmIChkYXRhW2RiS2V5XSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBkYXRhW2RiS2V5XSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCAidHJ1ZSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gIm5vdEF2YWlsYWJsZSI7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5wbGF5bGlzdC50dW5lci5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibTN1IiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiYmFjayIsICJ7ey5idXR0b24uYmFja319Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJwbGF5bGlzdCIpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVyZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAidXBkYXRlIiwgInt7LmJ1dHRvbi51cGRhdGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoIm0zdSIsICInICsgaWQgKyAnIiwgZmFsc2UsIDEpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibTN1IiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImhkaHIiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gTmFtZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0Lm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVVJMCiAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWxlLnNvdXJjZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnBsYXlsaXN0LmZpbGVIREhSLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LmZpbGVIREhSLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFR1bmVyCiAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImJ1ZmZlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25mb2N1cyIsICJqYXZhc2NyaXB0OiByZXR1cm47Iik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgaWYgKGRhdGFbZGJLZXldID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGFbZGJLZXldID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAibm90QXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0LnR1bmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiaGRociIsICInICsgaWQgKyAnIiwgdHJ1ZSwgMCknKTsKICAgICAgICAgICAgICAgIGlucHV0LmNsYXNzTmFtZSA9ICJkZWxldGUiOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiYmFjayIsICJ7ey5idXR0b24uYmFja319Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJwbGF5bGlzdCIpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVyZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAidXBkYXRlIiwgInt7LmJ1dHRvbi51cGRhdGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImhkaHIiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAxKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImhkaHIiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAwKScpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZShkYXRhVHlwZSk7CiAgICAgICAgICAgIC8vIFR5cGUKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR5cGUiOwogICAgICAgICAgICB2YXIgdGV4dCA9IFsiTTNVOiAiICsgInt7LmZpbHRlci50eXBlLmdyb3VwVGl0bGV9fSIsICJUaHJlYWRmaW46ICIgKyAie3suZmlsdGVyLnR5cGUuY3VzdG9tRmlsdGVyfX0iXTsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiamF2YXNjcmlwdDogb3BlblBvcFVwKCdncm91cC10aXRsZScpIiwgImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnY3VzdG9tLWZpbHRlcicpIl07CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsICJqYXZhc2NyaXB0OiBvcGVuUG9wVXAoJ2dyb3VwLXRpdGxlJykiLCBkYktleSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICdqYXZhc2NyaXB0OiBjaGFuZ2VCdXR0b25BY3Rpb24odGhpcywgIm5leHQiLCAib25jbGljayIpOycpOyAvLyBjaGFuZ2VCdXR0b25BY3Rpb24KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci50eXBlLnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gV2VpdGVyCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJuZXh0IiwgInt7LmJ1dHRvbi5uZXh0fX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiZ3JvdXAtdGl0bGUiKScpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgJ25leHQnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3suZmlsdGVyLmN1c3RvbX19Iik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJncm91cC10aXRsZSI6CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3suZmlsdGVyLmdyb3VwfX0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBOYW1lICAgICAgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLm5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVzY2hyZWlidW5nCiAgICAgICAgICAgIHZhciBkYktleSA9ICJkZXNjcmlwdGlvbiI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuZGVzY3JpcHRpb24udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVHlwCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ0eXBlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiaGlkZGVuIiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coIiIsIGlucHV0KTsKICAgICAgICAgICAgdmFyIGZpbHRlclR5cGUgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICAgICAgICAgICAgICAvLyBHcm/Dny0gS2xlaW5zY2hyZWlidW5nIGJlYWNodGVuCiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImNhc2VTZW5zaXRpdmUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmNhc2VTZW5zaXRpdmUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXJyZWdlbCAoQmVudXR6ZXJkZWZpbmllcnQpCiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbHRlciI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuZmlsdGVyUnVsZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5maWx0ZXJSdWxlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJncm91cC10aXRsZSI6CiAgICAgICAgICAgICAgICAgICAgLy9hbGVydChkYktleSArICIgIiArIGZpbHRlclR5cGUpCiAgICAgICAgICAgICAgICAgICAgLy8gRmlsdGVyIGJhc2llcmVuZCBhdWYgZGVuIEdydXBwZW4gaW4gZGVyIE0zVQogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWx0ZXIiOwogICAgICAgICAgICAgICAgICAgIHZhciBncm91cHNNM1UgPSBnZXRMb2NhbERhdGEoIm0zdUdyb3VwcyIsICIiKTsKICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IGdyb3Vwc00zVVsidGV4dCJdOwogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBncm91cHNNM1VbInZhbHVlIl07CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuZmlsdGVyR3JvdXAudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3suZmlsdGVyLmZpbHRlckdyb3VwLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgICAgICAgICAvLyBHcm/Dny0gS2xlaW5zY2hyZWlidW5nIGJlYWNodGVuCiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImNhc2VTZW5zaXRpdmUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmNhc2VTZW5zaXRpdmUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiaW5jbHVkZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuaW5jbHVkZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5pbmNsdWRlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3suZmlsdGVyLmluY2x1ZGUuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJleGNsdWRlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5leGNsdWRlLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmV4Y2x1ZGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5maWx0ZXIuZXhjbHVkZS5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIE5hbWUgICAgICAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInN0YXJ0aW5nTnVtYmVyIjsKICAgICAgICAgICAgaWYgKGRhdGFbZGJLZXldICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCAiMTAwMCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLnN0YXJ0aW5nbnVtYmVyLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5zdGFydGluZ251bWJlci50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5maWx0ZXIuc3RhcnRpbmdudW1iZXIuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1jYXRlZ29yeSI7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyItIl07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIiJdOwogICAgICAgICAgICB2YXIgZXBnQ2F0ZWdvcmllcyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllcyJdOwogICAgICAgICAgICB2YXIgY2F0ZWdvcmllcyA9IGVwZ0NhdGVnb3JpZXMuc3BsaXQoInwiKTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgY2F0ID0gY2F0ZWdvcmllc1tpXTsKICAgICAgICAgICAgICAgIGlmIChjYXQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2F0X3NwbGl0ID0gY2F0LnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGNhdF9zcGxpdFswXSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goY2F0X3NwbGl0WzFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmNhdGVnb3J5LnRpdGxlfX0iLCBzZWxlY3QpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEzDtnNjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJmaWx0ZXIiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgIGlucHV0LmNsYXNzTmFtZSA9ICJkZWxldGUiOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiZmlsdGVyIiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZShkYXRhVHlwZSk7CiAgICAgICAgICAgIC8vIE5hbWUKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIm5hbWUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey54bWx0di5uYW1lLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnhtbHR2Lm5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVzY2hyZWlidW5nCiAgICAgICAgICAgIHZhciBkYktleSA9ICJkZXNjcmlwdGlvbiI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2LmRlc2NyaXB0aW9uLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnhtbHR2LmRlc2NyaXB0aW9uLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFVSTAogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZmlsZS5zb3VyY2UiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey54bWx0di5maWxlWE1MVFYucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYuZmlsZVhNTFRWLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoInhtbHR2IiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVyZW4KICAgICAgICAgICAgaWYgKGRhdGFbImlkLnByb3ZpZGVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAidXBkYXRlIiwgInt7LmJ1dHRvbi51cGRhdGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoInhtbHR2IiwgIicgKyBpZCArICciLCBmYWxzZSwgMSknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJ4bWx0diIsICInICsgaWQgKyAnIiwgZmFsc2UsIDApJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoInt7Lm1haW5NZW51Lml0ZW0udXNlcnN9fSIpOwogICAgICAgICAgICAvLyBCZW51dHplcm5hbWUgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ1c2VybmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnVzZXJzLnVzZXJuYW1lLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLnVzZXJuYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIE5ldWVzIFBhc3N3b3J0IAogICAgICAgICAgICB2YXIgZGJLZXkgPSAicGFzc3dvcmQiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJwYXNzd29yZCIsIGRiS2V5LCAiIik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sudXNlcnMucGFzc3dvcmQucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMucGFzc3dvcmQudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVzdMOkdGlndW5nIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAiY29uZmlybSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInBhc3N3b3JkIiwgZGJLZXksICIiKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey51c2Vycy5jb25maXJtLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLmNvbmZpcm0udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIFdFQgogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24ud2ViIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaWYgKGRhdGFbImRlZmF1bHRVc2VyIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHJldHVybiBmYWxzZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy53ZWIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIFBNUwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24ucG1zIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLnBtcy50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgTTNVCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5tM3UiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMubTN1LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlcmVjaHRpZ3VuZyBYTUwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImF1dGhlbnRpY2F0aW9uLnhtbCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy54bWwudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIEFQSQogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24uYXBpIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLmFwaS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEzDtnNjaGVuCiAgICAgICAgICAgIGlmIChkYXRhWyJkZWZhdWx0VXNlciJdICE9IHRydWUgJiYgaWQgIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiZGVsZXRlIiwgInt7LmJ1dHRvbi5kZWxldGV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiJyArIGRhdGFUeXBlICsgJyIsICInICsgaWQgKyAnIiwgdHJ1ZSwgMCknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoIicgKyBkYXRhVHlwZSArICciLCAiJyArIGlkICsgJyIsICJmYWxzZSIpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoInt7Lm1haW5NZW51Lml0ZW0ubWFwcGluZ319Iik7CiAgICAgICAgICAgIGlmIChCVUxLX0VESVQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtY2hhbm5lbHMtc3RhcnQiOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHZhbHVlIHRvIHRoZSBmaXJzdCBzZWxlY3RlZCBjaGFubmVsCiAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBnZXRBbGxTZWxlY3RlZENoYW5uZWxzKCk7CiAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1bY2hhbm5lbHNbMF1dOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFubmVsICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidmFsdWUiLCBjaGFubmVsWyJ4LWNoYW5uZWxJRCJdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogY2hhbmdlQ2hhbm5lbE51bWJlcnMoIicgKyBjaGFubmVscyArICciKTsnKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmNoYW5uZWxHcm91cFN0YXJ0LnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWt0aXYgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWFjdGl2ZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGlucHV0LmlkID0gImFjdGl2ZSI7CiAgICAgICAgICAgIC8vaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpCiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdG9nZ2xlQ2hhbm5lbFN0YXR1cygnIiArIGlkICsgIicsIHRoaXMpIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmFjdGl2ZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBLYW5hbG5hbWUgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LW5hbWUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBpZiAoQlVMS19FRElUID09IHRydWUpIHsKICAgICAgICAgICAgICAgIGlucHV0LnN0eWxlLmJvcmRlciA9ICJzb2xpZCAxcHggcmVkIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCAidHJ1ZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmNoYW5uZWxOYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oZGF0YVsibmFtZSJdKTsKICAgICAgICAgICAgLy8gQmVzY2hyZWlidW5nIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1kZXNjcmlwdGlvbiI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7Lm1hcHBpbmcuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmRlc2NyaXB0aW9uLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVydW5nIGRlcyBLYW5hbG5hbWVucwogICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgiX3V1aWQua2V5IikpIHsKICAgICAgICAgICAgICAgIGlmIChkYXRhWyJfdXVpZC5rZXkiXSAhPSAiIikgewogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXVwZGF0ZS1jaGFubmVsLW5hbWUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcudXBkYXRlQ2hhbm5lbE5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBMb2dvIFVSTCAoS2FuYWwpIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAidHZnLWxvZ28iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgImNoYW5uZWwtaWNvbiIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5jaGFubmVsTG9nby50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBBa3R1YWxpc2llcnVuZyBkZXMgS2FuYWxsb2dvcwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC11cGRhdGUtY2hhbm5lbC1pY29uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJ1cGRhdGUtaWNvbiIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGFuZ2VDaGFubmVsTG9nbygnIiArIGlkICsgIicpOyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy51cGRhdGVDaGFubmVsTG9nby50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBFcndlaXRlcm4gZGVyIEVQRyBLYXRlZ29yaWUKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtY2F0ZWdvcnkiOwogICAgICAgICAgICB2YXIgdGV4dCA9IFsiLSJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyIiXTsKICAgICAgICAgICAgdmFyIGVwZ0NhdGVnb3JpZXMgPSBTRVJWRVJbInNldHRpbmdzIl1bImVwZ0NhdGVnb3JpZXMiXTsKICAgICAgICAgICAgdmFyIGNhdGVnb3JpZXMgPSBlcGdDYXRlZ29yaWVzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGNhdCA9IGNhdGVnb3JpZXNbaV07CiAgICAgICAgICAgICAgICBpZiAoY2F0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNhdF9zcGxpdCA9IGNhdC5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChjYXRfc3BsaXRbMF0pOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGNhdF9zcGxpdFsxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YVtkYktleV0sIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuZXBnQ2F0ZWdvcnkudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIE0zVSBHcnVwcGVudGl0ZWwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5tM3VHcm91cFRpdGxlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGlmIChkYXRhWyJncm91cC10aXRsZSJdICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbihkYXRhWyJncm91cC10aXRsZSJdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC14bWx0di1maWxlIjsKICAgICAgICAgICAgdmFyIHhtbEZpbGUgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICB2YXIgc2VsZWN0ID0geG1sdHYuZ2V0RmlsZXMoZGF0YVtkYktleV0pOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJuYW1lIiwgZGJLZXkpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJwb3B1cC14bWx0diIpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgc2V0WG1sdHZDaGFubmVsKCciICsgaWQgKyAiJyx0aGlzLCAnIiArIGRhdGFbIngtbWFwcGluZyJdICsgIicpOyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy54bWx0dkZpbGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIHZhciBmaWxlID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIC8vIFhNTFRWIE1hcHBpbmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtbWFwcGluZyI7CiAgICAgICAgICAgIHZhciB4bWx0diA9IG5ldyBYTUxUVkZpbGUoKTsKICAgICAgICAgICAgY29uc3QgY3VycmVudFhtbFR2SWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29uc3QgW3htbFR2SWRDb250YWluZXIsIHhtbFR2SWRJbnB1dCwgeG1sVHZJZERhdGFsaXN0XSA9IHhtbHR2Lm5ld1htbFR2SWRQaWNrZXIoeG1sRmlsZSwgY3VycmVudFhtbFR2SWQpOwogICAgICAgICAgICB4bWxUdklkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lcicpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ3gtbWFwcGluZycpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1pbnB1dCcpOwogICAgICAgICAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIC8vIHNvcnRTZWxlY3QoeG1sVHZJZERhdGFsaXN0KTsgLy8gVE9ETzogQmV0dGVyIHNvcnQgYmVmb3JlIGFkZGluZwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygne3subWFwcGluZy54bWx0dkNoYW5uZWwudGl0bGV9fScsIHhtbFR2SWRDb250YWluZXIpOwogICAgICAgICAgICAvLyBFeHRyYSBQUFYgRGF0YQogICAgICAgICAgICBpZiAoY3VycmVudFhtbFR2SWQgPT0gIlBQViIpIHsKICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXBwdi1leHRyYSI7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAicHB2LWV4dHJhIik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5wcHZleHRyYS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWJhY2t1cC1jaGFubmVsLTEiOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGJhY2t1cDFYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdkJhY2t1cDFJZENvbnRhaW5lciwgeG1sVHZCYWNrdXAxSWRJbnB1dCwgeG1sVHZCYWNrdXAxSWREYXRhbGlzdF0gPSB4bWx0di5uZXdYbWxUdklkUGlja2VyKHhtbEZpbGUsIGJhY2t1cDFYbWxUdklkKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyLTEnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgZGJLZXkpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkSW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJiYWNrdXAtY2hhbm5lbC0xIik7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMUlkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdC1iYWNrdXAxJyk7CiAgICAgICAgICAgIC8vIHNvcnRTZWxlY3QoeG1sVHZJZERhdGFsaXN0KTsgLy8gVE9ETzogQmV0dGVyIHNvcnQgYmVmb3JlIGFkZGluZwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygne3subWFwcGluZy5iYWNrdXBDaGFubmVsMS50aXRsZX19JywgeG1sVHZCYWNrdXAxSWRDb250YWluZXIpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1iYWNrdXAtY2hhbm5lbC0yIjsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICBjb25zdCBiYWNrdXAyWG1sVHZJZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb25zdCBbeG1sVHZCYWNrdXAySWRDb250YWluZXIsIHhtbFR2QmFja3VwMklkSW5wdXQsIHhtbFR2QmFja3VwMklkRGF0YWxpc3RdID0geG1sdHYubmV3WG1sVHZJZFBpY2tlcih4bWxGaWxlLCBiYWNrdXAyWG1sVHZJZCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lci0yJyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGRiS2V5KTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFja3VwLWNoYW5uZWwtMiIpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDJJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2lkfScsIHRoaXMsICcke3htbEZpbGV9Jyk7YCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QtYmFja3VwMicpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5iYWNrdXBDaGFubmVsMi50aXRsZX19IiwgeG1sVHZCYWNrdXAySWRDb250YWluZXIpOwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1iYWNrdXAtY2hhbm5lbC0zIjsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICBjb25zdCBiYWNrdXAzWG1sVHZJZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb25zdCBbeG1sVHZCYWNrdXAzSWRDb250YWluZXIsIHhtbFR2QmFja3VwM0lkSW5wdXQsIHhtbFR2QmFja3VwM0lkRGF0YWxpc3RdID0geG1sdHYubmV3WG1sVHZJZFBpY2tlcih4bWxGaWxlLCBiYWNrdXAzWG1sVHZJZCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lci0zJyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGRiS2V5KTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZElucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFja3VwLWNoYW5uZWwtMyIpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDNJZElucHV0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCBgamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoZWNrWG1sdHZDaGFubmVsKCcke2lkfScsIHRoaXMsICcke3htbEZpbGV9Jyk7YCk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QtYmFja3VwMycpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5iYWNrdXBDaGFubmVsMy50aXRsZX19IiwgeG1sVHZCYWNrdXAzSWRDb250YWluZXIpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIExvZ28gaG9jaGxhZGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLnVwbG9hZExvZ299fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogdXBsb2FkTG9nbygpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBGZXJ0aWcKICAgICAgICAgICAgdmFyIGlkcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICBpZHMgPSBnZXRBbGxTZWxlY3RlZENoYW5uZWxzKCk7CiAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgIGlkcy5wdXNoKGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uZG9uZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBkb25lUG9wdXBEYXRhKCInICsgZGF0YVR5cGUgKyAnIiwgIicgKyBpZHMgKyAnIiwgImZhbHNlIik7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHNob3dQb3BVcEVsZW1lbnQoJ3BvcHVwLWN1c3RvbScpOwp9CmNsYXNzIFhNTFRWRmlsZSB7CiAgICBnZXRGaWxlcyhzZXQpIHsKICAgICAgICB2YXIgZmlsZUlEcyA9IGdldE9iaktleXMoU0VSVkVSWyJ4ZXBnIl1bInhtbHR2TWFwIl0pOwogICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoIi0iKTsKICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgiLSIpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZUlEcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZmlsZUlEc1tpXSAhPSAiVGhyZWFkZmluIER1bW15IikgewogICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGZpbGVJRHNbaV0sICJ4bWx0diIsICJmaWxlLnRocmVhZGZpbiIpKTsKICAgICAgICAgICAgICAgIHRleHQucHVzaChnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZmlsZUlEc1tpXSwgInhtbHR2IiwgIm5hbWUiKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChmaWxlSURzW2ldKTsKICAgICAgICAgICAgICAgIHRleHQucHVzaChmaWxlSURzW2ldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIik7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTsKICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZXNbaV0pOwogICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gdGV4dFtpXTsKICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgIT0gIiIpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gc2V0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZWN0OwogICAgfQogICAgLyoqCiAgICogQHBhcmFtIHhtbFR2RmlsZSBYTUwgZmlsZSBwYXRoIHRvIGdldCBFUEcgZnJvbS4KICAgKiBAcGFyYW0gY3VycmVudFhtbFR2SWQgQ3VycmVudCBYTUxUViBJRCB0byBzZXQgaW5pdGlhbCBpbnB1dCB2YWx1ZSB0by4KICAgKiBAcmV0dXJucyBBcnJheSBvZiwgc2VxdWVudGlhbGx5OgogICAqIDEpIENvbnRhaW5lciBvZiB0aGUgcGlja2VyLgogICAqIDIpIElucHV0IGZpZWxkIHRvIHR5cGUgYXQgYW5kIGdldCBjaG9pY2UgZnJvbS4KICAgKiAzKSBEYXRhbGlzdCBjb250YWluaW5nIGV2ZXJ5IG9wdGlvbi4KICAgKi8KICAgIG5ld1htbFR2SWRQaWNrZXIoeG1sVHZGaWxlLCBjdXJyZW50WG1sVHZJZCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpOwogICAgICAgIC8vIEluaXRpYWxseSwgc2V0IHZhbHVlIHRvICctJyBpZiBpbnB1dCBpcyBlbXB0eQogICAgICAgIGlucHV0LnZhbHVlID0gKGN1cnJlbnRYbWxUdklkKSA/IGN1cnJlbnRYbWxUdklkIDogJy0nOwogICAgICAgIC8vIFdoZW4gaW5wdXQgaXMgZm9jdXNlZCwgcmVtb3ZlICctJyBmcm9tIGl0CiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoZXZ0KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXQ7CiAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9ICh0YXJnZXQudmFsdWUgPT09ICctJykgPyAnJyA6IHRhcmdldC52YWx1ZTsKICAgICAgICB9KTsKICAgICAgICAvLyBXaGVuIGlucHV0IGxvc2UgZm9jdXMgb3IgdGFrZSBhIHZhbHVlLCBpZiBpdCdzIGVtcHR5LCBzZXQgdmFsdWUgdG8gJy0nCiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHNldEZhbGxiYWNrVmFsdWUpOwogICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNldEZhbGxiYWNrVmFsdWUpOwogICAgICAgIGZ1bmN0aW9uIHNldEZhbGxiYWNrVmFsdWUoZXZ0KSB7CiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXQ7CiAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9ICh0YXJnZXQudmFsdWUpID8gdGFyZ2V0LnZhbHVlIDogJy0nOwogICAgICAgIH0KICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgIGNvbnN0IGRhdGFsaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGF0YWxpc3QnKTsKICAgICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsICctJyk7CiAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9ICctJzsKICAgICAgICBkYXRhbGlzdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgIGNvbnN0IGVwZyA9IFNFUlZFUlsneGVwZyddWyd4bWx0dk1hcCddW3htbFR2RmlsZV07CiAgICAgICAgaWYgKGVwZykgewogICAgICAgICAgICBjb25zdCBwcm9ncmFtSWRzID0gZ2V0T3duT2JqUHJvcHMoZXBnKTsKICAgICAgICAgICAgcHJvZ3JhbUlkcy5mb3JFYWNoKChwcm9ncmFtSWQpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyYW0gPSBlcGdbcHJvZ3JhbUlkXTsKICAgICAgICAgICAgICAgIGlmIChwcm9ncmFtLmhhc093blByb3BlcnR5KCdkaXNwbGF5LW5hbWUnKSkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgcHJvZ3JhbUlkKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gcHJvZ3JhbVsiZGlzcGxheS1uYW1lIl07CiAgICAgICAgICAgICAgICAgICAgZGF0YWxpc3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgcHJvZ3JhbUlkKTsKICAgICAgICAgICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gJy0nOwogICAgICAgICAgICAgICAgICAgIGRhdGFsaXN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGF0YWxpc3QpOwogICAgICAgIHJldHVybiBbY29udGFpbmVyLCBpbnB1dCwgZGF0YWxpc3RdOwogICAgfQogICAgZ2V0UHJvZ3JhbXMoZmlsZSwgc2V0LCBhY3RpdmUpIHsKICAgICAgICAvL3ZhciBmaWxlSURzOnN0cmluZ1tdID0gZ2V0T2JqS2V5cyhTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXSkKICAgICAgICB2YXIgdmFsdWVzID0gZ2V0T2JqS2V5cyhTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXSk7CiAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICB2YXIgZGlzcGxheU5hbWU7CiAgICAgICAgdmFyIGFjdGl2ZXMgPSBnZXRPYmpLZXlzKFNFUlZFUlsiZGF0YSJdWyJTdHJlYW1QcmV2aWV3VUkiXVsiYWN0aXZlU3RyZWFtcyJdKTsKICAgICAgICB2YXIgYWN0aXZlX2xpc3QgPSBuZXcgQXJyYXkoKTsKICAgICAgICBpZiAoYWN0aXZlID09IHRydWUpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbmFtZXNfc3BsaXQgPSBTRVJWRVJbImRhdGEiXVsiU3RyZWFtUHJldmlld1VJIl1bImFjdGl2ZVN0cmVhbXMiXVthY3RpdmVzW2ldXS5zcGxpdCgiWyIpOwogICAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSBuYW1lc19zcGxpdFswXS50cmltKCk7CiAgICAgICAgICAgICAgICBpZiAoZGlzcGxheU5hbWUgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0geyAidmFsdWUiOiBkaXNwbGF5TmFtZSwgImRpc3BsYXkiOiBkaXNwbGF5TmFtZSB9OwogICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9saXN0LnB1c2gob2JqZWN0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXVt2YWx1ZXNbaV1dLmhhc093blByb3BlcnR5KCdkaXNwbGF5LW5hbWUnKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSBTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXVtmaWxlXVt2YWx1ZXNbaV1dWyJkaXNwbGF5LW5hbWUiXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gIi0iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGV4dFtpXSA9IGRpc3BsYXlOYW1lICsgIiAoIiArIHZhbHVlc1tpXSArICIpIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0ZXh0LnVuc2hpZnQoIi0iKTsKICAgICAgICB2YWx1ZXMudW5zaGlmdCgiLSIpOwogICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTRUxFQ1QiKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlc1tpXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0W2ldOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVfbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7CiAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgYWN0aXZlX2xpc3RbaV1bInZhbHVlIl0pOwogICAgICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gYWN0aXZlX2xpc3RbaV1bImRpc3BsYXkiXTsKICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgIT0gIiIpIHsKICAgICAgICAgICAgc2VsZWN0LnZhbHVlID0gc2V0OwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZWN0LnZhbHVlICE9IHNldCkgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSAiLSI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9Cn0KZnVuY3Rpb24gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGZpbGUsIGZpbGVUeXBlLCBrZXkpIHsKICAgIGlmIChmaWxlID09ICJUaHJlYWRmaW4gRHVtbXkiKSB7CiAgICAgICAgcmV0dXJuIGZpbGU7CiAgICB9CiAgICB2YXIgZmlsZUlEOwogICAgdmFyIGluZGljYXRvciA9IGZpbGUuY2hhckF0KDApOwogICAgc3dpdGNoIChpbmRpY2F0b3IpIHsKICAgICAgICBjYXNlICJNIjoKICAgICAgICAgICAgZmlsZVR5cGUgPSAibTN1IjsKICAgICAgICAgICAgZmlsZUlEID0gZmlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiSCI6CiAgICAgICAgICAgIGZpbGVUeXBlID0gImhkaHIiOwogICAgICAgICAgICBmaWxlSUQgPSBmaWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgZmlsZVR5cGUgPSAieG1sdHYiOwogICAgICAgICAgICBmaWxlSUQgPSBmaWxlLnN1YnN0cmluZygwLCBmaWxlLmxhc3RJbmRleE9mKCcuJykpOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZmlsZVR5cGVdLmhhc093blByb3BlcnR5KGZpbGVJRCkgPT0gdHJ1ZSkgewogICAgICAgIHZhciBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXVtmaWxlSURdOwogICAgICAgIHJldHVybiBkYXRhW2tleV07CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc2V0WG1sdHZDaGFubmVsKGVwZ01hcElkLCB4bWxUdkZpbGVTZWxlY3QpIHsKICAgIGNvbnN0IHhtbFR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgY29uc3QgbmV3WG1sVHZGaWxlID0geG1sVHZGaWxlU2VsZWN0LnZhbHVlOwogICAgLy8gUmVtb3ZlIG9sZCBYTUxUViBJRCBzZWxlY3Rpb24gYm94CiAgICBjb25zdCB4bWxUdklkUGlja2VyUGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXInKS5wYXJlbnRFbGVtZW50OwogICAgeG1sVHZJZFBpY2tlclBhcmVudC5pbm5lckhUTUwgPSAnJzsKICAgIC8vIENyZWF0ZSBuZXcgWE1MVFYgSUQgc2VsZWN0aW9uIGJveAogICAgY29uc3QgdHZnSWQgPSBTRVJWRVJbJ3hlcGcnXVsnZXBnTWFwcGluZyddW2VwZ01hcElkXVsndHZnLWlkJ107CiAgICBjb25zdCBbeG1sVHZJZENvbnRhaW5lciwgeG1sVHZJZElucHV0LCB4bWxUdklkRGF0YWxpc3RdID0geG1sVHYubmV3WG1sVHZJZFBpY2tlcihuZXdYbWxUdkZpbGUsIHR2Z0lkKTsKICAgIHhtbFR2SWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyJyk7CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdsaXN0JywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsICd4LW1hcHBpbmcnKTsgLy8gU2hvdWxkIHN0YXkgeC1tYXBwaW5nIGFzIGl0IHdpbGwgYmUgdXNlZCBpbiBkb25lUG9wdXBEYXRhIHRvIG1ha2UgYSBzZXJ2ZXIgcmVxdWVzdAogICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWlucHV0Jyk7CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7ZXBnTWFwSWR9JywgdGhpcy52YWx1ZSwgJyR7bmV3WG1sVHZGaWxlfScpO2ApOwogICAgeG1sVHZJZElucHV0LmNsYXNzTGlzdC5hZGQoJ2NoYW5nZWQnKTsKICAgIHhtbFR2SWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdCcpOwogICAgLy8gQWRkIG5ldyBYTUxUViBJRCBzZWxlY3Rpb24gYm94IHRvIGl0J3MgcGFyZW50CiAgICB4bWxUdklkUGlja2VyUGFyZW50LmFwcGVuZENoaWxkKHhtbFR2SWRDb250YWluZXIpOwogICAgY2hlY2tYbWx0dkNoYW5uZWwoZXBnTWFwSWQsIHhtbFR2SWRJbnB1dC52YWx1ZSwgbmV3WG1sVHZGaWxlKTsKfQpmdW5jdGlvbiBjaGVja1BQVih0aXRsZSwgZWxlbWVudCkgewogICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTsKICAgIGNvbnNvbGUubG9nKCJEVU1NWSBUWVBFOiAiICsgdmFsdWUpOwogICAgaWYgKHZhbHVlID09ICJQUFYiKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIngtcHB2LWV4dHJhIikucGFyZW50RWxlbWVudDsKICAgICAgICB0ZC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgZGJLZXkgPSAieC1wcHYtZXh0cmEiOwogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQiKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBkYktleSk7CiAgICAgICAgLy8gaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKQogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInBwdi1leHRyYSIpOwogICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgLy8gQmV6ZWljaG51bmcKICAgICAgICBpZiAodGl0bGUubGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdGQuY2xhc3NOYW1lID0gImxlZnQiOwogICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aXRsZSArICI6IjsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGVudAogICAgICAgIHRkLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIHRoaXMudGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgfQp9CmZ1bmN0aW9uIGNoZWNrWG1sdHZDaGFubmVsKGlkLCBlbGVtZW50LCB4bWxGaWxlKSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwogICAgdmFyIGJvb2w7CiAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0aXZlJyk7CiAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgdmFyIHVwZGF0ZUxvZ287CiAgICBpZiAodmFsdWUgPT0gIi0iKSB7CiAgICAgICAgYm9vbCA9IGZhbHNlOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgYm9vbCA9IHRydWU7CiAgICB9CiAgICBjaGVja2JveC5jaGVja2VkID0gYm9vbDsKICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgIGNvbnNvbGUubG9nKHhtbEZpbGUpOwogICAgLy8gS2FuYWxsb2dvIGFrdHVhbGlzaWVyZW4KICAgIC8qCiAgICB1cGRhdGVMb2dvID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQKICAgIGNvbnNvbGUubG9nKHVwZGF0ZUxvZ28pOwogICAgKi8KICAgIGlmICh4bWxGaWxlICE9ICJUaHJlYWRmaW4gRHVtbXkiICYmIGJvb2wgPT0gdHJ1ZSkgewogICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgICAgICBjb25zb2xlLmxvZygiSUQiLCBpZCk7CiAgICAgICAgY2hhbmdlQ2hhbm5lbExvZ28oaWQpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh4bWxGaWxlID09ICJUaHJlYWRmaW4gRHVtbXkiKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cGRhdGUtaWNvbiIpLmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBjaGFuZ2VDaGFubmVsTG9nbyhlcGdNYXBJZCkgewogICAgY29uc3QgY2hhbm5lbCA9IFNFUlZFUlsneGVwZyddWydlcGdNYXBwaW5nJ11bZXBnTWFwSWRdOwogICAgY29uc3QgeG1sVHZGaWxlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcHVwLXhtbHR2Jyk7CiAgICBjb25zdCB4bWxUdkZpbGUgPSB4bWxUdkZpbGVTZWxlY3Qub3B0aW9uc1t4bWxUdkZpbGVTZWxlY3Quc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBjb25zdCB4bWxUdklkSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneG1sdHYtaWQtcGlja2VyLWlucHV0Jyk7CiAgICBjb25zdCBuZXdYbWxUdklkID0geG1sVHZJZElucHV0LnZhbHVlOwogICAgY29uc3QgdXBkYXRlTG9nbyA9ICFCVUxLX0VESVQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1pY29uJykuY2hlY2tlZDsKICAgIGxldCBsb2dvOwogICAgaWYgKHVwZGF0ZUxvZ28gPT0gdHJ1ZSAmJiB4bWxUdkZpbGUgIT0gJ1RocmVhZGZpbiBEdW1teScpIHsKICAgICAgICBpZiAoU0VSVkVSWyd4ZXBnJ11bJ3htbHR2TWFwJ11beG1sVHZGaWxlXS5oYXNPd25Qcm9wZXJ0eShuZXdYbWxUdklkKSkgewogICAgICAgICAgICBsb2dvID0gU0VSVkVSWyd4ZXBnJ11bJ3htbHR2TWFwJ11beG1sVHZGaWxlXVtuZXdYbWxUdklkXVsnaWNvbiddOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbG9nbyA9IGNoYW5uZWxbJ3R2Zy1sb2dvJ107CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIHNhdmVQb3B1cERhdGEoZGF0YVR5cGUsIGlkLCByZW1vdmUsIG9wdGlvbikgewogICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCB0cnVlKTsKICAgIGlmIChkYXRhVHlwZSA9PSAibWFwcGluZyIpIHsKICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICBjb25zb2xlLmxvZygiU2F2ZSBtYXBwaW5nIGRhdGEiKTsKICAgICAgICBjbWQgPSAic2F2ZUVwZ01hcHBpbmciOwogICAgICAgIGRhdGFbImVwZ01hcHBpbmciXSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgY29uc29sZS5sb2coIlNFTkQgVE8gU0VSVkVSIik7CiAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICBkZWxldGUgVU5ET1siZXBnTWFwcGluZyJdOwogICAgICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnNvbGUubG9nKCJTYXZlIHBvcHVwIGRhdGEiKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAtY3VzdG9tIik7CiAgICB2YXIgaW5wdXRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQUJMRSIpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpOwogICAgdmFyIHNlbGVjdHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRBQkxFIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlNFTEVDVCIpOwogICAgdmFyIGlucHV0ID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGNvbmZpcm1Nc2c7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgbmFtZTsKICAgICAgICBuYW1lID0gc2VsZWN0c1tpXS5uYW1lOwogICAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdHNbaV0udmFsdWU7CiAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgIGNhc2UgInR1bmVyIjoKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBzd2l0Y2ggKGlucHV0c1tpXS50eXBlKSB7CiAgICAgICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gaW5wdXRzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgIGNhc2UgImhpZGRlbiI6CiAgICAgICAgICAgIGNhc2UgInBhc3N3b3JkIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgInR1bmVyIjoKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBwYXJzZUludChpbnB1dHNbaV0udmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBjbWQ7CiAgICBpZiAocmVtb3ZlID09IHRydWUpIHsKICAgICAgICBpbnB1dFsiZGVsZXRlIl0gPSB0cnVlOwogICAgfQogICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyB1c2VyPyI7CiAgICAgICAgICAgIGlmIChpZCA9PSAiLSIpIHsKICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlTmV3VXNlciI7CiAgICAgICAgICAgICAgICBkYXRhWyJ1c2VyRGF0YSJdID0gaW5wdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZVVzZXJEYXRhIjsKICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgZFtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgICAgIGRhdGFbInVzZXJEYXRhIl0gPSBkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGNvbmZpcm1Nc2cgPSAiRGVsZXRlIHRoaXMgcGxheWxpc3Q/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc00zVSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVNM1UiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdW2lkXSA9IGlucHV0OwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJoZGhyIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBIREhvbWVSdW4gdHVuZXI/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc0hESFIiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFVwZGF0ZQogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGNtZCA9ICJ1cGRhdGVGaWxlSERIUiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBYTUxUViBmaWxlPyI7CiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKSB7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogU2F2ZQogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlRmlsZXNYTUxUViI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVYTUxUViI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgIGNvbmZpcm1Nc2cgPSAiRGVsZXRlIHRoaXMgZmlsdGVyPyI7CiAgICAgICAgICAgIGNtZCA9ICJzYXZlRmlsdGVyIjsKICAgICAgICAgICAgZGF0YVsiZmlsdGVyIl0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWx0ZXIiXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YVR5cGUsIGlkKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChyZW1vdmUgPT0gdHJ1ZSkgewogICAgICAgIGlmICghY29uZmlybShjb25maXJtTXNnKSkgewogICAgICAgICAgICBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBjb25zb2xlLmxvZygiU0VORCBUTyBTRVJWRVIiKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSk7Cn0KZnVuY3Rpb24gZG9uZVBvcHVwRGF0YShkYXRhVHlwZSwgaWRzU3RyKSB7CiAgICB2YXIgaWRzID0gaWRzU3RyLnNwbGl0KCcsJyk7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvcHVwLWN1c3RvbSIpOwogICAgdmFyIGlucHV0cyA9IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjaGFuZ2VkIik7CiAgICBpZHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgdmFyIGlucHV0ID0gbmV3IE9iamVjdCgpOwogICAgICAgIGlucHV0ID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtpZF07CiAgICAgICAgY29uc29sZS5sb2coIklOUFVUOiAiICsgaW5wdXQpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBuYW1lOwogICAgICAgICAgICB2YXIgdmFsdWU7CiAgICAgICAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0c1tpXS50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNoZWNrYm94IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5wdXRzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgICAgICBuYW1lID0gaW5wdXRzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgICAgICAgIGNhc2UgInR2Zy1sb2dvIjoKICAgICAgICAgICAgICAgICAgICAvLyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1syXS5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50KS5zZXRBdHRyaWJ1dGUoInNyYyIsIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1jaGFubmVsLXN0YXJ0IjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1szXS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1uYW1lIjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1szXS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1jYXRlZ29yeSI6CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gIndoaXRlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgY2F0Q29sb3JTZXR0aW5ncyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllc0NvbG9ycyJdOwogICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNfc3BsaXQgPSBjYXRDb2xvclNldHRpbmdzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9yc19zcGxpdC5sZW5ndGg7IGlpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHNDb2xvcl9zcGxpdCA9IGNvbG9yc19zcGxpdFtpaV0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdHNDb2xvcl9zcGxpdFswXSA9PSB2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBjYXRzQ29sb3Jfc3BsaXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbM10uZmlyc3RDaGlsZC5zdHlsZS5ib3JkZXJDb2xvciA9IGNvbG9yOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1ncm91cC10aXRsZSI6CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbNV0uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngteG1sdHYtZmlsZSI6CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9ICJUaHJlYWRmaW4gRHVtbXkiICYmIHZhbHVlICE9ICItIikgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZSh2YWx1ZSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09ICItIikgewogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFsieC1hY3RpdmUiXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s2XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1tYXBwaW5nIjoKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0WyJ4LWFjdGl2ZSJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzddLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWJhY2t1cC1jaGFubmVsIjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s3XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC1oaWRlLWNoYW5uZWwiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzddLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB9CiAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICBzZWFyY2hJbk1hcHBpbmcoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0WyJ4LWFjdGl2ZSJdID09IGZhbHNlKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc05hbWUgPSAibm90QWN0aXZlRVBHIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsKICAgICAgICB9CiAgICAgICAgY29uc29sZS5sb2coaW5wdXRbInR2Zy1sb2dvIl0pOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzJdLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJzcmMiLCBpbnB1dFsidHZnLWxvZ28iXSk7CiAgICB9KTsKICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgIHJldHVybjsKfQpmdW5jdGlvbiBzaG93UHJldmlldyhlbGVtZW50KSB7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15U3RyZWFtc0JveCIpOwogICAgc3dpdGNoIChlbGVtZW50KSB7CiAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJub3RWaXNpYmxlIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHZhciBzdHJlYW1zID0gWyJhY3RpdmVTdHJlYW1zIiwgImluYWN0aXZlU3RyZWFtcyJdOwogICAgc3RyZWFtcy5mb3JFYWNoKHByZXZpZXcgPT4gewogICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZXZpZXcpOwogICAgICAgIHRhYmxlLmlubmVySFRNTCA9ICIiOwogICAgICAgIHZhciBvYmogPSBTRVJWRVJbImRhdGEiXVsiU3RyZWFtUHJldmlld1VJIl1bcHJldmlld107CiAgICAgICAgdmFyIGNhcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJDQVBUSU9OIik7CiAgICAgICAgdmFyIHJlc3VsdCA9IHByZXZpZXcucmVwbGFjZSgvKFtBLVpdKS9nLCAiICQxIik7CiAgICAgICAgdmFyIGZpbmFsUmVzdWx0ID0gcmVzdWx0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVzdWx0LnNsaWNlKDEpOwogICAgICAgIGNhcHRpb24uaW5uZXJIVE1MID0gZmluYWxSZXN1bHQ7CiAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoY2FwdGlvbik7CiAgICAgICAgdmFyIHRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEJPRFkiKTsKICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CiAgICAgICAgb2JqLnNsaWNlKDAsIDEwMDApLmZvckVhY2goY2hhbm5lbCA9PiB7CiAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgIHZhciB0ZEtleSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgIHZhciB0ZFZhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgIHRkS2V5LmNsYXNzTmFtZSA9ICJ0ZEtleSI7CiAgICAgICAgICAgIHRkVmFsLmNsYXNzTmFtZSA9ICJ0ZFZhbCI7CiAgICAgICAgICAgIHN3aXRjaCAocHJldmlldykgewogICAgICAgICAgICAgICAgY2FzZSAiYWN0aXZlU3RyZWFtcyI6CiAgICAgICAgICAgICAgICAgICAgdGRLZXkuaW5uZXJUZXh0ID0gIkNoYW5uZWw6ICgrKSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJpbmFjdGl2ZVN0cmVhbXMiOgogICAgICAgICAgICAgICAgICAgIHRkS2V5LmlubmVyVGV4dCA9ICJDaGFubmVsOiAoLSkiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRkVmFsLmlubmVyVGV4dCA9IGNoYW5uZWw7CiAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkS2V5KTsKICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRWYWwpOwogICAgICAgICAgICB0Ym9keS5hcHBlbmRDaGlsZCh0cik7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICB9KTsKICAgIH0pOwogICAgLy8gc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSkKICAgIGRpdi5jbGFzc05hbWUgPSAidmlzaWJsZSI7CiAgICByZXR1cm47Cn0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVudV90cy5qcy5tYXA=" + webUI["html/lang/en.json"] = "ew0KICAibWFpbk1lbnUiOiB7DQogICAgIml0ZW0iOiB7DQogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLA0KICAgICAgInBtc0lEIjogIlBNUyBJRCIsDQogICAgICAiZmlsdGVyIjogIkZpbHRlciIsDQogICAgICAieG1sdHYiOiAiWE1MVFYiLA0KICAgICAgIm1hcHBpbmciOiAiTWFwcGluZyIsDQogICAgICAidXNlcnMiOiAiVXNlcnMiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0sDQogICAgImhlYWRsaW5lIjogew0KICAgICAgInBsYXlsaXN0IjogIkxvY2FsIG9yIHJlbW90ZSBwbGF5bGlzdHMiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIgcGxheWxpc3QiLA0KICAgICAgInhtbHR2IjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlcyIsDQogICAgICAibWFwcGluZyI6ICJNYXAgcGxheWxpc3QgY2hhbm5lbHMgdG8gRVBHIGNoYW5uZWxzIiwNCiAgICAgICJ1c2VycyI6ICJVc2VyIG1hbmFnZW1lbnQiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0NCiAgfSwNCiAgImNvbmZpcm0iOiB7DQogICAgInJlc3RvcmUiOiAiQWxsIGRhdGEgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRob3NlIGZyb20gdGhlIGJhY2t1cC4gU2hvdWxkIHRoZSBmaWxlcyBiZSByZXN0b3JlZD8iDQogIH0sDQogICJhbGVydCI6IHsNCiAgICAiZmlsZUxvYWRpbmdFcnJvciI6ICJGaWxlIGNvdWxkbid0IGJlIGxvYWRlZCIsDQogICAgImludmFsaWRDaGFubmVsTnVtYmVyIjogIkludmFsaWQgY2hhbm5lbCBudW1iZXIiLA0KICAgICJtaXNzaW5nSW5wdXQiOiAiTWlzc2luZyBpbnB1dCINCiAgfSwNCiAgImJ1dHRvbiI6IHsNCiAgICAiYmFjayI6ICJCYWNrIiwNCiAgICAiYmFja3VwIjogIkJhY2t1cCIsDQogICAgImJ1bGtFZGl0IjogIkJ1bGsgRWRpdCIsDQogICAgImNhbmNlbCI6ICJDYW5jZWwiLA0KICAgICJkZWxldGUiOiAiRGVsZXRlIiwNCiAgICAiZG9uZSI6ICJEb25lIiwNCiAgICAibG9naW4iOiAiTG9naW4iLA0KICAgICJuZXciOiAiTmV3IiwNCiAgICAibmV4dCI6ICJOZXh0IiwNCiAgICAicmVzdG9yZSI6ICJSZXN0b3JlIiwNCiAgICAic2F2ZSI6ICJTYXZlIiwNCiAgICAic2VhcmNoIjogIlNlYXJjaCIsDQogICAgInVwZGF0ZSI6ICJVcGRhdGUiLA0KICAgICJjcmFldGVBY2NvdW50IjogIkNyZWF0ZSBBY2NvdW50IiwNCiAgICAicmVzZXRMb2dzIjogIlJlc2V0IExvZ3MiLA0KICAgICJ1cGxvYWRMb2dvIjogIlVwbG9hZCBMb2dvIiwNCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiAiU29ydCBDaGFubmVscyBBbHBoYWJldGljYWxseSIsDQogICAgInNvcnRDaGFubmVsTnVtYmVycyI6ICJTb3J0IENoYW5uZWxzIg0KICB9LA0KICAiZmlsdGVyIjogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJuYW1lIjogIkZpbHRlciBOYW1lIiwNCiAgICAgICJ0eXBlIjogIkZpbHRlciBUeXBlIiwNCiAgICAgICJmaWx0ZXIiOiAiRmlsdGVyIg0KICAgIH0sDQogICAgImN1c3RvbSI6ICJDdXN0b20iLA0KICAgICJncm91cCI6ICJHcm91cCIsDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVyIE5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlciBuYW1lIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic3RhcnRpbmdudW1iZXIiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU3RhcnRpbmcgQ2hhbm5lbCBOdW1iZXIgdG8gdXNlIGZvciB0aGlzIEdyb3VwIEZpbHRlciAoRGVmYXVsdCBpcyAxMDAwKSINCiAgICB9LA0KICAgICJjYXRlZ29yeSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgQ2F0ZWdvcnkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlciBDYXRlZ29yeSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRmlsdGVyIENhdGVnb3J5IHNldHMgYWxsIGNoYW5uZWxzIGluIHRoZSBmaWx0ZXIgdG8gYSBzcGVjaWZpYyBjYXRlZ29yeSAobmV3cywgc3BvcnRzLCBldGMpIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInR5cGUiOiB7DQogICAgICAidGl0bGUiOiAiVHlwZSIsDQogICAgICAiZ3JvdXBUaXRsZSI6ICJHcm91cCBUaXRsZSIsDQogICAgICAiY3VzdG9tRmlsdGVyIjogIkN1c3RvbSBGaWx0ZXIiDQogICAgfSwNCiAgICAiY2FzZVNlbnNpdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJDYXNlIFNlbnNpdGl2ZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsdGVyUnVsZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgUnVsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiU3BvcnQge0hEfSAhe0VTLElUfSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbHRlckdyb3VwIjogew0KICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlNlbGVjdCBhIE0zVSBncm91cC4gKENvdW50ZXIpPGJyPkNoYW5naW5nIHRoZSBncm91cCB0aXRsZSBpbiB0aGUgTTNVIGludmFsaWRhdGVzIHRoZSBmaWx0ZXIuIg0KICAgIH0sDQogICAgImluY2x1ZGUiOiB7DQogICAgICAidGl0bGUiOiAiSW5jbHVkZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRkhELFVIRCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3QgaW5jbHVkZS48YnI+KENvbW1hIHNlcGFyYXRlZCkgQ29tbWEgbWVhbnMgb3IiDQogICAgfSwNCiAgICAiZXhjbHVkZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJFeGNsdWRlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJFUyxJVCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3Qgbm90IGNvbnRhaW4uPGJyPihDb21tYSBzZXBhcmF0ZWQpIENvbW1hIG1lYW5zIG9yIg0KICAgIH0NCiAgfSwNCiAgInBsYXlsaXN0Ijogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJwbGF5bGlzdCI6ICJQbGF5bGlzdCIsDQogICAgICAidHVuZXIiOiAiVHVuZXIiLA0KICAgICAgImxhc3RVcGRhdGUiOiAiTGFzdCBVcGRhdGUiLA0KICAgICAgImF2YWlsYWJpbGl0eSI6ICJBdmFpbGFiaWxpdHkiLA0KICAgICAgInR5cGUiOiAiVHlwZSIsDQogICAgICAic3RyZWFtcyI6ICJTdHJlYW1zIiwNCiAgICAgICJncm91cFRpdGxlIjogImdyb3VwLXRpdGxlIiwNCiAgICAgICJ0dmdJRCI6ICJ0dmctaWQiLA0KICAgICAgInVuaXF1ZUlEIjogIlVuaXF1ZSBJRCINCiAgICB9LA0KICAgICJwbGF5bGlzdFR5cGUiOiB7DQogICAgICAidGl0bGUiOiAiUGxheWxpc3QgdHlwZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJUeXBlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJuYW1lIjogew0KICAgICAgInRpdGxlIjogIk5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlBsYXlsaXN0IG5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRGVzY3JpcHRpb24iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWxlTTNVIjogew0KICAgICAgInRpdGxlIjogIk0zVSBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBNM1UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWxlSERIUiI6IHsNCiAgICAgICJ0aXRsZSI6ICJIREhvbWVSdW4gSVAiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIklQIGFkZHJlc3MgYW5kIHBvcnQgKDE5Mi4xNjguMS4xMDo1MDA0KSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInR1bmVyIjogew0KICAgICAgInRpdGxlIjogIlR1bmVyIC8gU3RyZWFtcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLiA8YnI+T25seSBhdmFpbGFibGUgd2l0aCBhY3RpdmF0ZWQgYnVmZmVyLjxicj5OZXcgc2V0dGluZ3Mgd2lsbCBvbmx5IGJlIGFwcGxpZWQgYWZ0ZXIgcXVpdHRpbmcgYWxsIHN0cmVhbXMuIg0KICAgIH0NCiAgfSwNCiAgInhtbHR2Ijogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJndWlkZSI6ICJHdWlkZSIsDQogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIkF2YWlsYWJpbGl0eSIsDQogICAgICAiY2hhbm5lbHMiOiAiQ2hhbm5lbHMiLA0KICAgICAgInByb2dyYW1zIjogIlByb2dyYW1zIg0KICAgIH0sDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiR3VpZGUgbmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVYTUxUViI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBYTUxUViIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0NCiAgfSwNCiAgIm1hcHBpbmciOiB7DQogICAgInRhYmxlIjogew0KICAgICAgImNoTm8iOiAiQ2guIE5vLiIsDQogICAgICAibG9nbyI6ICJMb2dvIiwNCiAgICAgICJjaGFubmVsTmFtZSI6ICJDaGFubmVsIE5hbWUiLA0KICAgICAgInBsYXlsaXN0IjogIlBsYXlsaXN0IiwNCiAgICAgICJncm91cFRpdGxlIjogIkdyb3VwIFRpdGxlIiwNCiAgICAgICJ4bWx0dkZpbGUiOiAiWE1MVFYgRmlsZSIsDQogICAgICAieG1sdHZJRCI6ICJYTUxUViBJRCINCiAgICB9LA0KICAgICJhY3RpdmUiOiB7DQogICAgICAidGl0bGUiOiAiQWN0aXZlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjaGFubmVsTmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJDaGFubmVsIE5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxHcm91cFN0YXJ0Ijogew0KICAgICAgInRpdGxlIjogIkNoYW5uZWwgR3JvdXAgU3RhcnQiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInNvcnRDaGFubmVsc0FscGhhIjogew0KICAgICAgInRpdGxlIjogIlNvcnQgQWxwaGFiZXRpY2FsbHkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInNvcnRDaGFubmVscyI6IHsNCiAgICAgICJ0aXRsZSI6ICJTb3J0IENoYW5uZWxzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJDaGFubmVsIERlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VkIGJ5IHRoZSBEdW1teSBhcyBhbiBYTUwgZGVzY3JpcHRpb24iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ1cGRhdGVDaGFubmVsTmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjaGFubmVsTG9nbyI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2dvIFVSTCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidXBkYXRlQ2hhbm5lbExvZ28iOiB7DQogICAgICAidGl0bGUiOiAiVXBkYXRlIENoYW5uZWwgTG9nbyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcnkiOiB7DQogICAgICAidGl0bGUiOiAiRVBHIENhdGVnb3J5IiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJtM3VHcm91cFRpdGxlIjogew0KICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlICh0aHJlYWRmaW4ubTN1KSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAieG1sdHZGaWxlIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInhtbHR2Q2hhbm5lbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBDaGFubmVsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwcHZleHRyYSI6IHsNCiAgICAgICJ0aXRsZSI6ICJQUFYgRXh0cmEgVGl0bGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyB3aWxsIGFkZCBjdXN0b20gdGV4dCB0byB0aGUgUHJvZ3JhbW1lIGRhdGEiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDEiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDIiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDMiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiaGlkZUNoYW5uZWwiOiB7DQogICAgICAidGl0bGUiOiAiSGlkZSBCYWNrdXAgQ2hhbm5lbCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAidXNlcnMiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgInVzZXJuYW1lIjogIlVzZXJuYW1lIiwNCiAgICAgICJwYXNzd29yZCI6ICJQYXNzd29yZCIsDQogICAgICAid2ViIjogIldFQiIsDQogICAgICAicG1zIjogIlBNUyIsDQogICAgICAibTN1IjogIk0zVSIsDQogICAgICAieG1sIjogIlhNTCIsDQogICAgICAiYXBpIjogIkFQSSINCiAgICB9LA0KICAgICJ1c2VybmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVc2VybmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29yZCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjb25maXJtIjogew0KICAgICAgInRpdGxlIjogIkNvbmZpcm0iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlBhc3N3b3JkIGNvbmZpcm0iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ3ZWIiOiB7DQogICAgICAidGl0bGUiOiAiV2ViIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAicG1zIjogew0KICAgICAgInRpdGxlIjogIlBNUyBBY2Nlc3MiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm0zdSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UgQWNjZXNzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ4bWwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYXBpIjogew0KICAgICAgInRpdGxlIjogIkFQSSBBY2Nlc3MiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0NCiAgfSwNCiAgInNldHRpbmdzIjogew0KICAgICJjYXRlZ29yeSI6IHsNCiAgICAgICJnZW5lcmFsIjogIkdlbmVyYWwiLA0KICAgICAgImZpbGVzIjogIkZpbGVzIiwNCiAgICAgICJuZXR3b3JrIjogIk5ldHdvcmsiLA0KICAgICAgInN0cmVhbWluZyI6ICJTdHJlYW1pbmciLA0KICAgICAgImJhY2t1cCI6ICJCYWNrdXAiLA0KICAgICAgImF1dGhlbnRpY2F0aW9uIjogIkF1dGhlbnRpY2F0aW9uIg0KICAgIH0sDQogICAgInVwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJTY2hlZHVsZSBmb3IgdXBkYXRpbmcgKFBsYXlsaXN0LCBYTUxUViwgQmFja3VwKSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiMDAwMCwxMDAwLDIwMDAiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRpbWUgaW4gMjQgaG91ciBmb3JtYXQgKDA4MDAgPSA4OjAwIGFtKS4gTW9yZSB0aW1lcyBjYW4gYmUgZW50ZXJlZCBjb21tYSBzZXBhcmF0ZWQuIExlYXZlIHRoaXMgZmllbGQgZW1wdHkgaWYgbm8gdXBkYXRlcyBhcmUgdG8gYmUgY2FycmllZCBvdXQuIg0KICAgIH0sDQogICAgImFwaSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBUEkgSW50ZXJmYWNlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWaWEgQVBJIGludGVyZmFjZSBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIFRocmVhZGZpbi4gQVBJIGRvY3VtZW50YXRpb24gaXMgPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL1RocmVhZGZpbi9UaHJlYWRmaW4tRG9jdW1lbnRhdGlvbi9ibG9iL21hc3Rlci9lbi9jb25maWd1cmF0aW9uLm1kI2FwaSc+aGVyZTwvYT4iDQogICAgfSwNCiAgICAic3NkcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJTU0RQIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTU0RQIGlzIGEgbmV0d29yayBwcm90b2NvbCBmb3Igc2VydmljZSBkaXNjb3ZlcnkuIEl0IGlzIHVzZWQgZm9yIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIFRocmVhZGZpbiBpbiB0aGUgbmV0d29yay4iDQogICAgfSwNCiAgICAiZHVtbXkiOiB7DQogICAgICAidGl0bGUiOiAiRW5hYmxlIERlZmF1bHQgRHVtbXkgRGF0YSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiBlbmFibGVkLCB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBtYXAgaW5hY3RpdmUgY2hhbm5lbHMgdG8gdGhlIGR1bW15IGRhdGEgY2hhbm5lbCBiZWxvdy4gVXNlIHRoaXMgdG8ga2VlcCBMaXZlIEV2ZW50IGNoYW5uZWxzIGFjdGl2ZS4iDQogICAgfSwNCiAgICAiZHVtbXlDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIkR1bW15IERhdGEgQ2hhbm5lbCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IHRoZSBkZWZhdWx0IGNoYW5uZWwgdG8gdXNlIHdoZW4gbWFwcGluZyBpbmFjdGl2ZSBjaGFubmVscyB0byB0aGUgZHVtbXkgZGF0YS4iDQogICAgfSwNCiAgICAiaWdub3JlRmlsdGVycyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJZ25vcmUgRmlsdGVycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgZmlsdGVyaW5nIGlzIGNvbXBsZXRlbHkgaWdub3JlZC4iDQogICAgfSwNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4LCBFbWJ5IG9yIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBVc2Ugb2Ygb25lIG9yIG1vcmUgWE1MVFYgZmlsZXM8YnI+LSBDaGFubmVsIG1hbmFnZW1lbnQ8YnI+LSBNM1UgLyBYTUxUViBleHBvcnQgKEhUVFAgbGluayBmb3IgSVBUViBhcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgVHVuZXJzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiINCiAgICB9LA0KICAgICJmaWxlc1VwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGVzIGFsbCBmaWxlcyBhdCBzdGFydHVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJVcGRhdGVzIGFsbCBwbGF5bGlzdHMsIHR1bmVyIGFuZCBYTUxUViBmaWxlcyBhdCBzdGFydHVwLiINCiAgICB9LA0KICAgICJjYWNoZUltYWdlcyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJbWFnZSBDYWNoaW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIG9wdGlvbiB3aWxsIHJld3JpdGUgdGhlIG0zdSBmaWxlIHRvIGxvY2FsIGltYWdlIGNhY2hlIGZvciB0diBsb2dvcy48YnI+QWxsIGltYWdlcyBmcm9tIHRoZSBYTUxUViBmaWxlIGFyZSBjYWNoZWQsIGFsbG93aW5nIGZhc3RlciByZW5kZXJpbmcgb2YgdGhlIGdyaWQgaW4gdGhlIGNsaWVudC48YnI+RG93bmxvYWRpbmcgdGhlIGltYWdlcyBtYXkgdGFrZSBhIHdoaWxlIGFuZCB3aWxsIGJlIGRvbmUgaW4gdGhlIGJhY2tncm91bmQuPGJyPiINCiAgICB9LA0KICAgICJyZXBsYWNlRW1wdHlJbWFnZXMiOiB7DQogICAgICAidGl0bGUiOiAiUmVwbGFjZSBtaXNzaW5nIHByb2dyYW0gaW1hZ2VzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiB0aGUgcG9zdGVyIGluIHRoZSBYTUxUViBwcm9ncmFtIGlzIG1pc3NpbmcsIHRoZSBjaGFubmVsIGxvZ28gd2lsbCBiZSB1c2VkLiINCiAgICB9LA0KICAgICJyZXBsYWNlQ2hhbm5lbFRpdGxlIjogew0KICAgICAgInRpdGxlIjogIlJlcGxhY2UgUFBWIGNoYW5uZWxzIHRpdGxlL2Rlc2MiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZSB0aGlzIGlmIHlvdXIgcHJvdmlkZXIgbWFwcyB0aGUgUFBWIGV2ZW50IG5hbWUgdG8gdGhlIGNoYW5uZWwgbmFtZSINCiAgICB9LA0KICAgICJUaHJlYWRmaW5BdXRvVXBkYXRlIjogew0KICAgICAgInRpdGxlIjogIkF1dG9tYXRpYyB1cGRhdGUgb2YgVGhyZWFkZmluIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiBhIG5ldyB2ZXJzaW9uIG9mIFRocmVhZGZpbiBpcyBhdmFpbGFibGUsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQuIFRoZSB1cGRhdGVzIGFyZSBkb3dubG9hZGVkIGZyb20gR2l0SHViLiINCiAgICB9LA0KICAgICJzdHJlYW1CdWZmZXJpbmciOiB7DQogICAgICAidGl0bGUiOiAiU3RyZWFtIEJ1ZmZlciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb25zIG9mIHRoZSBidWZmZXI6PGJyPi0gVGhlIHN0cmVhbSBpcyBwYXNzZWQgZnJvbSBGRm1wZWcgb3IgVkxDIHRvIFBsZXgsIEVtYnksIEplbGx5ZmluIG9yIE0zVSBQbGF5ZXI8YnI+LSBTbWFsbCBqZXJraW5nIG9mIHRoZSBzdHJlYW1zIGNhbiBiZSBjb21wZW5zYXRlZDxicj4tIEhMUyAvIE0zVTggc3VwcG9ydDxicj4tIFJUUCAvIFJUUFMgc3VwcG9ydDxicj4tIFJlLXN0cmVhbWluZzxicj4tIFNlcGFyYXRlIHR1bmVyIGxpbWl0IGZvciBlYWNoIHBsYXlsaXN0IiwNCiAgICAgICJpbmZvX2ZhbHNlIjogIk5vIEJ1ZmZlciAoQ2xpZW50IGNvbm5lY3RzIGRpcmVjdGx5IHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyKSIsDQogICAgICAiaW5mb19mZm1wZWciOiAiRkZtcGVnIGNvbm5lY3RzIHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyIiwNCiAgICAgICJpbmZvX3ZsYyI6ICJWTEMgY29ubmVjdHMgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIiDQogICAgfSwNCiAgICAidWRweHkiOiB7DQogICAgICAidGl0bGUiOiAiVURQeHkgYWRkcmVzcyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGFkZHJlc3Mgb2YgeW91ciBVRFB4eSBzZXJ2ZXIuIElmIHNldCwgYW5kIHRoZSBjaGFubmVsIFVSTHMgaW4gdGhlIG0zdSBpcyBtdWx0aWNhc3QsIFRocmVhZGZpbiB3aWxsIHJld3JpdGUgaXQgc28gdGhhdCBpdCBpcyBhY2Nlc3NlZCB2aWEgdGhlIFVEUHh5IHNlcnZpY2UuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJob3N0OnBvcnQiDQogICAgfSwNCiAgICAiZmZtcGVnUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJGRm1wZWcgQmluYXJ5IFBhdGgiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBhdGggdG8gRkZtcGVnIGJpbmFyeS4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2ZmbXBlZyINCiAgICB9LA0KICAgICJmZm1wZWdPcHRpb25zIjogew0KICAgICAgInRpdGxlIjogIkZGbXBlZyBPcHRpb25zIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJGRm1wZWcgb3B0aW9ucy48YnI+T25seSBjaGFuZ2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLjxicj5MZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncy4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkxlYXZlIGJsYW5rIHRvIHNldCBkZWZhdWx0IHNldHRpbmdzIg0KICAgIH0sDQogICAgInZsY1BhdGgiOiB7DQogICAgICAidGl0bGUiOiAiVkxDIC8gQ1ZMQyBCaW5hcnkgUGF0aCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUGF0aCB0byBWTEMgLyBDVkxDIGJpbmFyeS4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9wYXRoL3RvL2N2bGMiDQogICAgfSwNCiAgICAidmxjT3B0aW9ucyI6IHsNCiAgICAgICJ0aXRsZSI6ICJWTEMgLyBDVkxDIE9wdGlvbnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlZMQyAvIENWTEMgb3B0aW9ucy48YnI+T25seSBjaGFuZ2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLjxicj5MZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncy4iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkxlYXZlIGJsYW5rIHRvIHNldCBkZWZhdWx0IHNldHRpbmdzIg0KICAgIH0sDQogICAgImJ1ZmZlclNpemUiOiB7DQogICAgICAidGl0bGUiOiAiQnVmZmVyIFNpemUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkJ1ZmZlciBzaXplIGluIE1CLjxicj5NM1U4OiBJZiB0aGUgVFMgc2VnbWVudCBzbWFsbGVyIHRoZW4gdGhlIGJ1ZmZlciBzaXplLCB0aGUgZmlsZSBzaXplIG9mIHRoZSBzZWdtZW50IGlzIHVzZWQuIg0KICAgIH0sDQogICAgInN0b3JlQnVmZmVySW5SQU0iOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJTdG9yZSBidWZmZXIgaW4gUkFNIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiBjaGVja2VkLCB3cml0ZSBidWZmZXIgdG8gUkFNIGluc3RlYWQgb2Ygd3JpdGluZyB0byBkaXNrIg0KICAgIH0sDQogICAgIm9taXRQb3J0cyI6DQogICAgew0KICAgICAgInRpdGxlIjogIk9taXQgcG9ydCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQnkgYWN0aXZhdGluZyB0aGlzIGNoZWNrYm94IHRoZSBtM3UgZmlsZSB3aWxsIG5vdCBjb250YWluIHRoZSBwb3J0IGluIHRoZSB1cmwiDQogICAgfSwNCiAgICAibGlzdGVuaW5nSXAiIDoNCiAgICB7DQogICAgICAidGl0bGUiOiAiTGlzdGVuaW5nIElQcyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRW50ZXIgdGhlIGxpc3RlbmluZyBJUHMgc2VwcmF0ZWQgYnkgYW4gJzsnIGZvciBleGFtcGxlOiAxMjcuMC4wLjE7MTkyLjE2OC4yLjEiDQogICAgfSwNCiAgICAiZm9yY2VIdHRwcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkZvcmNlIEhUVFBTIHRvIFVwc3RyZWFtIHNlcnZlciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiB0aGlzIGNoZWNrYm94IGlzIGFjdGl2YXRlZCBUaHJlYWRmaW4gd2lsbCBiZSBmb3JjZWQgdG8gdXNlIEhUVFBTIGNvbm5lY3Rpb24gdG8gdXBzdHJlYW0gc2VydmVyIDxicj5UaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBhcyB0aGUgZ2l2ZW4gdXJscyB3aWxsIGJlIHJld3JpdHRlbiB0byBodHRwcyB1cmxzLCB0aGlzIGNhbiBsZWFkIHRvIDQwNCBIVFRQIEVycm9yIENvZGVzPC9icj4iDQogICAgfSwNCiAgICAidXNlSHR0cHMiOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJVc2UgSFRUUFMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZSBIVFRQUyBwcm90b2NvbCBmb3IgVGhyZWFkZmluLCBIVFRQUyBQb3J0IG5lZWRzIHRvIGJlIHNldCwgb3RoZXJ3aXNlIHRoZSA0NDMgd2lsbCBiZSB1c2VkISINCiAgICB9LA0KICAgICJmb3JjZUNsaWVudEh0dHBzIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiRm9yY2UgY2xpZW50IHRvIHVzZSBodHRwcyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWxsIFVSTHMgdG8gdGhpcyB0aHJlYWRmaW4gaW5zdGFuY2Ugd2lsbCBiZSBzdGFydGluZyB3aXRoIGh0dHBzIg0KICAgIH0sDQogICAgInRocmVhZGZpbkRvbWFpbiI6DQogICAgew0KICAgICAgInRpdGxlIjogIlRocmVhZGZpbiBEb21haW4iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldoZW4gbm90IGVtcHR5LCB0aGlzIHdpbGwgcmV3cml0ZSB0aGUgVVJMcyBpbiB0aGUgbmV3IG0zdSB0byBhIEZRRE4uPGJyPkRvIE5PVCBpbmNsdWRlIGh0dHAgKGV4OiBzb21lZG9tYWluLmNvbSk8L2JyPiINCiAgICB9LA0KICAgICJlbmFibGVOb25Bc2NpaSI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVuYWJsZSBOb24tQVNDSUkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgYWxsb3cgc3BlY2lhbCBub24gYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgTTNVIGFuZCBFUEcuIERlZmF1bHQgaXMgZGlzYWJsZWQiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDdXN0b21pemUgdGhlIEVQRyBDYXRlZ29yaWVzLiBUaGUgZm9ybWF0IGlzIGtleTp2YWx1ZXxrZXk6dmFsdWUsIHNvIE5ld3M6bmV3c3xTcG9ydHM6c3BvcnRzfE1vdmllczptb3ZpZXMiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllc0NvbG9ycyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIENvbG9ycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9taXplIHRoZSBFUEcgQ2F0ZWdvcnkgY29sb3JzLiBUaGUgZm9ybWF0IGlzIHZhbHVlOmNvbG9yfHZhbHVlOmNvbG9yLCBzbyBuZXdzOnRvbWF0b3xzcG9ydHM6eWVsbG93Z3JlZW58bW92aWVzOnJveWFsYmx1ZSINCiAgICB9LA0KICAgICJidWZmZXJUaW1lb3V0Ijogew0KICAgICAgInRpdGxlIjogIlRpbWVvdXQgZm9yIG5ldyBjbGllbnQgY29ubmVjdGlvbnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBUaHJlYWRmaW4gYnVmZmVyIHdhaXRzIHVudGlsIG5ldyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLiBIZWxwZnVsIGZvciBmYXN0IGNoYW5uZWwgc3dpdGNoaW5nLiBWYWx1ZSBpbiBtaWxsaXNlY29uZHMuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiDQogICAgfSwNCiAgICAidXNlckFnZW50Ijogew0KICAgICAgInRpdGxlIjogIlVzZXIgQWdlbnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZXIgQWdlbnQgZm9yIEhUVFAgcmVxdWVzdHMuIEZvciBldmVyeSBIVFRQIGNvbm5lY3Rpb24sIHRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIHVzZXIgYWdlbnQuIFNob3VsZCBvbmx5IGJlIGNoYW5nZWQgaWYgVGhyZWFkZmluIGlzIGJsb2NrZWQuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJUaHJlYWRmaW4iDQogICAgfSwNCiAgICAiYmFja3VwUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgYXV0b21hdGljIGJhY2t1cHMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQmVmb3JlIGFueSB1cGRhdGUgb2YgdGhlIHByb3ZpZGVyIGRhdGEgYnkgdGhlIHNjaGVkdWxlLCBUaHJlYWRmaW4gY3JlYXRlcyBhIGJhY2t1cC4gVGhlIHBhdGggZm9yIHRoZSBhdXRvbWF0aWMgYmFja3VwcyBjYW4gYmUgY2hhbmdlZC4gVGhyZWFkZmluIHJlcXVpcmVzIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoaXMgZm9sZGVyLiINCiAgICB9LA0KICAgICJ0ZW1wUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiL3RtcC90aHJlYWRmaW4vIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiBmb3IgdGhlIGJ1ZmZlciBmaWxlcy4iDQogICAgfSwNCiAgICAiYmFja3VwS2VlcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwLiBPbGRlciBiYWNrdXBzIGFyZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQuIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogew0KICAgICAgInRpdGxlIjogIldFQiBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSB3ZWIgaW50ZXJmYWNlIG9ubHkgcG9zc2libGUgd2l0aCBjcmVkZW50aWFscy4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25QTVMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uIDxicj48Yj5XYXJuaW5nISEhPC9iPiBBZnRlciBhY3RpdmF0aW5nIHRoaXMgZnVuY3Rpb24gVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQTVMgRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uTTNVIjogew0KICAgICAgInRpdGxlIjogIk0zVSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRG93bmxvYWRpbmcgdGhlIHRocmVhZGZpbi5tM3UgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25YTUwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEb3dubG9hZGluZyB0aGUgdGhyZWFkZmluLnhtbCBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uQVBJIjogew0KICAgICAgInRpdGxlIjogIkFQSSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSBBUEkgaW50ZXJmYWNlIGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfQ0KICB9LA0KICAid2l6YXJkIjogew0KICAgICJlcGdTb3VyY2UiOiB7DQogICAgICAidGl0bGUiOiAiRVBHIFNvdXJjZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUE1TOjxicj4tIFVzZSBFUEcgZGF0YSBmcm9tIFBsZXgsIEVtYnkgb3IgSmVsbHlmaW4gPGJyPjxicj5YRVBHOjxicj4tIFVzZSBvZiBvbmUgb3IgbW9yZSBYTUxUViBmaWxlczxicj4tIENoYW5uZWwgbWFuYWdlbWVudDxicj4tIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpIg0KICAgIH0sDQogICAgInR1bmVyIjogew0KICAgICAgInRpdGxlIjogIk51bWJlciBvZiB0dW5lcnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBwYXJhbGxlbCBjb25uZWN0aW9ucyB0aGF0IGNhbiBiZSBlc3RhYmxpc2hlZCB0byB0aGUgcHJvdmlkZXIuPGJyPkF2YWlsYWJsZSBmb3I6IFBsZXgsIEVtYnksIEplbGx5ZmluLCBNM1UgKHdpdGggYWN0aXZlIGJ1ZmZlcikuPGJyPkFmdGVyIGEgY2hhbmdlLCBUaHJlYWRmaW4gbXVzdCBiZSBkZWxldGUgaW4gdGhlIFBsZXggLyBFbWJ5IC8gSmVsbHlmaW4gRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIg0KICAgIH0sDQogICAgIm0zdSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UgUGxheWxpc3QiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIE0zVSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIHBsYXlsaXN0cyINCiAgICB9LA0KICAgICJ4bWx0diI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBYTUxUViIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIFhNTFRWIGZpbGUiDQogICAgfQ0KICB9LA0KICAibG9naW4iOiB7DQogICAgImZhaWxlZCI6ICJVc2VyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIsDQogICAgImhlYWRsaW5lIjogIkxvZ2luIiwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlVzZXJuYW1lIg0KICAgIH0sDQogICAgInBhc3N3b3JkIjogew0KICAgICAgInRpdGxlIjogIlBhc3N3b3JkIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCINCiAgICB9DQogIH0sDQogICJhY2NvdW50Ijogew0KICAgICJmYWlsZWQiOiAiUGFzc3dvcmQgZG9lcyBub3QgbWF0Y2giLA0KICAgICJoZWFkbGluZSI6ICJDcmVhdGUgdXNlciBhY2NvdW50IiwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlVzZXJuYW1lIg0KICAgIH0sDQogICAgInBhc3N3b3JkIjogew0KICAgICAgInRpdGxlIjogIlBhc3N3b3JkIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCINCiAgICB9LA0KICAgICJjb25maXJtIjogew0KICAgICAgInRpdGxlIjogIkNvbmZpcm0iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkNvbmZpcm0iDQogICAgfQ0KICB9DQp9" webUI["html/configuration.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHkgb25sb2FkPSJqYXZhc2NyaXB0OiByZWFkeUZvckNvbmZpZ3VyYXRpb24oMCk7Ij4NCg0KICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+DQogIDwvZGl2Pg0KDQogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cF9oZWFkZXIiPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgICAgICAgICAgPGRpdiBpZD0icG9wdXAtY3VzdG9tIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIiBpZD0icG9wdXBfZm9vdGVyIj48L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJpbWdDZW50ZXIiPjwvZGl2Pg0KICA8ZGl2IGlkPSJib3giPg0KDQogICAgPGRpdiBpZD0iaGVhZGxpbmUiPg0KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPkNvbmZpZ3VyYXRpb248L2gxPg0KICAgIDwvZGl2Pg0KICAgIDxwIGlkPSJlcnIiIGNsYXNzPSJlcnJvck1zZyBjZW50ZXIiPjwvcD4NCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPg0KICAgICAgPGlucHV0IGlkPSJuZXh0IiBjbGFzcz0iIiB0eXBlPSJidXR0b24iIG5hbWU9Im5leHQiIHZhbHVlPSJOZXh0IiBvbmNsaWNrPSJqYXZhc2NyaXB0OiBzYXZlV2l6YXJkKCk7Ij4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1BM3JKRDg1Nktvd1NiN2R3bFpkWUVrTzM5R2FnaTd2SXNGMGpyUkFvUW1ES0t0UUJIVXVMWjlBc1N2NGpENFhhIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9jb25maWd1cmF0aW9uX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbWVudV90cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9zZXR0aW5nc190cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9iYXNlX3RzLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCg0KPC9odG1sPg==" - webUI["html/create-first-user.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHk+DQoNCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4NCg0KICA8ZGl2IGlkPSJib3giPg0KDQogICAgPGRpdiBpZD0iaGVhZGxpbmUiPg0KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPnt7LmFjY291bnQuaGVhZGxpbmV9fTwvaDE+DQogICAgPC9kaXY+DQoNCiAgICA8cCBpZD0iZXJyIiBjbGFzcz0iZXJyb3JNc2cgY2VudGVyIj48L3A+DQoNCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCg0KICAgICAgPGZvcm0gaWQ9ImF1dGhlbnRpY2F0aW9uIiBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4NCg0KICAgICAgICA8aDU+e3suYWNjb3VudC51c2VybmFtZS50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPg0KICAgICAgICA8aDU+e3suYWNjb3VudC5wYXNzd29yZC50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiB2YWx1ZT0iIj4NCiAgICAgICAgPGg1Pnt7LmFjY291bnQuY29uZmlybS50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0iY29uZmlybSIgdHlwZT0icGFzc3dvcmQiIG5hbWU9ImNvbmZpcm0iIHBsYWNlaG9sZGVyPSJDb25maXJtIiB2YWx1ZT0iIj4NCg0KICAgICAgPC9mb3JtPg0KDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj4NCiAgICAgIDxpbnB1dCBpZD0ic3VibWl0IiBjbGFzcz0iIiB0eXBlPSJidXR0b24iIHZhbHVlPSJ7ey5idXR0b24uY3JhZXRlQWNjb3VudH19IiBvbmNsaWNrPSJqYXZhc2NyaXB0OiBsb2dpbigpOyI+DQogICAgPC9kaXY+DQoNCg0KICA8L2Rpdj4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY2xpcGJvYXJkLmpzLzIuMC4xMC9jbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYXV0aGVudGljYXRpb25fdHMuanMiPjwvc2NyaXB0Pg0KPC9ib2R5Pg0KDQo8L2h0bWw+" webUI["html/img/logo_w_600x200.png"] = "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" webUI["html/img/m3u.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzozMTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CumjVbcAAAGWSURBVGgF7VoxTgJRFGTFaGKBFnbEcABjb0fiBego7D2ABYmn8ARKRWFNQ6gx4QRQGWJJoY2VhXGdl7Dkh7Dsx3ns3yXvJ5P97L6d92bmhwYqlcWK43gK5L2enP51NP8F7pN721wPnOITZx9qG6HxI8QIZO+9XCHeL+VQKKm8QMyxb6+iCpH528AQYs58xIQWknV8mhDxCjEXWWJCC8maT55fAmOIudpUXAYhMn8dGEHMTZqYsgiR+U+BAcTcrhNTJiEy/xHQg5jOqpjD1RsBP3+id8u3P8TUoij6SuoLIwRDfWOofjLYtteyHa1UfcvvcUT1jqpGauVuHnyAdragjv/TAkley3uhj9Y5ZhDQa2+Olgmhz4IygSWibChNZ4nQFioTWCLKhtJ0lghtoTKBJaJsKE1nidAWKhNYIsqG0nSWCG2hMoElomwoTWeJ0BYqE1giyobSdJYIbaEygSWibChNZ4nQFioTWCLKhtJ0biJzmi1/guXMrpDn/OegO3bXMuAH0TtgAvwARV3y57Q34AGoJkL+AErKZ9cqbH7AAAAAAElFTkSuQmCC" - webUI["html/js/settings_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3NfdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9zZXR0aW5nc190cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGdCQUFnQjtJQUF0QjtRQUNFLGVBQVUsR0FBVyxrQkFBa0IsQ0FBQTtJQTh2QnpDLENBQUM7SUE3dkJDLHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFtQjtRQUNoQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLElBQUksT0FBTyxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzlDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxQyxRQUFRLFdBQVcsRUFBRSxDQUFDO1lBRXBCLGVBQWU7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyw0QkFBNEIsR0FBRyxHQUFHLENBQUE7Z0JBRXJELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENB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" + webUI["html/img/users.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0zMFQxNzowODozODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CjU01MMAAANJSURBVGgF1ZnLaxNRFMYz2rpoFbW+SCsihaJQRMT6rPhAXAq6c+HChSguRFd1oRtd+A/oWhQ3oiiWFB91UbqRqlXXgoIIQhFbQTTQao2/GzLDZEjIPefO7SQHPjJz55zzfd/MZCa5N8h5ilKptJvWp8FekAed4Bv4Cj6Dh2A4CIJZPpszMHEV2MQ0SZdB0DROENMHjoEzQBoFCpZnbgYR58E/qfpE/kv2F2dmBvJ94G9ClHb3SiZGUBuASa3qGnVzjG3RmFmkKYrVHGB7e2zfdbOdBhc1TVyNnNSQNqg5wVURf/FdjRxpIEpzuIOio9JCtRHO2hrINkgJLfPFt6vaCII2WYrSpPVJi1RGuBrmTbxeSibIX5j3CUauAfOo9BXzNH4nMJ5TXREI1gHzqPQVRtc2zCyxJdAaGbclcMj7zi/jOdt6rZFhCH7akijznknqVEY4U78heSAhUuTekNSojFQIChIiYe57TtZrSY2LkecQzUjIBLljglz3VJ4qg+AXSDNGabbWXZ2wA6Qjabqg136hhHK6y60V8o2EGyl8/qHHpKZPGkYeQzyvIa9RM86XvFhjvOGQsxGIp2B50ZDJLuG2XZqnLO5rM3viGh9o0OZJon1bRLxxdHLcns1jJiYOAu2U0D2P0uStMXJdcVU+UdMlZ/NYgaA28ERg5ge5/R4l6VsjrANMWJiZJWeXnqm60vnxW90ul6u8ByaS4zX2i+S+qjGuGkrdSEWFzT1vlhlSC19Gui0UtnNriSfi6vX1ZWRjPcLEeGrzYqkb4SyvQGxvQnC93cF6BzIfx8gpYBsfSdycuei4AAR1ggugCCRh1lbugIF4vwXbhtisjfSDc+ARSOOf4lv6mNWv1VIj1ouQNF9K851gDzArtWbV1uYxS5o4zB+sp+AuKPC+cVv5RXwPuATMmUpreY1Wopgh+ybYKj4dFHWB+8DMwTZTjCHmsJUhEgfAF9DMcQtx9V8dHMyDqWZ2ENM2FL8yVV92kkY56GM5Lc6Z1vY0jbp5EJQnuqPLg4kdLWTCnIxVIJoDi4wweNYcbbGIfuLEjRxqMRNGbvTvsmyE22oZg70taKQn1BxekXw40GKfK0O9oZHsJ8ZCRbLPaI3xP7YzeQoHxWckAAAAAElFTkSuQmCC" + webUI["html/maintenance.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jhc2UuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQo8L2hlYWQ+DQoNCjxib2R5Pg0KDQogIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImltZ0NlbnRlciI+PC9kaXY+DQoNCiAgPGRpdiBpZD0iYm94Ij4NCg0KICAgIDxkaXYgaWQ9ImhlYWRsaW5lIj4NCiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj5NYWludGVuYW5jZTwvaDE+DQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCiAgICAgIFRocmVhZGZpbiBpcyB1cGRhdGluZyB0aGUgZGF0YWJhc2UsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj48L2Rpdj4NCg0KICA8L2Rpdj4NCg0KPC9ib2R5Pg0KDQo8L2h0bWw+" + webUI["html/img/filter.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzo2OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cs038OQAAAOISURBVGgF5ZpLSBVRGMfvvfmqCKKiKCqKtE3SQ8haJJm1ctPCZYHrFhXtohcUBLVsU1BRBJKLXpsSKs1aCL1oUUhvMgIloodZKmLZ72+OzNVx7jzOXGfqg/89Z875zv/7f35n7px7vanUP2JptzyGhoYKmK8GW0EZmA/mgW7wHrwDN0BTOp0epPVtxBBnLdgIVoE5YBboBR2gDTTA/5DWn0FeDPaBz8CLdeF0EBR5jYRvKbgABoAXa8Opwit/CudK8NoLs4PPM8ZyBsNnB/jpsD7X0C8cjgDXnaQkqkEPCGMSuGWivxxzx8OQj6xtpHWuPhPloHfEMWzTD0HN2GQY2xuW2Lb+/Fh+VaIQPLE5meh+gmSxFYz+BjBogtjGscfiH26Z2GmbNNltVQAIpwDdP6ZNO2iRYqTpZGhfgWUaiMC2w1kCzkbALcqLvDVvUyK6MW9HFES0b8BvsFwXEZi4F+iBtykCcjtlqf0igr52VJ1eqiIgzzdlrRIZfWfJd3SD8ZbqHvkB4XSDpJNB9V0VcX/cT4Ys/zEzSuSj/3WxW9GpRD7ETpZ/QcOJ6LyfdHugitxNehbob9G7lo4PXWBmQhPqQ/fsDOeUfjqNCU1Csi+TQ5+2luzc3yaRr6elevQZwhZr4bomYam0U41yabYqov5hvSTMjlp6RyuiAarSTLPZmox5246+lVREx/isiuh6NxhUJwF2yEpCWu1bK8WEsjyRgCSa0XrVrjNra2mC7TWD5ilYAuJoA4jSlnppF5dVEU3g0ENTD4b3nsZiZsfGJuGqj8qY+CINGqP2GLZCJ+HjtpblxAJ9k3cPrLfGJrnVUaSCarxw0jFua1lOLNBerANx+byya6IkLM2uLZWpAl6/Mcc1EjvjKtLrJNLqI5HnjfQ+bsVeteb0g2y/t7hGvd7CNjenOL8OkJ40KtOdTF+Cl/nV6Mkf4gxocI9vZPYLLKs9iQrqRIACcM2IXGeSboYrg+rztY5ARaDJWUeo0W+sXudLTFhnApaAW6FkZy/+yuXasLoCrSfwVHAnW0+gK93YawKJMLUIAdNAKwhqnSxcYUpPKB6EBE2mg7VR///EX24jybTQerXnOC70FyVP3gjTPXPTQyaP8NFPNeJrCNTPP667JKOq6VNo/A2hes5ccUjmEmPmDoD5+FMgWCcA+3FG57QJP//kQ1PgGBIOToEDgUn+t4V/AJeGknwARIKLAAAAAElFTkSuQmCC" + webUI["html/img/stream-limit.jpg"] = "/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA3LjItYzAwMCA3OS4xYjY1YTc5YjQsIDIwMjIvMDYvMTMtMjI6MDE6MDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy41IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIyQTc2MDAzNDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIyQTc2MDA0NDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjJBNzYwMDE0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjJBNzYwMDI0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAQCwsLDAsQDAwQFw8NDxcbFBAQFBsfFxcXFxcfHhcaGhoaFx4eIyUnJSMeLy8zMy8vQEBAQEBAQEBAQEBAQEBAAREPDxETERUSEhUUERQRFBoUFhYUGiYaGhwaGiYwIx4eHh4jMCsuJycnLis1NTAwNTVAQD9AQEBAQEBAQEBAQED/wAARCAQ4B4ADASIAAhEBAxEB/8QAtAABAAIDAQEBAAAAAAAAAAAAAAYHAwQFAgEIAQEAAwEBAQAAAAAAAAAAAAAAAwQFAQIGEAEAAgEDAQMFCwgIAwcDBQEAAQIDEQQFEiExBkFRcRMHYYGRIjJScrIzNDahsXOzFHQVNcHRQmKCkiOTVBYX4aLC4kNTw9LTJPBjg0RVJREBAAIBAgIIBQQCAgMAAAAAAAECAxEEMRIhUXEiMhMzBUFhUnI0gZGhI0JisRTB0RX/2gAMAwEAAhEDEQA/AK/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxPCHhTgeT4HBvN7tfW7i9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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2Q==" + webUI["html/img/threadfin.ico"] = "AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/yMXTf/LF03/xxdN/xwXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/gBdN//8XTf/zF03/YRdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN/2IXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/hRdN//8XTf/zF03/YhdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbDFtbWxNbW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sNW1tbjltbW/9bW1v0W1tbbltbWw5bW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sTW1tbDFtbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbD1tbW0dbW1ubW1tbx1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8JbW1vjW1tb/1tbW/xbW1vbW1tbw1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8dbW1ubW1tbRFtbWw5bW1sAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1sxW1tb7VtbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1vkW1tbLVtbWwAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbWw1bW1s/W1tboFtbW9FbW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vRW1tboFtbWz1bW1sMW1tbAAAAAAAAAAAA//w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w///gAAB/gAAAH4AAAB+AAAAc=" webUI["html/js/authentication_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb25fdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9hdXRoZW50aWNhdGlvbl90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQUs7SUFDWixJQUFJLEdBQUcsR0FBVyxLQUFLLENBQUE7SUFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtJQUN2QixJQUFJLEdBQUcsR0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2hELElBQUksSUFBSSxHQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUV4RCxJQUFJLE1BQU0sR0FBTyxHQUFHLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVuQixLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUU1QyxJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFzQixDQUFDLElBQUksQ0FBQTtRQUNyRCxJQUFJLEtBQUssR0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFzQixDQUFDLEtBQUssQ0FBQTtRQUV4RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1lBQ25DLEdBQUcsR0FBRyxJQUFJLENBQUE7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUVuQixDQUFDO0lBRUQsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEIsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7UUFDbkIsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDZixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1lBQzdELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUE7WUFFNUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUE7WUFDaEUsT0FBTTtRQUNSLENBQUM7SUFFSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVqQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFaEIsQ0FBQyJ9" - webUI["html/js/base_ts.js"] = "dmFyIFNFUlZFUiA9IG5ldyBPYmplY3QoKTsKdmFyIEJVTEtfRURJVCA9IGZhbHNlOwp2YXIgQ09MVU1OX1RPX1NPUlQ7CnZhciBJTkFDVElWRV9DT0xVTU5fVE9fU09SVDsKdmFyIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwp2YXIgVU5ETyA9IG5ldyBPYmplY3QoKTsKdmFyIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CnZhciBXU19BVkFJTEFCTEUgPSBmYWxzZTsKY29uc3QgdG9vbHRpcFRyaWdnZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYnMtdG9nZ2xlPSJ0b29sdGlwIl0nKTsKY29uc3QgdG9vbHRpcExpc3QgPSBbLi4udG9vbHRpcFRyaWdnZXJMaXN0XS5tYXAodG9vbHRpcFRyaWdnZXJFbCA9PiBuZXcgYm9vdHN0cmFwLlRvb2x0aXAodG9vbHRpcFRyaWdnZXJFbCkpOwovLyBuZXcgQ2xpcGJvYXJkSlMoJy5jb3B5LWJ0bicpOwp2YXIgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZEpTKCcuY29weS1idG4nKTsKY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24gKGUpIHsKICAgIGNvbnN0IHRvb2x0aXAgPSBib290c3RyYXAuVG9vbHRpcC5nZXRJbnN0YW5jZShlLnRyaWdnZXIpOwogICAgdG9vbHRpcC5zZXRDb250ZW50KHsgJy50b29sdGlwLWlubmVyJzogJ0NvcGllZCEnIH0pOwp9KTsKY2xpcGJvYXJkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7CiAgICBjb25zb2xlLmxvZyhlKTsKfSk7CnZhciBwb3B1cE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKdmFyIGxvYWRpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKLy8gTWVuw7wKdmFyIG1lbnVJdGVtcyA9IG5ldyBBcnJheSgpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJwbGF5bGlzdCIsICJ7ey5tYWluTWVudS5pdGVtLnBsYXlsaXN0fX0iLCAibTN1LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5wbGF5bGlzdH19IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ4bWx0diIsICJ7ey5tYWluTWVudS5pdGVtLnhtbHR2fX0iLCAieG1sdHYucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnhtbHR2fX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oImZpbHRlciIsICJ7ey5tYWluTWVudS5pdGVtLmZpbHRlcn19IiwgImZpbHRlci5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuZmlsdGVyfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oIm1hcHBpbmciLCAie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iLCAibWFwcGluZy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUubWFwcGluZ319IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ1c2VycyIsICJ7ey5tYWluTWVudS5pdGVtLnVzZXJzfX0iLCAidXNlcnMucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnVzZXJzfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oInNldHRpbmdzIiwgInt7Lm1haW5NZW51Lml0ZW0uc2V0dGluZ3N9fSIsICJzZXR0aW5ncy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuc2V0dGluZ3N9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nIiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nfX0iLCAibG9nLnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2d9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nb3V0IiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nb3V0fX0iLCAibG9nb3V0LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2dvdXR9fSIpKTsKLy8gS2F0ZWdvcmllbiBmw7xyIGRpZSBFaW5zdGVsbHVuZ2VuCnZhciBzZXR0aW5nc0NhdGVnb3J5ID0gbmV3IEFycmF5KCk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmdlbmVyYWx9fSIsICJUaHJlYWRmaW5BdXRvVXBkYXRlLHNzZHAsdHVuZXIsZXBnU291cmNlLGVwZ0NhdGVnb3JpZXMsZXBnQ2F0ZWdvcmllc0NvbG9ycyxkdW1teSxkdW1teUNoYW5uZWwsaWdub3JlRmlsdGVycyxhcGkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmZpbGVzfX0iLCAidXBkYXRlLGZpbGVzLnVwZGF0ZSx0ZW1wLnBhdGgsY2FjaGUuaW1hZ2VzLCx4ZXBnLnJlcGxhY2UubWlzc2luZy5pbWFnZXMseGVwZy5yZXBsYWNlLmNoYW5uZWwudGl0bGUsZW5hYmxlTm9uQXNjaWkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5Lm5ldHdvcmt9fSIsICJsaXN0ZW5pbmdJcCxodHRwVGhyZWFkZmluRG9tYWluLGZvcmNlSHR0cHMsaHR0cHNQb3J0LGh0dHBzVGhyZWFkZmluRG9tYWluIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5zdHJlYW1pbmd9fSIsICJidWZmZXIsdWRweHksYnVmZmVyLnNpemUua2Isc3RvcmVCdWZmZXJJblJBTSxidWZmZXIudGltZW91dCx1c2VyLmFnZW50LGZmbXBlZy5wYXRoLGZmbXBlZy5vcHRpb25zLHZsYy5wYXRoLHZsYy5vcHRpb25zIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5iYWNrdXB9fSIsICJiYWNrdXAucGF0aCxiYWNrdXAua2VlcCIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkuYXV0aGVudGljYXRpb259fSIsICJhdXRoZW50aWNhdGlvbi53ZWIsYXV0aGVudGljYXRpb24ucG1zLGF1dGhlbnRpY2F0aW9uLm0zdSxhdXRoZW50aWNhdGlvbi54bWwsYXV0aGVudGljYXRpb24uYXBpIikpOwpmdW5jdGlvbiBzaG93UG9wVXBFbGVtZW50KGVsbSkgewogICAgc2hvd0VsZW1lbnQoZWxtLCB0cnVlKTsKICAgIC8vIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgLy8gICBzaG93RWxlbWVudCgicG9wdXAiLCB0cnVlKTsKICAgIC8vIH0sIDEwKTsKICAgIHJldHVybjsKfQpmdW5jdGlvbiBzaG93RWxlbWVudChlbG1JRCwgdHlwZSkgewogICAgaWYgKGVsbUlEID09ICJwb3B1cC1jdXN0b20iIHx8IGVsbUlEID09ICJwb3B1cCIpIHsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgcG9wdXBNb2RhbC5zaG93KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIHBvcHVwTW9kYWwuaGlkZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgaWYgKGVsbUlEID09ICJsb2FkaW5nIikgewogICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICBsb2FkaW5nTW9kYWwuc2hvdygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBsb2FkaW5nTW9kYWwuaGlkZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIGNoYW5nZUJ1dHRvbkFjdGlvbihlbGVtZW50LCBidXR0b25JRCwgYXR0cmlidXRlKSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50Lm9wdGlvbnNbZWxlbWVudC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dHRvbklEKS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7Cn0KZnVuY3Rpb24gZ2V0TG9jYWxEYXRhKGRhdGFUeXBlLCBpZCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJoZGhyIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgaWYgKGlkID09IC0xKSB7CiAgICAgICAgICAgICAgICBkYXRhWyJhY3RpdmUiXSA9IHRydWU7CiAgICAgICAgICAgICAgICBkYXRhWyJjYXNlU2Vuc2l0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGRhdGFbImRlc2NyaXB0aW9uIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImV4Y2x1ZGUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsiZmlsdGVyIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImluY2x1ZGUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsibmFtZSJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICAgICAgZGF0YVsieC1jYXRlZ29yeSJdID0gIiI7CiAgICAgICAgICAgICAgICBTRVJWRVJbInNldHRpbmdzIl1bImZpbHRlciJdW2lkXSA9IGRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsdGVyIl1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJ1c2VycyJdW2lkXVsiZGF0YSJdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtM3VHcm91cHMiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJkYXRhIl1bInBsYXlsaXN0Il1bIm0zdSJdWyJncm91cHMiXTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKfQpmdW5jdGlvbiBnZXRPYmpLZXlzKG9iaikgewogICAgdmFyIGtleXMgPSBuZXcgQXJyYXkoKTsKICAgIGZvciAodmFyIGkgaW4gb2JqKSB7CiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkgewogICAgICAgICAgICBrZXlzLnB1c2goaSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGtleXM7Cn0KZnVuY3Rpb24gZ2V0T3duT2JqUHJvcHMob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSA6IFtdOwp9CmZ1bmN0aW9uIGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKSB7CiAgICB2YXIgY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTsKICAgIGlmIChCVUxLX0VESVQgPT0gZmFsc2UpIHsKICAgICAgICByZXR1cm4gY2hhbm5lbHM7CiAgICB9CiAgICB2YXIgdHJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfdGFibGUiKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdHJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRyc1tpXS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIikgewogICAgICAgICAgICBpZiAodHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID09IHRydWUpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWxzLnB1c2godHJzW2ldLmlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjaGFubmVsczsKfQpmdW5jdGlvbiBzZWxlY3RBbGxDaGFubmVscyh0YWJsZV9uYW1lID0gImNvbnRlbnRfdGFibGUiKSB7CiAgICB2YXIgYnVsayA9IGZhbHNlOwogICAgdmFyIHRycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlX25hbWUpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgaWYgKHRyc1swXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9PSB0cnVlKSB7CiAgICAgICAgYnVsayA9IHRydWU7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0cnNbaV0uc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsKICAgICAgICAgICAgc3dpdGNoIChidWxrKSB7CiAgICAgICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICAgICAgdHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgdHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gYnVsa0VkaXQoKSB7CiAgICBCVUxLX0VESVQgPSAhQlVMS19FRElUOwogICAgdmFyIGNsYXNzTmFtZTsKICAgIHZhciByb3dzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYnVsayIpOwogICAgc3dpdGNoIChCVUxLX0VESVQpIHsKICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJidWxrIHNob3dCdWxrIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykgewogICAgICAgIHJvd3NbaV0uY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgICAgIHJvd3NbaV0uY2hlY2tlZCA9IGZhbHNlOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHNvcnRUYWJsZShjb2x1bW4sIHRhYmxlX25hbWUgPSAiY29udGVudF90YWJsZSIpIHsKICAgIC8vIGNvbnNvbGUubG9nKCJDT0xVTU46ICIgKyBjb2x1bW4pOwogICAgaWYgKChjb2x1bW4gPT0gQ09MVU1OX1RPX1NPUlQgJiYgdGFibGVfbmFtZSA9PSAiY29udGVudF90YWJsZSIpIHx8IChjb2x1bW4gPT0gSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgJiYgdGFibGVfbmFtZSA9PSAiaW5hY3RpdmVfY29udGVudF90YWJsZSIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVfbmFtZSk7CiAgICB2YXIgdGFibGVIZWFkID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRSIilbMF07CiAgICB2YXIgdGFibGVJdGVtcyA9IHRhYmxlSGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKTsKICAgIHZhciBzb3J0T2JqID0gbmV3IE9iamVjdCgpOwogICAgdmFyIHgsIHhWYWx1ZTsKICAgIHZhciB0YWJsZUhlYWRlcjsKICAgIHZhciBzb3J0QnlTdHJpbmcgPSBmYWxzZTsKICAgIGlmIChjb2x1bW4gPiAwICYmIENPTFVNTl9UT19TT1JUID4gMCAmJiB0YWJsZV9uYW1lID09ICJjb250ZW50X3RhYmxlIikgewogICAgICAgIHRhYmxlSXRlbXNbQ09MVU1OX1RPX1NPUlRdLmNsYXNzTmFtZSA9ICJwb2ludGVyIjsKICAgICAgICB0YWJsZUl0ZW1zW2NvbHVtbl0uY2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgIH0KICAgIGVsc2UgaWYgKGNvbHVtbiA+IDAgJiYgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPiAwICYmIHRhYmxlX25hbWUgPT0gImluYWN0aXZlX2NvbnRlbnRfdGFibGUiKSB7CiAgICAgICAgdGFibGVJdGVtc1tJTkFDVElWRV9DT0xVTU5fVE9fU09SVF0uY2xhc3NOYW1lID0gInBvaW50ZXIiOwogICAgICAgIHRhYmxlSXRlbXNbY29sdW1uXS5jbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgfQogICAgaWYgKHRhYmxlX25hbWUgPT0gImNvbnRlbnRfdGFibGUiKSB7CiAgICAgICAgQ09MVU1OX1RPX1NPUlQgPSBjb2x1bW47CiAgICB9CiAgICBlbHNlIGlmICh0YWJsZV9uYW1lID09ICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIikgewogICAgICAgIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID0gY29sdW1uOwogICAgfQogICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzOwogICAgaWYgKHJvd3NbMV0gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdGFibGVIZWFkZXIgPSByb3dzWzBdOwogICAgICAgIHggPSByb3dzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpW2NvbHVtbl07CiAgICAgICAgZm9yIChpID0gMTsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgeCA9IHJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIilbY29sdW1uXTsKICAgICAgICAgICAgc3dpdGNoICh4LmNoaWxkTm9kZXNbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSU5QVVQiKVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicCI6CiAgICAgICAgICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUCIpWzBdLmlubmVyVGV4dC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDogY29uc29sZS5sb2coeC5jaGlsZE5vZGVzWzBdLnRhZ05hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh4VmFsdWUgPT0gIiIpIHsKICAgICAgICAgICAgICAgIHhWYWx1ZSA9IGk7CiAgICAgICAgICAgICAgICBzb3J0T2JqW2ldID0gcm93c1tpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoaXNOYU4oeFZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHBhcnNlRmxvYXQoeFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9ialt4VmFsdWVdID0gcm93c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgICAgICBzb3J0QnlTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBzb3J0T2JqW3hWYWx1ZS50b0xvd2VyQ2FzZSgpICsgaV0gPSByb3dzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3aGlsZSAodGFibGUuZmlyc3RDaGlsZCkgewogICAgICAgICAgICB0YWJsZS5yZW1vdmVDaGlsZCh0YWJsZS5maXJzdENoaWxkKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNvcnRWYWx1ZXMgPSBnZXRPYmpLZXlzKHNvcnRPYmopOwogICAgICAgIGlmIChzb3J0QnlTdHJpbmcgPT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoY29sdW1uID09IDMpIHsKICAgICAgICAgICAgICAgIHZhciBjb2xsYXRvciA9IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogJ2Jhc2UnIH0pOwogICAgICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KGNvbGxhdG9yLmNvbXBhcmUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZ1bmN0aW9uIHNvcnRGbG9hdChhLCBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYSAtIGI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KHNvcnRGbG9hdCk7CiAgICAgICAgfQogICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRhYmxlSGVhZGVyKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRWYWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoc29ydE9ialtzb3J0VmFsdWVzW2ldXSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaE9iaigpIHsKICAgIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgdmFyIGNoYW5uZWxzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgIHZhciBjaGFubmVsS2V5cyA9IFsieC1hY3RpdmUiLCAieC1jaGFubmVsSUQiLCAieC1uYW1lIiwgIl9maWxlLm0zdS5uYW1lIiwgIngtZ3JvdXAtdGl0bGUiLCAieC14bWx0di1maWxlIl07CiAgICBjaGFubmVscy5mb3JFYWNoKGlkID0+IHsKICAgICAgICBjaGFubmVsS2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgIGlmIChrZXkgPT0gIngtYWN0aXZlIikgewogICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhW2lkXVtrZXldKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSAib25saW5lICI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSF9NQVBQSU5HW2lkXSA9ICJvZmZsaW5lICI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGtleSA9PSAieC14bWx0di1maWxlIikgewogICAgICAgICAgICAgICAgICAgIHZhciB4bWx0dkZpbGUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtpZF1ba2V5XSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoeG1sdHZGaWxlICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSBTRUFSQ0hfTUFQUElOR1tpZF0gKyB4bWx0dkZpbGUgKyAiICI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gU0VBUkNIX01BUFBJTkdbaWRdICsgZGF0YVtpZF1ba2V5XSArICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gZW5hYmxlR3JvdXBTZWxlY3Rpb24oc2VsZWN0b3IpIHsKICAgIHZhciBsYXN0Y2hlY2sgPSBudWxsOyAvLyBubyBjaGVja2JveGVzIGNsaWNrZWQgeWV0CiAgICAvLyBnZXQgZGVzaXJlZCBjaGVja2JveGVzCiAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgLy8gbG9vcCBvdmVyIGNoZWNrYm94ZXMgdG8gYWRkIGV2ZW50IGxpc3RlbmVyCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGNoZWNrYm94ZXMsIGZ1bmN0aW9uIChjYngsIGlkeCkgewogICAgICAgIGNieC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgLy8gdGVzdCBmb3Igc2hpZnQga2V5LCBub3QgZmlyc3QgY2hlY2tib3gsIGFuZCBub3Qgc2FtZSBjaGVja2JveAogICAgICAgICAgICBpZiAoZXZ0LnNoaWZ0S2V5ICYmIG51bGwgIT09IGxhc3RjaGVjayAmJiBpZHggIT09IGxhc3RjaGVjaykgewogICAgICAgICAgICAgICAgLy8gZ2V0IHJhbmdlIG9mIGNoZWNrcyBiZXR3ZWVuIGxhc3QtY2hlY2tib3ggYW5kIHNoaWZ0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAvLyBNYXRoLm1pbi9tYXggZG9lcyBvdXIgc29ydGluZyBmb3IgdXMKICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGNoZWNrYm94ZXMsIE1hdGgubWluKGxhc3RjaGVjaywgaWR4KSwgTWF0aC5tYXgobGFzdGNoZWNrLCBpZHgpKQogICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsb29wIG92ZXIgZWFjaAogICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChjY2J4KSB7CiAgICAgICAgICAgICAgICAgICAgY2NieC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhc3RjaGVjayA9IGlkeDsgLy8gc2V0IHRoaXMgY2hlY2tib3ggYXMgbGFzdC1jaGVja2VkIGZvciBsYXRlcgogICAgICAgIH0pOwogICAgfSk7Cn0KZnVuY3Rpb24gc2VhcmNoSW5NYXBwaW5nKCkgewogICAgdmFyIHNlYXJjaFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaE1hcHBpbmciKS52YWx1ZTsKICAgIHZhciB0cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF90YWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgaWQgPSB0cnNbaV0uZ2V0QXR0cmlidXRlKCJpZCIpOwogICAgICAgIHZhciBlbGVtZW50ID0gU0VBUkNIX01BUFBJTkdbaWRdOwogICAgICAgIHN3aXRjaCAoZWxlbWVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxOdW1iZXJzKGVsZW1lbnRzKSB7CiAgICB2YXIgc3RhcnRpbmdfbnVtYmVyX2VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgieC1jaGFubmVscy1zdGFydCIpWzBdOwogICAgdmFyIGVsZW1zID0gZWxlbWVudHMuc3BsaXQoIiwiKTsKICAgIHZhciBzdGFydGluZ19udW1iZXIgPSBwYXJzZUZsb2F0KHN0YXJ0aW5nX251bWJlcl9lbGVtZW50LnZhbHVlKTsKICAgIHZhciBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgIGVsZW1zLmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTsKICAgICAgICB2YXIgaW5wdXQgPSBlbGVtLmNoaWxkTm9kZXNbMV0uZmlyc3RDaGlsZDsKICAgICAgICBpbnB1dC52YWx1ZSA9IHN0YXJ0aW5nX251bWJlci50b1N0cmluZygpOwogICAgICAgIGRhdGFbZWxlbWVudF1bIngtY2hhbm5lbElEIl0gPSBzdGFydGluZ19udW1iZXIudG9TdHJpbmcoKTsKICAgICAgICBzdGFydGluZ19udW1iZXIrKzsKICAgIH0pOwogICAgaWYgKENPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxKTsKICAgIH0KICAgIGlmIChJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSwgImluYWN0aXZlX2NvbnRlbnRfcGFnZSIpOwogICAgfQp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxOdW1iZXIoZWxlbWVudCkgewogICAgdmFyIGRiSUQgPSBlbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZDsKICAgIHZhciBuZXdOdW1iZXIgPSBwYXJzZUZsb2F0KGVsZW1lbnQudmFsdWUpOwogICAgdmFyIGNoYW5uZWxOdW1iZXJzID0gW107CiAgICB2YXIgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICB2YXIgY2hhbm5lbHMgPSBnZXRPYmpLZXlzKGRhdGEpOwogICAgaWYgKGlzTmFOKG5ld051bWJlcikpIHsKICAgICAgICBhbGVydCgie3suYWxlcnQuaW52YWxpZENoYW5uZWxOdW1iZXJ9fSIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNoYW5uZWxzLmZvckVhY2goaWQgPT4gewogICAgICAgIHZhciBjaGFubmVsTnVtYmVyID0gcGFyc2VGbG9hdChkYXRhW2lkXVsieC1jaGFubmVsSUQiXSk7CiAgICAgICAgY2hhbm5lbE51bWJlcnMucHVzaChjaGFubmVsTnVtYmVyKTsKICAgIH0pOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsTnVtYmVycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjaGFubmVsTnVtYmVycy5pbmRleE9mKG5ld051bWJlcikgPT0gLTEpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChNYXRoLmZsb29yKG5ld051bWJlcikgPT0gbmV3TnVtYmVyKSB7CiAgICAgICAgICAgIG5ld051bWJlciA9IG5ld051bWJlciArIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXdOdW1iZXIgPSBuZXdOdW1iZXIgKyAwLjE7CiAgICAgICAgICAgIG5ld051bWJlci50b0ZpeGVkKDEpOwogICAgICAgICAgICBuZXdOdW1iZXIgPSBNYXRoLnJvdW5kKG5ld051bWJlciAqIDEwKSAvIDEwOwogICAgICAgIH0KICAgIH0KICAgIGRhdGFbZGJJRF1bIngtY2hhbm5lbElEIl0gPSBuZXdOdW1iZXIudG9TdHJpbmcoKTsKICAgIGVsZW1lbnQudmFsdWUgPSBuZXdOdW1iZXI7CiAgICBpZiAoQ09MVU1OX1RPX1NPUlQgPT0gMSkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgc29ydFRhYmxlKDEpOwogICAgfQogICAgaWYgKElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxLCAiaW5hY3RpdmVfY29udGVudF9wYWdlIik7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gYmFja3VwKCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBjb25zb2xlLmxvZygiQmFja3VwIGRhdGEiKTsKICAgIHZhciBjbWQgPSAiVGhyZWFkZmluQmFja3VwIjsKICAgIGNvbnNvbGUubG9nKCJTRU5EIFRPIFNFUlZFUiIpOwogICAgY29uc29sZS5sb2coZGF0YSk7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdG9nZ2xlQ2hhbm5lbFN0YXR1cyhpZCkgewogICAgdmFyIGVsZW1lbnQ7CiAgICB2YXIgc3RhdHVzOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUiKSkgewogICAgICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUiKTsKICAgICAgICBzdGF0dXMgPSAoY2hlY2tib3gpLmNoZWNrZWQ7CiAgICB9CiAgICB2YXIgaWRzID0gZ2V0QWxsU2VsZWN0ZWRDaGFubmVscygpOwogICAgaWYgKGlkcy5sZW5ndGggPT0gMCkgewogICAgICAgIGlkcy5wdXNoKGlkKTsKICAgIH0KICAgIGlkcy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgIGNoYW5uZWxbIngtYWN0aXZlIl0gPSBzdGF0dXM7CiAgICAgICAgc3dpdGNoIChjaGFubmVsWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIGlmIChjaGFubmVsWyJ4LXhtbHR2LWZpbGUiXSA9PSAiLSIgfHwgY2hhbm5lbFsieC1tYXBwaW5nIl0gPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEJVTEtfRURJVCA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGVydChjaGFubmVsWyJ4LW5hbWUiXSArICI6IE1pc3NpbmcgWE1MVFYgZmlsZSAvIGNoYW5uZWwiKQogICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFsieC1hY3RpdmUiXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIC8vIGNvZGUuLi4KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhbm5lbFsieC1hY3RpdmUiXSA9PSBmYWxzZSkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gImFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgfSk7Cn0KZnVuY3Rpb24gcmVzdG9yZSgpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgcmVzdG9yZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgidHlwZSIsICJmaWxlIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogICAgcmVzdG9yZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiIik7CiAgICByZXN0b3JlLmlkID0gInVwbG9hZCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlc3RvcmUpOwogICAgcmVzdG9yZS5jbGljaygpOwogICAgcmVzdG9yZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZmlsZW5hbWUgPSByZXN0b3JlLmZpbGVzWzBdLm5hbWU7CiAgICAgICAgdmFyIGNoZWNrID0gY29uZmlybSgiRmlsZTogIiArIGZpbGVuYW1lICsgIlxue3suY29uZmlybS5yZXN0b3JlfX0iKTsKICAgICAgICBpZiAoY2hlY2sgPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgICAgdmFyIGZpbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPWZpbGVdJykuZmlsZXNbMF07CiAgICAgICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNtZCA9ICJUaHJlYWRmaW5SZXN0b3JlIjsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJiYXNlNjQiXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBhbGVydCgiRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdG9yZS5yZW1vdmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdXBsb2FkTG9nbygpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgdXBsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgibmFtZSIsICIiKTsKICAgIHVwbG9hZC5pZCA9ICJ1cGxvYWQiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1cGxvYWQpOwogICAgdXBsb2FkLmNsaWNrKCk7CiAgICB1cGxvYWQub25ibHVyID0gZnVuY3Rpb24gKCkgewogICAgICAgIGFsZXJ0KCk7CiAgICB9OwogICAgdXBsb2FkLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBmaWxlbmFtZSA9IHVwbG9hZC5maWxlc1swXS5uYW1lOwogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgIHZhciBmaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzWzBdOwogICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICAgIHZhciBjbWQgPSAidXBsb2FkTG9nbyI7CiAgICAgICAgICAgICAgICBkYXRhWyJiYXNlNjQiXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICBkYXRhWyJmaWxlbmFtZSJdID0gZmlsZS5uYW1lOwogICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgICAgICAgICAgICAgdmFyIHVwZGF0ZUxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWljb24nKTsKICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ28uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgdXBkYXRlTG9nby5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhbGVydCgiRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkIik7CiAgICAgICAgfQogICAgICAgIHVwbG9hZC5yZW1vdmUoKTsKICAgICAgICByZXR1cm47CiAgICB9Owp9CmZ1bmN0aW9uIGNoZWNrVW5kbyhrZXkpIHsKICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgY2FzZSAiZXBnTWFwcGluZyI6CiAgICAgICAgICAgIGlmIChVTkRPLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgIFNFUlZFUlsieGVwZyJdW2tleV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVORE9ba2V5XSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgVU5ET1trZXldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShTRVJWRVJbInhlcGciXVtrZXldKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc29ydFNlbGVjdChlbGVtKSB7CiAgICB2YXIgdG1wQXJ5ID0gW107CiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IGVsZW1bZWxlbS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5vcHRpb25zLmxlbmd0aDsgaSsrKQogICAgICAgIHRtcEFyeS5wdXNoKGVsZW0ub3B0aW9uc1tpXSk7CiAgICB0bXBBcnkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKGEudGV4dCA8IGIudGV4dCkgPyAtMSA6IDE7IH0pOwogICAgd2hpbGUgKGVsZW0ub3B0aW9ucy5sZW5ndGggPiAwKQogICAgICAgIGVsZW0ub3B0aW9uc1swXSA9IG51bGw7CiAgICB2YXIgbmV3U2VsZWN0ZWRJbmRleCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcEFyeS5sZW5ndGg7IGkrKykgewogICAgICAgIGVsZW0ub3B0aW9uc1tpXSA9IHRtcEFyeVtpXTsKICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnZhbHVlID09IHNlbGVjdGVkVmFsdWUpCiAgICAgICAgICAgIG5ld1NlbGVjdGVkSW5kZXggPSBpOwogICAgfQogICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gbmV3U2VsZWN0ZWRJbmRleDsgLy8gU2V0IG5ldyBzZWxlY3RlZCBpbmRleCBhZnRlciBzb3J0aW5nCiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdXBkYXRlTG9nKCkgewogICAgY29uc29sZS5sb2coIlRPS0VOIik7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcigidXBkYXRlTG9nIik7CiAgICBzZXJ2ZXIucmVxdWVzdChuZXcgT2JqZWN0KCkpOwp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2VfdHMuanMubWFw" - webUI["html/js/network_ts.js"] = "Y2xhc3MgU2VydmVyIHsKICAgIGNvbnN0cnVjdG9yKGNtZCkgewogICAgICAgIHRoaXMuY21kID0gY21kOwogICAgfQogICAgcmVxdWVzdChkYXRhKSB7CiAgICAgICAgaWYgKFNFUlZFUl9DT05ORUNUSU9OID09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IHRydWU7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgaWYgKHRoaXMuY21kICE9ICJ1cGRhdGVMb2ciKSB7CiAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgVU5ETyA9IG5ldyBPYmplY3QoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgICAgICAgICAgY2FzZSAiaHR0cDoiOgogICAgICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9ICJ3czovLyI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHM6IjoKICAgICAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSAid3NzOi8vIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdXJsID0gdGhpcy5wcm90b2NvbCArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICI6IiArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgIi9kYXRhLyIgKyAiP1Rva2VuPSIgKyBnZXRDb29raWUoIlRva2VuIik7CiAgICAgICAgZGF0YVsiY21kIl0gPSB0aGlzLmNtZDsKICAgICAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7CiAgICAgICAgd3Mub25vcGVuID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBXU19BVkFJTEFCTEUgPSB0cnVlOwogICAgICAgICAgICBjb25zb2xlLmxvZygiUkVRVUVTVCAoSlMpOiIpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFUVVFU1Q6IChKU09OKSIpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgfTsKICAgICAgICB3cy5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIk5vIHdlYnNvY2tldCBjb25uZWN0aW9uIHRvIFRocmVhZGZpbiBjb3VsZCBiZSBlc3RhYmxpc2hlZC4gQ2hlY2sgeW91ciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIik7CiAgICAgICAgICAgIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChXU19BVkFJTEFCTEUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCJObyB3ZWJzb2NrZXQgY29ubmVjdGlvbiB0byBUaHJlYWRmaW4gY291bGQgYmUgZXN0YWJsaXNoZWQuIENoZWNrIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IGZhbHNlOwogICAgICAgICAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFU1BPTlNFOiIpOwogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGUuZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJ0b2tlbiIpKSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiVG9rZW49IiArIHJlc3BvbnNlWyJ0b2tlbiJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZVsic3RhdHVzIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJlcnIiXSk7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJsb2dvVVJMIikpIHsKICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbm5lbC1pY29uIik7CiAgICAgICAgICAgICAgICBkaXYudmFsdWUgPSByZXNwb25zZVsibG9nb1VSTCJdOwogICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKGRhdGFbImNtZCJdKSB7CiAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGVMb2ciOgogICAgICAgICAgICAgICAgICAgIFNFUlZFUlsibG9nIl0gPSByZXNwb25zZVsibG9nIl07CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50X2xvZyIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dMb2dzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBTRVJWRVIgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgU0VSVkVSID0gcmVzcG9uc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJvcGVuTWVudSIpKSB7CiAgICAgICAgICAgICAgICB2YXIgbWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJlc3BvbnNlWyJvcGVuTWVudSJdKTsKICAgICAgICAgICAgICAgIG1lbnUuY2xpY2soKTsKICAgICAgICAgICAgICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoIm9wZW5MaW5rIikpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHJlc3BvbnNlWyJvcGVuTGluayJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgiYWxlcnQiKSkgewogICAgICAgICAgICAgICAgYWxlcnQocmVzcG9uc2VbImFsZXJ0Il0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgicmVsb2FkIikpIHsKICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgid2l6YXJkIikpIHsKICAgICAgICAgICAgICAgIGNyZWF0ZUxheW91dCgpOwogICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbldpemFyZFtyZXNwb25zZVsid2l6YXJkIl1dLmNyZWF0ZVdpemFyZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNyZWF0ZUxheW91dCgpOwogICAgICAgIH07CiAgICB9Cn0KZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHsKICAgIHZhciB2YWx1ZSA9ICI7ICIgKyBkb2N1bWVudC5jb29raWU7CiAgICB2YXIgcGFydHMgPSB2YWx1ZS5zcGxpdCgiOyAiICsgbmFtZSArICI9Iik7CiAgICBpZiAocGFydHMubGVuZ3RoID09IDIpCiAgICAgICAgcmV0dXJuIHBhcnRzLnBvcCgpLnNwbGl0KCI7Iikuc2hpZnQoKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1uZXR3b3JrX3RzLmpzLm1hcA==" - webUI["html/css/screen.css"] = "bmF2IGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXgtaGVpZ2h0OiAyMHB4Ow0KICBtYXgtd2lkdGg6IDIwcHg7DQogIGZsb2F0OiBsZWZ0Ow0KfQ0KDQpuYXYgcCB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHBhZGRpbmc6IDBweCAzMHB4Ow0KfQ0KDQojbGF5b3V0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KLmZvcm0tY29udHJvbDpkaXNhYmxlZCB7DQogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KfQ0KDQoubGF5b3V0LWxlZnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgbWluLXdpZHRoOiAxNTBweDsNCiAgbWF4LXdpZHRoOiAyMCU7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQogIGhlaWdodDogaW5oZXJpdDsNCiAgZmxvYXQ6IGxlZnQ7DQp9DQoNCi5sYXlvdXQtcmlnaHQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCn0NCg0KI21lbnUtd3JhcHBlciB7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KDQojbG9nbyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtaW4td2lkdGg6IDE4MHB4Ow0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiAxMDBweDsNCiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdGhyZWFkZmluLnBuZyIpOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7DQogIGJhY2tncm91bmQtc2l6ZTogMTAwJTsNCn0NCg0KDQojcGFnZSB7DQogIG1heC13aWR0aDogOTUwcHg7DQogIG1hcmdpbjogYXV0bzsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCg0KICAvKg0KICBoZWlnaHQ6IC13ZWJraXQtY2FsYygxMDAlIC0gMTMwcHgpOw0KICBoZWlnaHQ6IC1tb3otY2FsYygxMDAlIC0gMTMwcHgpOw0KICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEzMHB4KTsNCiAgKi8NCg0KICBtaW4taGVpZ2h0OiAtd2Via2l0LWNhbGMoMTAwJSAtIDEyMHB4KTsNCiAgbWluLWhlaWdodDogLW1vei1jYWxjKDEwMCUgLSAxMjBweCk7DQogIG1pbi1oZWlnaHQ6IGNhbGMoMTAwJSAtIDEyMHB4KTsNCg0KDQogIGJveC1zaGFkb3c6IDBweCA1cHggNXB4ICMyMjI7DQoNCn0NCg0KI3VpU2V0dGluZyB7DQogIGZsb2F0OiByaWdodDsNCiAgbWFyZ2luLXJpZ2h0OiAyNXB4Ow0KfQ0KDQojYm94IGlucHV0W3R5cGU9dGV4dF0sDQojYm94IGlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgd2lkdGg6IC13ZWJraXQtY2FsYygxMDAlIC0gMjBweCk7DQogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogY2FsYygxMDAlIC0gMjBweCk7DQp9DQoNCiNib3ggaW5wdXRbdHlwZT1zdWJtaXRdIHsNCiAgbWFyZ2luOiA1MHB4IGF1dG87DQp9DQoNCiNzZXR0aW5ncyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBwYWRkaW5nOiAxMHB4IDEwcHg7DQp9DQoNCiNzZXR0aW5ncyBoNSB7DQogIG1hcmdpbjogNTBweCAwcHggMTBweCAwcHg7DQp9DQoNCiNjb250ZW50LWludGVyYWN0aW9uIC5zZWFyY2ggew0KICB3aWR0aDogMjAwcHg7DQogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7DQogIHBhZGRpbmc6IDlweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsNCiAgbWFyZ2luOiAxMHB4Ow0KICBmbG9hdDogcmlnaHQ7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCg0KfQ0KDQojbXlTdHJlYW1zIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICBib3R0b206IDBweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsNCiAgd2lkdGg6IDEwMCU7DQogIG1heC13aWR0aDogOTUwcHg7DQoNCiAgLyoNCiAgbWF4LWhlaWdodDogMTAwcHg7DQogICovDQogIG1hcmdpbi1ib3R0b206IDBweDsNCn0NCg0KI215U3RyZWFtcyBpbWcgew0KICB3aWR0aDogNCU7DQogIHBhZGRpbmc6IDJweCA1cHg7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQojc2V0dGluZ3MtZm9vdGVyIHt9DQoNCg0KLyogV2l6YXJkKi8NCiNib3ggew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KICBtaW4taGVpZ2h0OiA0MDBweDsNCg0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQp9DQoNCiNib3ggcCB7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KfQ0KDQojYm94LWZvb3RlciB7DQogIG1hcmdpbi10b3A6IGF1dG87DQp9DQoNCiNib3gtZm9vdGVyIHsNCiAgbWFyZ2luOiBhdXRvOw0KICBwYWRkaW5nOiAxMHB4Ow0KfQ0KDQojaGVhZGxpbmUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOw0KICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggIzIyMjsNCiAgdHJhbnNpdGlvbjogYWxsIDAuNXM7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KI2NvbnRlbnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgb3ZlcmZsb3c6IGF1dG87DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi8qIC0tLSAqLw0KDQoNCiNjbGllbnRJbmZvLA0KI2FjdGl2ZVN0cmVhbXMsDQojaW5hY3RpdmVTdHJlYW1zIHsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgY29sb3I6ICMwMEU2RkY7DQogIHBhZGRpbmc6IDBweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMgdGhlYWQsDQojaW5hY3RpdmVTdHJlYW1zIHRoZWFkIHsNCiAgZm9udC1zaXplOiAyZW07DQp9DQoNCiNvcGVuU3RyZWFtcyB7DQogIHdpZHRoOiAyMHB4Ow0KICBoZWlnaHQ6IDIwMHB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZsb2F0OiByaWdodDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMHB4Ow0KICBib3R0b206IDBweDsNCiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdG91Y2gucG5nIik7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQoNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIHJpZ2h0Ow0KfQ0KDQojYWxsU3RyZWFtcyB7DQogIHBhZGRpbmc6IDJweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMsDQojaW5hY3RpdmVTdHJlYW1zIHsNCiAgLyogd2lkdGg6IDUwJTsgKi8NCiAgLyogZmxvYXQ6IGxlZnQ7ICovDQp9DQoNCiNhY3RpdmVTdHJlYW1zIC50ZEtleSwNCiNpbmFjdGl2ZVN0cmVhbXMgLnRkS2V5IHsNCiAgd2lkdGg6IDExNXB4Ow0KICBsZXR0ZXItc3BhY2luZzogMHB4Ow0KfQ0KDQpjYXB0aW9uIHsNCiAgY29sb3I6ICNGRkY7DQogIGZvbnQtc2l6ZTogMmVtOw0KfQ0KDQoudGRLZXkgew0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQoudGRWYWwgew0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQoubW9kYWwtaGVhZGVyIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzIxMjUyOTsNCn0NCi5tb2RhbC1ib2R5IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCn0NCg0KI2luYWN0aXZlU3RyZWFtcyAudGRLZXkgew0KICBjb2xvcjogcmVkOw0KfQ0KDQojY2xpZW50SW5mbyAudGRWYWwsDQojbG9nSW5mbyAudGRWYWwsDQojYWN0aXZlU3RyZWFtcyAudGRWYWwsDQojaW5hY3RpdmVTdHJlYW1zIC50ZFZhbCwNCiNtYXBwaW5nSW5mbyAudGRWYWwgew0KICBjb2xvcjogI2FhYTsNCiAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7DQp9DQoNCiNib3gtd3JhcHBlciB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgd2lkdGg6IDEwMCU7DQoNCiAgb3ZlcmZsb3cteTogc2Nyb2xsOw0KfQ0KDQojY29udGVudF90YWJsZSwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlLA0KI21hcHBpbmctZGV0YWlsLXRhYmxlLA0KI2NvbnRlbnRfdGFibGUgew0KICBkaXNwbGF5OiB0YWJsZTsNCiAgLS1icy10YWJsZS1jb2xvcjogbm9uZTsNCiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsNCiAgb3ZlcmZsb3cteTogc2Nyb2xsOw0KfQ0KDQojaW5hY3RpdmVfY29udGVudF90YWJsZSB7DQogIG1hcmdpbi10b3A6IDIlOw0KfQ0KDQoNCiNjb250ZW50X3RhYmxlIC5jb250ZW50X3RhYmxlX2hlYWRlciwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIC5pbmFjdGl2ZV9jb250ZW50X3RhYmxlX2hlYWRlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGhlaWdodDogNTBweDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMxMTE7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggIzMzMzsNCiAgY3Vyc29yOiBhdXRvOw0KDQp9DQoNCg0KdGJvZHkgew0KICB3aWR0aDogMTAwJTsNCn0NCg0KDQoudGFibGVFbGxpcHNpcyB7DQogIHdpZHRoOiAxNTBweDsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQp9DQoNCiNjb250ZW50X3RhYmxlIGltZywNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KICBtYXgtd2lkdGg6IDYwcHg7DQp9DQoNCiNjb250ZW50X3RhYmxlIHRyLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIgew0KICBib3JkZXItbGVmdDogc29saWQgM3B4IDQ0NDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMzMzM7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KI2NvbnRlbnRfdGFibGUgdHI6aG92ZXIsDQojaW5hY3RpdmVfY29udGVudF90YWJsZSB0cjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQp9DQoNCiNjb250ZW50X3RhYmxlIHRkLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdGQgew0KDQogIHBhZGRpbmc6IDBweCAycHg7DQp9DQoNCiNjb250ZW50X3RhYmxlIGlucHV0W3R5cGU9dGV4dF0sDQojaW5hY3RpdmVfY29udGVudF90YWJsZSBpbnB1dFt0eXBlPXRleHRdIHsNCiAgd2lkdGg6IDgwJTsNCiAgbWluLXdpZHRoOiAzNXB4Ow0KICBtYXgtd2lkdGg6IDYwcHg7DQogIGJvcmRlcjogMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBtYXJnaW4tbGVmdDogNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQojY29udGVudF90YWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XSwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIGlucHV0W3R5cGU9Y2hlY2tib3hdIHsNCiAgbWF4LXdpZHRoOiAyNXB4Ow0KICBtYXJnaW46IGF1dG87DQp9DQoNCg0KLnNob3dCdWxrIHsNCiAgZGlzcGxheTogYmxvY2s7DQp9DQoNCi5oaWRlQnVsayB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCi5ub0J1bGsge30NCg0KI2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHIHsNCiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDNweCBsYXduZ3JlZW47DQp9DQoNCiNjb250ZW50X3RhYmxlIHRyLm5vdEFjdGl2ZUVQRywNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRyLm5vdEFjdGl2ZUVQRyB7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggcmVkOw0KfQ0KDQoNCiNsb2dTY3JlZW4gcCB7DQogIHdoaXRlLXNwYWNlOiBwcmU7DQogIGZvbnQtc2l6ZTogMTBweDsNCiAgLyoNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsNCiAgKi8NCiAgbGV0dGVyLXNwYWNpbmc6IDFweDsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBmb250LXN0eWxlOiBub3JtYWw7DQogIGZvbnQtdmFyaWFudDogbm9ybWFsOw0KICBsaW5lLWhlaWdodDogMS42ZW07DQp9DQoNCiNtYXBwaW5nLWRldGFpbCwNCiN1c2VyLWRldGFpbCwNCiNmaWxlLWRldGFpbCB7DQogIGJveC1zaGFkb3c6IDBweCA1cHggNDBweCAjMDAwOw0KICBtYXJnaW4tdG9wOiAyMHB4Ow0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KDQogIG1heC13aWR0aDogNjAwcHg7DQogIGJhY2tncm91bmQtY29sb3I6ICMyMjI7DQogIHBhZGRpbmc6IDEwcHg7DQogIG92ZXJmbG93OiBhdXRvOw0KfQ0KDQojZmlsZS1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSB7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwgaW1nIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1heC1oZWlnaHQ6IDMwcHg7DQogIG1hcmdpbi1ib3R0b206IDIwcHg7DQogIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICBtYXJnaW4tcmlnaHQ6IGF1dG87DQp9DQoNCiNtYXBwaW5nLWRldGFpbCBpbnB1dFt0eXBlPXRleHRdLA0KI2NvbnRlbnRfc2V0dGluZ3MgaW5wdXRbdHlwZT10ZXh0XSwNCiNjb250ZW50X3NldHRpbmdzIGlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgYm9yZGVyOiBzb2xpZCAxcHg7DQogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwtdGFibGUsDQojdXNlci1kZXRhaWwtdGFibGUgew0KICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQojY29udGVudF9zZXR0aW5ncyB0YWJsZSB7DQogIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgdGFibGUtbGF5b3V0OiBmaXhlZDsNCiAgd2lkdGg6IDEwMCU7DQp9DQoNCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLA0KI3VzZXItZGV0YWlsLXRhYmxlIHRkIHsNCiAgcGFkZGluZzogMTBweCAwcHg7DQoNCn0NCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLmxlZnQsDQojdXNlci1kZXRhaWwtdGFibGUgdGQubGVmdCB7DQogIHdpZHRoOiAzOCU7DQp9DQoNCi5pbnRlcmFjdGlvbiwNCiNpbnRlcmFjdGlvbiB7DQogIG1hcmdpbi10b3A6IDIwcHg7DQogIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICBmbG9hdDogcmlnaHQ7DQp9DQoNCi5pbnRlcmFjdGlvbiBpbnB1dFt0eXBlPWJ1dHRvbl0sDQouaW50ZXJhY3Rpb24gaW5wdXRbdHlwZT1zdWJtaXRdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgbWFyZ2luOiAwcHggMTBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQojbm90aWZpY2F0aW9uIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgcmlnaHQ6IDBweDsNCiAgaGVpZ2h0OiAxMDAlOw0KICB3aWR0aDogMjUwcHg7DQoNCiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsNCiAgYm94LXNoYWRvdzogMHB4IDBweCAyMHB4ICMwMDA7DQp9DQoNCiNub3RpZmljYXRpb24gaDUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIxMjEyOw0KICBwYWRkaW5nOiA1cHggMTBweCA1cHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiBwcmUgew0KICBwYWRkaW5nOiAwcHggMTBweCAwcHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiBwIHsNCiAgZm9udC1zaXplOiAxMCBweDsNCiAgbWFyZ2luOiAwcHg7DQogIHBhZGRpbmc6IDBweCAxMHB4IDVweCAxMHB4Ow0KfQ0KDQojbm90aWZpY2F0aW9uIC5lbGVtZW50IHsNCiAgLypwYWRkaW5nOiAwcHggNXB4OyovDQogIG1hcmdpbjogNXB4IDVweDsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTgxODE4Ow0KICBib3JkZXItbGVmdDogMTBweCBzb2xpZCBncmVlbjsNCn0NCg0KDQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYyMHB4KSB7DQogIGJvZHkgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQogIH0NCg0KICBoMSB7DQogICAgZm9udC1zaXplOiAyNnB4Ow0KICAgIGxldHRlci1zcGFjaW5nOiAzcHg7DQogIH0NCg0KICBuYXYgcCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogIH0NCg0KDQoNCiAgI2hlYWRlcl9jb25maWcgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGhlaWdodDogMTAwcHg7DQogICAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvbG9nb193XzYwMHgyMDAucG5nIik7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCg0KICAgIGJhY2tncm91bmQtc2l6ZTogMzAwcHggMTAwcHg7DQogIH0NCg0KICAjc2NyZWVuTG9nIHsNCiAgICBtYXJnaW4tbGVmdDogMzAwcHg7DQoNCiAgICB0cmFuc2l0aW9uOiBub25lOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCB0cmFuc3BhcmVudDsNCiAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAjMjIyOw0KICB9DQoNCiAgI3NldHRpbmdzIHsNCiAgICAvKg0KICAgIGhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMDBweCk7DQogICAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEwMHB4KTsNCiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEwMHB4KTsNCiAgICAqLw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBvdmVyZmxvdzogYXV0bzsNCiAgfQ0KDQoNCiAgLnNjcmVlbkxvZ0hpZGRlbiB7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOw0KICB9DQoNCg0KICAjYm94IHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtaW4taGVpZ2h0OiA1MDBweDsNCiAgICBtYXgtd2lkdGg6IDUwMHB4Ow0KICAgIG1hcmdpbjogMTBweCBhdXRvOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQogICAgYm94LXNoYWRvdzogMHB4IDVweCA1cHggIzIyMjsNCg0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgfQ0KDQogICNzZXR0aW5ncywNCiAgI3NldHRpbmdzLWZvb3RlciB7fQ0KfQ0KDQovKg0KPT09PT09PT09PT09PT09IA0KU2lkZWJhcg0KPT09PT09PT09PT09PT09DQoqLw0KOnJvb3Qgew0KICAvKiBkYXJrIHNoYWRlcyBvZiBwcmltYXJ5IGNvbG9yKi8NCiAgLS1jbHItcHJpbWFyeS0xOiBoc2woMjA1LCA4NiUsIDE3JSk7DQogIC0tY2xyLXByaW1hcnktMjogaHNsKDIwNSwgNzclLCAyNyUpOw0KICAtLWNsci1wcmltYXJ5LTM6IGhzbCgyMDUsIDcyJSwgMzclKTsNCiAgLS1jbHItcHJpbWFyeS00OiBoc2woMjA1LCA2MyUsIDQ4JSk7DQogIC8qIHByaW1hcnkvbWFpbiBjb2xvciAqLw0KICAtLWNsci1wcmltYXJ5LTU6IGhzbCgyMDUsIDc4JSwgNjAlKTsNCiAgLyogbGlnaHRlciBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciAqLw0KICAtLWNsci1wcmltYXJ5LTY6IGhzbCgyMDUsIDg5JSwgNzAlKTsNCiAgLS1jbHItcHJpbWFyeS03OiBoc2woMjA1LCA5MCUsIDc2JSk7DQogIC0tY2xyLXByaW1hcnktODogaHNsKDIwNSwgODYlLCA4MSUpOw0KICAtLWNsci1wcmltYXJ5LTk6IGhzbCgyMDUsIDkwJSwgODglKTsNCiAgLS1jbHItcHJpbWFyeS0xMDogaHNsKDIwNSwgMTAwJSwgOTYlKTsNCiAgLyogZGFya2VzdCBncmV5IC0gdXNlZCBmb3IgaGVhZGluZ3MgKi8NCiAgLS1jbHItZ3JleS0xOiBoc2woMjA5LCA2MSUsIDE2JSk7DQogIC0tY2xyLWdyZXktMjogaHNsKDIxMSwgMzklLCAyMyUpOw0KICAtLWNsci1ncmV5LTM6IGhzbCgyMDksIDM0JSwgMzAlKTsNCiAgLS1jbHItZ3JleS00OiBoc2woMjA5LCAyOCUsIDM5JSk7DQogIC8qIGdyZXkgdXNlZCBmb3IgcGFyYWdyYXBocyAqLw0KICAtLWNsci1ncmV5LTU6IGhzbCgyMTAsIDIyJSwgNDklKTsNCiAgLS1jbHItZ3JleS02OiBoc2woMjA5LCAyMyUsIDYwJSk7DQogIC0tY2xyLWdyZXktNzogaHNsKDIxMSwgMjclLCA3MCUpOw0KICAtLWNsci1ncmV5LTg6IGhzbCgyMTAsIDMxJSwgODAlKTsNCiAgLS1jbHItZ3JleS05OiBoc2woMjEyLCAzMyUsIDg5JSk7DQogIC0tY2xyLWdyZXktMTA6IGhzbCgyMTAsIDM2JSwgOTYlKTsNCiAgLS1jbHItd2hpdGU6ICNmZmY7DQogIC0tY2xyLXJlZC1kYXJrOiBoc2woMzYwLCA2NyUsIDQ0JSk7DQogIC0tY2xyLXJlZC1saWdodDogaHNsKDM2MCwgNzElLCA2NiUpOw0KICAtLWNsci1ncmVlbi1kYXJrOiBoc2woMTI1LCA2NyUsIDQ0JSk7DQogIC0tY2xyLWdyZWVuLWxpZ2h0OiBoc2woMTI1LCA3MSUsIDY2JSk7DQogIC0tY2xyLW9yYW5nZTogaHNsKDE0LDkzJSw1MyUpOw0KICAtLWNsci1ibGFjazogIzIyMjsNCiAgLS1mZi1wcmltYXJ5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsNCiAgLS1mZi1zZWNvbmRhcnk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmOw0KICAtLXRyYW5zaXRpb246IGFsbCAwLjNzIGxpbmVhcjsNCiAgLS1zcGFjaW5nOiAwLjFyZW07DQogIC0tcmFkaXVzOiAwLjI1cmVtOw0KICAtLWxpZ2h0LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMSk7DQogIC0tZGFyay1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjIpOw0KICAtLW1heC13aWR0aDogMTE3MHB4Ow0KICAtLWZpeGVkLXdpZHRoOiA2MjBweDsNCn0NCg0KLnNpZGViYXItdG9nZ2xlIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDQ0cmVtOw0KICBsZWZ0OiAxMXJlbTsNCiAgZm9udC1zaXplOiAycmVtOw0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICAvKiBhbmltYXRpb246IGJvdW5jZSAxMHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7ICovDQp9DQouc2lkZWJhci10b2dnbGU6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIGFuaW1hdGlvbjogZXhwYW5kIC41cyBlYXNlLWluIGZvcndhcmRzOw0KfQ0KLnNpZGViYXItdG9nZ2xlOm5vdCg6aG92ZXIpIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGNvbGxhcHNlIC41cyBlYXNlLW91dCBmb3J3YXJkczsNCn0NCkBrZXlmcmFtZXMgZXhwYW5kIHsNCiAgMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7DQogIH0NCiAgNTAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7DQogIH0NCiAgMTAwJSB7DQogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjI1KTsNCiAgfQ0KfQ0KQGtleWZyYW1lcyBjb2xsYXBzZSB7DQogIDAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOw0KICB9DQogIDEwMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7DQogIH0NCn0NCg0KLnNpZGViYXItaGVhZGVyIHsNCiAgZGlzcGxheTogZmxleDsNCiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBwYWRkaW5nOiAxcmVtIDEuNXJlbTsNCn0NCi5jbG9zZS1idG4gew0KICBwb3NpdGlvbjogZml4ZWQ7DQogIHRvcDogNDRyZW07DQogIGxlZnQ6IDcwcmVtOw0KICBmb250LXNpemU6IDJyZW07DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQouY2xvc2UtYnRuOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsNCn0NCi5jbG9zZS1idG46bm90KDpob3Zlcikgew0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIGFuaW1hdGlvbjogY29sbGFwc2UgLjVzIGVhc2Utb3V0IGZvcndhcmRzOw0KfQ0KLmxvZ28gew0KICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsNCiAgaGVpZ2h0OiA0MHB4Ow0KfQ0KDQoubGlua3MgYSB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBmb250LXNpemU6IDEuNXJlbTsNCiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7DQogIHBhZGRpbmc6IDFyZW0gMS41cmVtOw0KICBjb2xvcjogdmFyKC0tY2xyLWdyZXktNSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KfQ0KLmxpbmtzIGE6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jbHItcHJpbWFyeS04KTsNCiAgY29sb3I6IHZhcigtLWNsci1wcmltYXJ5LTUpOw0KICBwYWRkaW5nLWxlZnQ6IDEuNzVyZW07DQp9DQouc29jaWFsLWljb25zIHsNCiAganVzdGlmeS1zZWxmOiBjZW50ZXI7DQogIGRpc3BsYXk6IGZsZXg7DQogIHBhZGRpbmctYm90dG9tOiAycmVtOw0KfQ0KLnNvY2lhbC1pY29ucyBhIHsNCiAgZm9udC1zaXplOiAxLjVyZW07DQogIG1hcmdpbjogMCAwLjVyZW07DQogIGNvbG9yOiB2YXIoLS1jbHItcHJpbWFyeS01KTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQp9DQouc29jaWFsLWljb25zIGE6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktMSk7DQp9DQoNCi5zaWRlYmFyIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDA7DQogIGxlZnQ6IDA7DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IDEwMCU7DQogIGJhY2tncm91bmQ6IHZhcigtLWNsci1ibGFjayk7DQogIGRpc3BsYXk6IGdyaWQ7DQogIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bzsNCiAgcm93LWdhcDogMXJlbTsNCiAgYm94LXNoYWRvdzogdmFyKC0tY2xyLXJlZC1kYXJrKTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlKTsNCn0NCi5zaG93LXNpZGViYXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwKTsNCn0NCi5zaG93LXNpZGViYXIgLmNsb3NlLWJ0biB7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjc2cHgpIHsNCiAgLnNpZGViYXIgew0KICAgIHdpZHRoOiAxMDAwcHg7DQogIH0NCn0NCg0KLnNpZGViYXIgLmNhcmQgew0KICB3aWR0aDogNDRlbTsNCiAgbWFyZ2luOiAzZW07DQp9DQouY2FyZCB7DQogIC8qIGNvbG9yOiB2YXIoLS1jbHItYmxhY2spOyAqLw0KICBib3JkZXI6IDVweCBzb2xpZCB2YXIoLS1jbHItb3JhbmdlKTsNCn0NCi8qIC5jYXJkIGlucHV0W3R5cGU9dGV4dF0gew0KICBjb2xvcjogdmFyKC0tY2xyLWJsYWNrKTsNCiAgb3V0bGluZTogdmFyKC0tY2xyLWJsYWNrKTsNCiAgYm9yZGVyOiBzb2xpZCAxcHggdmFyKC0tY2xyLWJsYWNrKTsNCn0gKi8NCi5jYXJkIGxhYmVsIHsNCiAgbWFyZ2luLXRvcDogMmVtOw0KfQ0KLmNhcmQgbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7DQogIG1hcmdpbi10b3A6IDFlbTsNCn0=" + webUI["html/js/configuration_ts.js"] = "Y2xhc3MgV2l6YXJkQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDQiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQp9CmNsYXNzIFdpemFyZEl0ZW0gZXh0ZW5kcyBXaXphcmRDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihrZXksIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICB9CiAgICBjcmVhdGVXaXphcmQoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBrZXkgPSB0aGlzLmtleTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGVzY3JpcHRpb247CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChoZWFkbGluZSk7CiAgICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIjEiLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIlhFUEciLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBrZXksICIiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sud2l6YXJkLm0zdS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLm0zdS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0Iiwga2V5LCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LndpemFyZC54bWx0di5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLnhtbHR2LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhrZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBwcmUuaW5uZXJIVE1MID0gZGVzY3JpcHRpb247CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHByZSk7CiAgICAgICAgY29uc29sZS5sb2coaGVhZGxpbmUsIGtleSk7CiAgICB9Cn0KZnVuY3Rpb24gcmVhZHlGb3JDb25maWd1cmF0aW9uKHdpemFyZCkgewogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoImdldFNlcnZlckNvbmZpZyIpOwogICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgY29uZmlndXJhdGlvbldpemFyZFt3aXphcmRdLmNyZWF0ZVdpemFyZCgpOwp9CmZ1bmN0aW9uIHNhdmVXaXphcmQoKSB7CiAgICB2YXIgY21kID0gInNhdmVXaXphcmQiOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgICB2YXIgY29uZmlnID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndpemFyZCIpOwogICAgdmFyIHdpemFyZCA9IG5ldyBPYmplY3QoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBjb25maWdbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gY29uZmlnW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2l6YXJkW25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNvbmZpZ1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbmZpZ1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gbmFtZS50b1VwcGVyQ2FzZSgpICsgIjogIiArICJ7ey5hbGVydC5taXNzaW5nSW5wdXR9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gY29kZS4uLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBkYXRhWyJ3aXphcmQiXSA9IHdpemFyZDsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwp9Ci8vIFdpemFyZAp2YXIgY29uZmlndXJhdGlvbldpemFyZCA9IG5ldyBBcnJheSgpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oInR1bmVyIiwgInt7LndpemFyZC50dW5lci50aXRsZX19IikpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oImVwZ1NvdXJjZSIsICJ7ey53aXphcmQuZXBnU291cmNlLnRpdGxlfX0iKSk7CmNvbmZpZ3VyYXRpb25XaXphcmQucHVzaChuZXcgV2l6YXJkSXRlbSgibTN1IiwgInt7LndpemFyZC5tM3UudGl0bGV9fSIpKTsKY29uZmlndXJhdGlvbldpemFyZC5wdXNoKG5ldyBXaXphcmRJdGVtKCJ4bWx0diIsICJ7ey53aXphcmQueG1sdHYudGl0bGV9fSIpKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlndXJhdGlvbl90cy5qcy5tYXA=" + webUI["html/js/settings_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3NfdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9zZXR0aW5nc190cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGdCQUFnQjtJQUF0QjtRQUNFLGVBQVUsR0FBVyxrQkFBa0IsQ0FBQTtJQTh4QnpDLENBQUM7SUE3eEJDLHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFtQjtRQUNoQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLElBQUksT0FBTyxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzlDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxQyxRQUFRLFdBQVcsRUFBRSxDQUFDO1lBRXBCLGVBQWU7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyw0QkFBNEIsR0FBRyxHQUFHLENBQUE7Z0JBRXJELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENB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" + webUI["html/login.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHk+DQogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSIvd2ViIj4NCiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4NCiAgICAgIDwvYT4NCiAgICA8L2Rpdj4NCiAgPC9uYXY+DQogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj4NCiAgICAgICAgICAgIDxoMz57ey5sb2dpbi5oZWFkbGluZX19PC9oMz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgPHAgaWQ9ImVyciIgY2xhc3M9ImVycm9yTXNnIGNlbnRlciI+e3suYXV0aGVudGljYXRpb25FcnJ9fTwvcD4NCiAgICAgICAgICAgIDxmb3JtIGlkPSJhdXRoZW50aWNhdGlvbiIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgICAgICAgPGg1Pnt7LmxvZ2luLnVzZXJuYW1lLnRpdGxlfX06PC9oNT4NCiAgICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VybmFtZSIgdHlwZT0idGV4dCIgbmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJVc2VybmFtZSIgdmFsdWU9IiI+DQogICAgICAgICAgICAgIDxoNT57ey5sb2dpbi5wYXNzd29yZC50aXRsZX19OjwvaDU+DQogICAgICAgICAgICAgIDxpbnB1dCBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiB2YWx1ZT0iIj4NCiAgICAgICAgICAgICAgPGlucHV0IGlkPSJzdWJtaXQiIGNsYXNzPSIiIHR5cGU9InN1Ym1pdCIgb25zdWJtaXQ9ImphdmFzY3JpcHQ6bG9naW4oKTsiIHZhbHVlPSJ7ey5idXR0b24ubG9naW59fSI+DQogICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KDQogIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1BM3JKRDg1Nktvd1NiN2R3bFpkWUVrTzM5R2FnaTd2SXNGMGpyUkFvUW1ES0t0UUJIVXVMWjlBc1N2NGpENFhhIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9uZXR3b3JrX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2F1dGhlbnRpY2F0aW9uX3RzLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCg0KPC9odG1sPg==" + webUI["html/css/base.css"] = "KiB7DQogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsNCiAgLW1vei1hcHBlYXJhbmNlOiBub25lOw0KICAtbXMtYXBwZWFyYW5jZTogbm9uZTsNCiAgZm9udC1mYW1pbHk6ICJBcmlhbCIsIHNhbnMtc2VyaWY7DQogIGxldHRlci1zcGFjaW5nOiAycHg7DQp9DQoNCi8qDQo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgDQogICAgZGlzcGxheTogbm9uZTsgDQp9DQoqLw0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsNCiAgd2lkdGg6IDEycHg7DQogIGhlaWdodDogMTJweDsNCn0NCg0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsNCiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KDQp9DQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KICBib3JkZXItcmFkaXVzOiA1cHg7DQogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDZweCByZ2JhKDAsIDAsIDAsIDAuNik7DQogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQp9DQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiAjMzMzOw0KfQ0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KfQ0KDQphIHsNCiAgY29sb3I6ICMwMEU2RkY7DQp9DQoNCmh0bWwsDQpib2R5IHsNCiAgY29sb3I6ICNmZmY7DQogIG1hcmdpbjogMHB4IGF1dG87DQogIGhlaWdodDogMTAwJTsNCiAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQpoMiB7DQogIGZvbnQtc2l6ZTogMjRweDsNCiAgbGV0dGVyLXNwYWNpbmc6IDJweDsNCn0NCg0KaDMgew0KICBmb250LXNpemU6IDIycHg7DQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQp9DQoNCmg0IHsNCiAgZm9udC1zaXplOiAyMHB4Ow0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICBsaW5lLWhlaWdodDogMS41ZW07DQoNCn0NCg0KaDUgew0KICBmb250LXNpemU6IDE2cHg7DQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQogIGxpbmUtaGVpZ2h0OiAxLjJlbTsNCiAgbWFyZ2luOiAyNXB4IDBweCAxMHB4IDBweDsNCn0NCg0KaHIgew0KICBib3JkZXI6IDA7DQogIGhlaWdodDogMXB4Ow0KICBiYWNrZ3JvdW5kOiAjMzMzOw0KICBtYXJnaW46IDEwcHggMHB4Ow0KfQ0KDQpwIHsNCiAgbWFyZ2luOiAycHg7DQogIHBhZGRpbmc6IDJweCA1cHg7DQp9DQoNCnByZSB7DQogIG1hcmdpbjogMHB4IDBweCA1cHggMHB4Ow0KICBmb250LXNpemU6IDEycHg7DQogIGNvbG9yOiAjZGRkOw0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7DQogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgZm9udC1zdHlsZTogbm9ybWFsOw0KICBmb250LXZhcmlhbnQ6IG5vcm1hbDsNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KfQ0KDQpsYWJlbCB7DQogIG1hcmdpbi1ib3R0b206IDIwcHg7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQpsaSB7DQogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zOw0KfQ0KDQpsaTpob3ZlciB7DQogIGJvcmRlci1jb2xvcjogIzAwRTZGRg0KfQ0KDQpzZWxlY3Qgew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIHdpZHRoOiBjYWxjKDEwMCUgKyAycHgpOw0KICBib3JkZXI6IHNvbGlkIDBweCAjMDBFNkZGOw0KICBib3JkZXItcmFkaXVzOiAwcHg7DQogIG91dGxpbmU6IG5vbmU7DQogIGNvbG9yOiAjZmZmOw0KICBwYWRkaW5nOiA5cHggMTBweDsNCiAgZGlzcGxheTogYmxvY2s7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGZvbnQtc2l6ZTogMTRweDsNCiAgbWFyZ2luOiA1cHggMHB4IDVweCAwcHg7DQp9DQoNCnNlbGVjdDpmb2N1cyB7DQogIG91dGxpbmU6IG5vbmU7DQp9DQoNCmlucHV0IHsNCiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOw0KICBtYXJnaW46IDBweDsNCiAgcGFkZGluZzogMi41cHggMTBweDsNCiAgb3V0bGluZTogbm9uZTsNCiAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl0sDQppbnB1dFt0eXBlPXN1Ym1pdF0gew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIG1hcmdpbjogMTBweCAxMHB4Ow0KICBwYWRkaW5nOiAxMHB4IDI1cHg7DQogIGJvcmRlcjogc29saWQgMHB4Ow0KICBib3JkZXItY29sb3I6ICMwMDA7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCiAgb3V0bGluZTogbm9uZTsNCiAgY29sb3I6ICNmZmY7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpmb2N1cyB7DQogIG91dGxpbmU6IG5vbmU7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl06aG92ZXIuZGVsZXRlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOw0KICBjb2xvcjogI2ZmZjsNCn0NCg0KaW5wdXRbdHlwZT10ZXh0XSwNCmlucHV0W3R5cGU9c2VhcmNoXSwNCmlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgY29sb3I6ICNmZmY7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDBweCk7DQogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDBweCk7DQogIHdpZHRoOiBjYWxjKDEwMCUgLSAwcHgpOw0KICBvdXRsaW5lOiBub25lOw0KICBib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudDsNCiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1ib3R0b20tY29sb3I6ICM1NTU7DQogIGJvcmRlci1yYWRpdXM6IDBweDsNCiAgcGFkZGluZzogOHB4IDEwcHg7DQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICBib3JkZXI6IHNvbGlkIDFweCAjMDBFNkZGOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBoZWlnaHQ6IDI1cHg7DQogIHdpZHRoOiAyNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIC8qDQogIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7DQogICovDQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7DQogIGNvbG9yOiAjZmZmOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBFNkZGOw0KICAvKmRpc3BsYXk6IGlubGluZS1ibG9jazsqLw0KfQ0KDQppbnB1dFt0eXBlPSJjaGVja2JveCJdOmJlZm9yZSB7DQogIHBvc2l0aW9uOiBpbml0aWFsOw0KICBsZWZ0OiAwcHg7DQogIG1hcmdpbi1sZWZ0OiAtNHB4Ow0KICBjb250ZW50OiAiICI7DQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogaW5pdGlhbDsNCiAgbGVmdDogMHB4Ow0KICBtYXJnaW4tbGVmdDogLTNweDsNCiAgY29udGVudDogIuKckyI7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPSJjaGVja2JveCJdLmJ1bGs6Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGxlZnQ6IDBweDsNCiAgdG9wOiAtMTFweDsNCiAgbWFyZ2luLWxlZnQ6IC0zcHg7DQogIGNvbnRlbnQ6ICLinJMiOw0KICBmb250LXNpemU6IDEuNWVtOw0KICBjb2xvcjogIzAwMDsNCn0NCg0KDQppbnB1dFt0eXBlPWJ1dHRvbl0uY2FuY2VsIHsNCg0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiByZWQ7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXS5zYXZlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQoNCmlucHV0W3R5cGU9YnV0dG9uXS5ibGFjaywNCmlucHV0W3R5cGU9c3VibWl0XS5ibGFjayB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KaW5wdXRbdHlwZT1idXR0b25dLmNlbnRlciB7DQogIG1hcmdpbi1yaWdodDogYXV0bzsNCiAgbWFyZ2luLWxlZnQ6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KLnBvaW50ZXIgew0KICBjdXJzb3I6IHBvaW50ZXI7DQp9DQoNCi5wb2ludGVyOmhvdmVyIHsNCiAgY29sb3I6ICMwMEU2RkY7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KLnNvcnRUaGlzIHsNCiAgY29sb3I6ICMwMEU2RkY7DQp9DQoNCi53NDBweCB7DQogIG1heC13aWR0aDogNDBweDsNCn0NCg0KLnc1MHB4IHsNCiAgbWF4LXdpZHRoOiA1MHB4Ow0KfQ0KDQoudzgwcHggew0KICBtYXgtd2lkdGg6IDgwcHg7DQp9DQoNCi53MTUwcHggew0KICBtYXgtd2lkdGg6IDE1MHB4Ow0KfQ0KDQoudzIwMHB4IHsNCiAgbWF4LXdpZHRoOiAyMDBweDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgd2lkdGg6IDIwMHB4Ow0KICBvdmVyZmxvdy14OiBoaWRkZW47DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KfQ0KDQoudzMwMHB4IHsNCiAgbWF4LXdpZHRoOiAzMDBweDsNCn0NCg0KLncyMjBweCB7DQogIG1heC13aWR0aDogMjIwcHg7DQogIGN1cnNvcjogYWxpYXM7DQp9DQoNCi5mb290ZXIgew0KICBmb250LXNpemU6IDEwcHg7DQp9DQoNCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi5zY3JlZW5Mb2dIaWRkZW4gew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xMTBweCk7DQp9DQoNCi5ib3JkZXJTcGFjZSB7DQogIG1hcmdpbi1ib3R0b206IDMwcHg7DQp9DQoNCi5ibG9jayB7fQ0KDQoubm9uZSB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCg0KLm5vdFZpc2libGUgew0KICBoZWlnaHQ6IDBweDsNCiAgZGlzcGxheTogbm9uZTsNCiAgb3BhY2l0eTogMDsNCiAgYm9yZGVyLWJvdHRvbTogIzAwMCBzb2xpZCAwcHg7DQoNCn0NCg0KLnZpc2libGUgew0KICBvcGFjaXR5OiAxOw0KICBkaXNwbGF5OiBibG9jazsNCiAgYm9yZGVyLWJvdHRvbTogIzQ0NCBzb2xpZCAxcHg7DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi5mbG9hdFJpZ2h0IHsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouZmxvYXRMZWZ0IHsNCiAgZmxvYXQ6IGxlZnQ7DQp9DQoNCi5tZW51LWFjdGl2ZSB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7DQp9DQoNCnRhYmxlIHsNCiAgd2lkdGg6IDEwMCUNCn0NCg0KLm1lbnUtbm90QWN0aXZlIHt9DQoNCiNicmFuY2ggew0KICBjb2xvcjogcmVkOw0KfQ0KDQojaW50ZXJhY3Rpb24gew0KICBtYXJnaW4tYm90dG9tOiAxMDBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBib3JkZXItYm90dG9tOiBzb2xpZCAwcHggIzc3NzsNCn0NCg0KDQouaGFsZiB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB3aWR0aDogNDUlOw0KfQ0KDQoubWVudSB7DQogIGJvcmRlcjogc29saWQgMXB4ICMwMEU2RkY7DQp9DQoNCi5pbmZvTXNnIHsNCiAgY29sb3I6ICNhYWE7DQp9DQoNCi5lcnJvck1zZyB7DQogIGNvbG9yOiByZWQ7DQp9DQoNCi53YXJuaW5nTXNnIHsNCiAgY29sb3I6IHllbGxvdzsNCn0NCg0KLmRlYnVnTXNnIHsNCiAgY29sb3I6IG1hZ2VudGE7DQp9DQoNCg0KLmNhdGVnb3J5IHsNCiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDJweA0KfQ0KDQoubmV3cyB7DQogIGJvcmRlci1jb2xvcjogdG9tYXRvDQp9DQoNCi5tb3ZpZSB7DQogIGJvcmRlci1jb2xvcjogcm95YWxibHVlOw0KfQ0KDQouc2VyaWVzIHsNCiAgYm9yZGVyLWNvbG9yOiBnb2xkOw0KfQ0KDQouc3BvcnRzIHsNCiAgYm9yZGVyLWNvbG9yOiB5ZWxsb3dncmVlbjsNCn0NCg0KLmtpZHMgew0KICBib3JkZXItY29sb3I6IG1lZGl1bXB1cnBsZTsNCn0NCg0KLyogTG9hZGluZyAqLw0KI2xvYWRpbmcgew0KICBsZWZ0OiAwcHg7DQogIHRvcDogMHB4Ow0KICB6LWluZGV4OiAxMDAwMDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7DQogIG1hcmdpbjogYXV0bzsNCiAgd2lkdGg6IDEwMCU7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KDQoubG9hZGVyIHsNCiAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMwMEU2RkY7DQogIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCAjMDBFNkZGOw0KICB3aWR0aDogNTBweDsNCiAgaGVpZ2h0OiA1MHB4Ow0KICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTsNCiAgYW5pbWF0aW9uOiBzcGluIDEuMnMgbGluZWFyIGluZmluaXRlOw0KDQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgbWFyZ2luOiBhdXRvOw0KDQogIHRvcDogMDsNCiAgcmlnaHQ6IDA7DQogIGJvdHRvbTogMDsNCiAgbGVmdDogMDsNCg0KfQ0KDQouYmFubmVyIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDA7DQogIGxlZnQ6IDA7DQogIHdpZHRoOiAxMDAlOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOw0KICBjb2xvcjogI2ZmZmZmZjsNCiAgcGFkZGluZzogMTBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LXNpemU6IDE2cHg7DQogIGRpc3BsYXk6IG5vbmU7DQogIHotaW5kZXg6IDk5OTk5Ow0KfQ0KDQpALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7DQogIDAlIHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOw0KICB9DQoNCiAgMTAwJSB7DQogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOw0KICB9DQp9DQoNCkBrZXlmcmFtZXMgc3BpbiB7DQogIDAlIHsNCiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsNCiAgfQ0KDQogIDEwMCUgew0KICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7DQogIH0NCn0=" webUI["html/img/logo_b_880x200.png"] = "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" - webUI["html/img/threadfin.ico"] = "AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/yMXTf/LF03/xxdN/xwXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/gBdN//8XTf/zF03/YRdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN/2IXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/hRdN//8XTf/zF03/YhdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbDFtbWxNbW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sNW1tbjltbW/9bW1v0W1tbbltbWw5bW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sTW1tbDFtbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbD1tbW0dbW1ubW1tbx1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8JbW1vjW1tb/1tbW/xbW1vbW1tbw1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8dbW1ubW1tbRFtbWw5bW1sAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1sxW1tb7VtbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1vkW1tbLVtbWwAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbWw1bW1s/W1tboFtbW9FbW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vRW1tboFtbWz1bW1sMW1tbAAAAAAAAAAAA//w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w///gAAB/gAAAH4AAAB+AAAAc=" - webUI["html/js/authentication_ts.js"] = "ZnVuY3Rpb24gbG9naW4oKSB7CiAgICB2YXIgZXJyID0gZmFsc2U7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOwogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXV0aGVudGljYXRpb24iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICBjb25zb2xlLmxvZyhpbnB1dHMpOwogICAgZm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBrZXkgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICB2YXIgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIGlucHV0c1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9ICJyZWQiOwogICAgICAgICAgICBlcnIgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIGlmIChlcnIgPT0gdHJ1ZSkgewogICAgICAgIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoImNvbmZpcm0iKSkgewogICAgICAgIGlmIChkYXRhWyJjb25maXJtIl0gIT0gZGF0YVsicGFzc3dvcmQiXSkgewogICAgICAgICAgICBhbGVydCgic2RhZnNkIik7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXNzd29yZCcpLnN0eWxlLmJvcmRlckNvbG9yID0gInJlZCI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtJykuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9ICJ7ey5hY2NvdW50LmZhaWxlZH19IjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgZm9ybS5zdWJtaXQoKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1hdXRoZW50aWNhdGlvbl90cy5qcy5tYXA=" + webUI["html/index.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQoNCjxoZWFkPg0KICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQogIDwhLS0tDQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+IA0KICAgIC0tPg0KICA8dGl0bGU+VGhyZWFkZmluPC90aXRsZT4NCiAgPCEtLSBmb250LWF3ZXNvbWUgLS0+DQogIDxsaW5rDQogICAgcmVsPSJzdHlsZXNoZWV0Ig0KICAgIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS81LjE0LjAvY3NzL2FsbC5taW4uY3NzIg0KICAvPg0KICA8bGluayBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBpbnRlZ3JpdHk9InNoYTM4NC1nSDJ5SUpxS2ROSFBFcTBuNE1xYS9IR0tJaFNrSUhlTDVBeWhrWVY4aTU5VTVBUjZjc0J2QXBISE5sL3ZJMUJ4IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc2NyZWVuLmNzcyIgdHlwZT0idGV4dC9jc3MiPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPg0KICA8bGluayByZWw9Imljb24iIGhyZWY9ImltZy90aHJlYWRmaW4uaWNvIj4NCg0KPC9oZWFkPg0KDQo8Ym9keSBvbmxvYWQ9ImphdmFzY3JpcHQ6IFBhZ2VSZWFkeSgpOyI+DQoNCiAgPGRpdiBjbGFzcz0iYmFubmVyIj4NCiAgICBOZXVlIFZlcnNpb24gdmVyZsO8Z2JhciEgS2xpY2tlbiBTaWUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hcmNlbEdvZXJlbnR6L1RocmVhZGZpbi9yZWxlYXNlcy9sYXRlc3QiPmhpZXI8L2E+LCB1bSBzaWUgaGVydW50ZXJ6dWxhZGVuLg0KICA8L2Rpdj4NCg0KICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+DQogIDwvZGl2Pg0KDQogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cF9oZWFkZXIiPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgICAgICAgICAgPGRpdiBpZD0icG9wdXAtY3VzdG9tIj4NCiAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciIgaWQ9InBvcHVwX2Zvb3RlciI+PC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InNlcnZlcl9pbmZvcm1hdGlvbiI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPg0KICAgICAgICAgIDxoMyBjbGFzcz0ibW9kYWwtdGl0bGUiPlNlcnZlciBJbmZvcm1hdGlvbjwvaDM+DQogICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4tY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+U2VydmVyIEluZm9ybWF0aW9uPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZlcnNpb24iIGNsYXNzPSJmb3JtLWxhYmVsIj5UaHJlYWRmaW4gVmVyc2lvbjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9InZlcnNpb24iIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJicmFuY2giIGNsYXNzPSJmb3JtLWxhYmVsIj5UaHJlYWRmaW4gQnJhbmNoPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYnJhbmNoIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPg0KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZXJyb3JzIiBjbGFzcz0iZm9ybS1sYWJlbCI+RXJyb3JzPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iZXJyb3JzIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPg0KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0id2FybmluZ3MiIGNsYXNzPSJmb3JtLWxhYmVsIj5XYXJuaW5nczwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9Indhcm5pbmdzIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCB0ZXh0LWJnLWRhcmsgbWItMyI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPlN0cmVhbSBJbmZvcm1hdGlvbjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJEVlIiIGNsYXNzPSJmb3JtLWxhYmVsIj5EVlIgSVA8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJEVlIiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJtM3UtdXJsIiBjbGFzcz0iZm9ybS1sYWJlbCI+TTNVIFVSTCAoU3BlY2lmaWMgZ3JvdXBzOiBbaHR0cDovLy4uLj9ncm91cC10aXRsZT1mb28sYmFyXSk8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9Im0zdS11cmwiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHk+DQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImlucHV0LWdyb3VwLXRleHQgY29weS1idG4iIGRhdGEtY2xpcGJvYXJkLXRhcmdldD0iI20zdS11cmwiIGRhdGEtYnMtdGl0bGU9IkNvcHkgdG8gY2xpcGJvYXJkIiBkYXRhLWJzLXRvZ2dsZT0idG9vbHRpcCIgZGF0YS1icy1wbGFjZW1lbnQ9ImJvdHRvbSI+PGkgY2xhc3M9ImZhciBmYS1jbGlwYm9hcmQiPjwvaT48L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ieGVwZy11cmwiIGNsYXNzPSJmb3JtLWxhYmVsIj5YTUxUViBVUkw8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9InhlcGctdXJsIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5Pg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJpbnB1dC1ncm91cC10ZXh0IGNvcHktYnRuIiBkYXRhLWNsaXBib2FyZC10YXJnZXQ9IiN4ZXBnLXVybCIgZGF0YS1icy10aXRsZT0iQ29weSB0byBjbGlwYm9hcmQiIGRhdGEtYnMtdG9nZ2xlPSJ0b29sdGlwIiBkYXRhLWJzLXBsYWNlbWVudD0iYm90dG9tIj48aSBjbGFzcz0iZmFyIGZhLWNsaXBib2FyZCI+PC9pPjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzdHJlYW1zIiBjbGFzcz0iZm9ybS1sYWJlbCI+RmlsdGVyZWQgQ2hhbm5lbHM8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJzdHJlYW1zIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPg0KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ieGVwZyIgY2xhc3M9ImZvcm0tbGFiZWwiPk1hcHBlZCBDaGFubmVsczwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9InhlcGciIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KICA8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBzdGlja3ktdG9wIG5hdmJhci1kYXJrIGJnLWJsYWNrIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPg0KICAgICAgPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0iL3dlYiI+DQogICAgICAgIDxzcGFuIGlkPSJsb2dvIj48L3NwYW4+DQogICAgICA8L2E+DQogICAgICA8YnV0dG9uIGNsYXNzPSJuYXZiYXItdG9nZ2xlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWJzLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtbGFiZWw9IlRvZ2dsZSBuYXZpZ2F0aW9uIj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hdmJhci10b2dnbGVyLWljb24iPjwvc3Bhbj4NCiAgICAgIDwvYnV0dG9uPg0KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIiBpZD0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCI+DQogICAgICAgIDx1bCBjbGFzcz0ibmF2YmFyLW5hdiBteC1hdXRvIG1iLTIgbWItbGctMCIgaWQ9Im1haW4tbWVudSI+DQogICAgICAgIDwvdWw+DQogICAgICAgIDx1bCBjbGFzcz0ibmF2YmFyLW5hdiBteC1hdXRvIG1iLTIgbWItbGctMCI+DQogICAgICAgICAgPGxpIGNsYXNzPSJuYXYtbGluayIgZGF0YS1icy10b2dnbGU9Im1vZGFsIiBkYXRhLWJzLXRhcmdldD0iI3NlcnZlcl9pbmZvcm1hdGlvbiI+PGkgY2xhc3M9ImZhcyBmYS1pbmZvLWNpcmNsZSI+PC9pPiBTZXJ2ZXIgSW5mb3JtYXRpb248L2xpPg0KICAgICAgICA8L3VsPg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvbmF2Pg0KICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmxleCI+DQogICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiBjb2wtc20tMTIiPg0KICAgICAgICA8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0idGFibGUtcmVzcG9uc2l2ZSI+PC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJyb3ciIGlkPSJteVN0cmVhbXNCb3giPg0KICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTUgY29sLXNtLTEyIHRhYmxlLXJlc3BvbnNpdmUgZmxvYXQtc3RhcnQiPg0KICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWRhcmsgdGFibGUtYm9yZGVyZWQgY2FwdGlvbi10b3AiIGlkPSJhY3RpdmVTdHJlYW1zIj48L3RhYmxlPg0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtc20tMTIgdGFibGUtcmVzcG9uc2l2ZSBmbG9hdC1lbmQiPg0KICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWRhcmsgdGFibGUtYm9yZGVyZWQgY2FwdGlvbi10b3AiIGlkPSJpbmFjdGl2ZVN0cmVhbXMiPjwvdGFibGU+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY2xpcGJvYXJkLmpzLzIuMC4xMC9jbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbWVudV90cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9zZXR0aW5nc190cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9sb2dzX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2Jhc2VfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYmFubmVyLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4=" webUI["html/img/BC-QR.png"] = "iVBORw0KGgoAAAANSUhEUgAAALoAAADCCAYAAAD+f9hdAAABWGlDQ1BJQ0MgUHJvZmlsZQAAGJVlkL9LQlEUx79KEZlJUUtQcKEhg4qwITAa1EKSBjEDLRqez+eP0NflvSvm3NIf0d5aYwS1NAQtQRAtQS3N0eD6+j5N1Dxw7vmcL9977+EAXmhSVrwTQNVUVioeFZnsgRj5wjD8CCAMj6bbMpJM7oLRqf3RfIXHrS/L7lszi4FGYvvjyHccm1v4bDqD/r4YzRu2zvrNVLq0FODJk+frSrp8Tp62OBT5wuVim69czrX5oeVJp2LkN3Iw18PFHq5Wavrfv+7EfsPc32PNMGdhI4U4ohBIw4IGk0oBBlmgjjIUSqQtkg2JCh0N9kms8Yyzq6JGz0Ao47Slxk5kwyoXS0pEuCVD7Jj6ypIIrYZCHIA7/7/Lrnb2DmzeOY5z29US98D1OuC76WrBDWByDHh8kpqltaQhprdQAH4ugfEsMPXMO4ed2X4BE0hdOlrLnMgAAADQZVhJZk1NACoAAAAIAAUBEgADAAAAAQABAAABGgAFAAAAAQAAAEoBGwAFAAAAAQAAAFIBMQACAAAAGAAAAFqHaQAEAAAAAQAAAHIAAAAAAAAASAAAAAEAAABIAAAAAUFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyAAAFkAMAAgAAABQAAAC0kBEAAgAAAAcAAADIkpEAAgAAAAQ2MzIAoAIABAAAAAEAAAC6oAMABAAAAAEAAADCAAAAADIwMjI6MDU6MTIgMTQ6NTY6NDEALTA1OjAwAABhL1DGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD82lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPGV4aWY6T2Zmc2V0VGltZU9yaWdpbmFsPi0wNTowMDwvZXhpZjpPZmZzZXRUaW1lT3JpZ2luYWw+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj43ODY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ODE4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6U3Vic2VjVGltZU9yaWdpbmFsPjYzMjwvZXhpZjpTdWJzZWNUaW1lT3JpZ2luYWw+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD4yMDIyLTA1LTEyVDE0OjU2OjQxLjYzMjwvcGhvdG9zaG9wOkRhdGVDcmVhdGVkPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrFqaA/AABAAElEQVR4Ae3dB7wtSVE/8ENOoqCAAcN7KgJGUAREwCUJCvonSjIsSSSIIElEFEVQREmCIgisqIuEBUEQFVlXVMCAOayRRQUlKaIgEvb9+9vv/s7Wmztzzpx7z9146/M5p3u6q6uqq6urw/TMXOxYg8UhHGrgQq6Bi1/I63dYvUMNdA0cGvqhIVwkNHBo6BeJ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" - webUI["html/img/log.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xNFQxMToxMDo0MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkP32mEAAANASURBVGgF7ZlPiE1RHMffw1AYhiL5k1HEijJiYaFZiHoyFspW2RFRkkSZGgtFWJIwi9FYmo0VOywkKTbKgjSlWcifRCPX51dv6s2d33md77vvXjfmV9859/7u93x/v98959x73p1KRbAkSargAhgDH0E/qIYkuHYEvAPGvwbmNOEerXM/0Q6BRSFuZj/ix0DaDnvCkGppIucDAe4OhzvkcUO+GaELAf8ux7/b8Zlrr+Pvc3zm6nX8NccXdKmFLHaUPJ/Ruhyu5zNap8Nd6PiCLrUQTyi0Rjy/5/M0Zd+smB7M32XwtgBr07aC6yfSTs7XO77OALfH4VbgHsD/HLytVquJx4nyIdQFBsHftscksK5Z0sGhpuN8Or4Aa5sJFHjtO7G2MjKvvZjN1sglOpSlCMt9LrDZ4S4Hd0Qg24vrK+gAZbPtjMqTdFKhEdkIsYxFWP720JlioUK6pzDL41jtpRIqxOOWxecuB3fhRGT8E85YBK8VygI6GSRTCxlH3TaJgyw4O2678aCxO94LbNPovYDdmOrUukIBN/MqwjJEOwGPOHR31W4VONVCLEBR9lAJpBbSrYhn5K5R+quFnGUOr1ICtMIlxjz6XVb6qot9JeKvCPSAdlQJJHDtd8hOIN0wtRDLxx6Ntr0ulalTq1TJNyYzXUjj3SjD8X87Iva7uR8s5+2bi6FtX1oOgi8g2tSn1g2yPx+t3gIR/c90s1+C1vuO/YkxdWrdjxFtE2dE0VELWaqIZ+QuUfqrhZxmyKUvgEoyE1xizOR4YOI8plXXyAZEbYsyTJvXFsUW+x6wGUSbWogJ237rZHSEgojq1CooLT3MdCH6Pcu3xz8zIq0s9lvc2+sgz6dWH/rnQPB/jlybZGoh99hCHJqk0P6TD0jaI/4b7dVYeXVq2bemokyKpRZiHwWKMimWWshxhryjoEpOKXHUNbIN8WcUc5s2r8Vue7l9oAaiTS3EhDeB6EUYnUlGojq1MobLr3uokB/5hcys7OYWKuRl5nD5Cbi5uYXw0ntPHoay2S8Seuol5RZSJ0r/n/DEc/BdrN9kTZrH7BkwDspgwyQxW6uggU3nHnAXvAG/QZE2SrARsL8hJffwDxM0mNDPvT8IAAAAAElFTkSuQmCC" - webUI["html/js/settings_ts.js"] = "Y2xhc3MgU2V0dGluZ3NDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudF9zZXR0aW5ncyI7CiAgICB9CiAgICBjcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHZhbHVlKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJINCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVIUigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhSIik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVTZXR0aW5ncyhzZXR0aW5nc0tleSkgewogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVtzZXR0aW5nc0tleV07CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAvLyBUZXh0ZWluZ2FiZW4KICAgICAgICAgICAgY2FzZSAidXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVwZGF0ZSIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVwZGF0ZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJhY2t1cFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImJhY2t1cC5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmJhY2t1cFBhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRlbXAucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudGVtcFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInRlbXAucGF0aCIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy50bXBQYXRoLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51c2VyQWdlbnQudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVzZXIuYWdlbnQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudXNlckFnZW50LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiYnVmZmVyLnRpbWVvdXQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmZtcGVnLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImZmbXBlZy5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJmZm1wZWcub3B0aW9ucyIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ2bGMucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudmxjUGF0aC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidmxjLnBhdGgiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudmxjUGF0aC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLm9wdGlvbnMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnZsY09wdGlvbnMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInZsYy5vcHRpb25zIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnZsY09wdGlvbnMucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxpc3RlbmluZ0lwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5saXN0ZW5pbmdJcC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAibGlzdGVuaW5nSXAiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MubGlzdGVuaW5nSXAucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIENoZWNrYm94ZW4KICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ud2ViIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbldFQi50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ucG1zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblBNUy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbk0zVS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ueG1sIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblhNTC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24uYXBpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsZXMudXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5maWxlc1VwZGF0ZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiY2FjaGUuaW1hZ2VzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5jYWNoZUltYWdlcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5yZXBsYWNlRW1wdHlJbWFnZXMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5yZXBsYWNlQ2hhbm5lbFRpdGxlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzdG9yZUJ1ZmZlckluUkFNIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5zdG9yZUJ1ZmZlckluUkFNLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmb3JjZUh0dHBzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mb3JjZUh0dHBzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodHRwc1BvcnQiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmh0dHBzUG9ydC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiaHR0cHNQb3J0IiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuaHR0cHNQb3J0LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodHRwc1RocmVhZGZpbkRvbWFpbiI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuaHR0cHNUaHJlYWRmaW5Eb21haW4udGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImh0dHBzVGhyZWFkZmluRG9tYWluIiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuaHR0cHNUaHJlYWRmaW5Eb21haW4ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBUaHJlYWRmaW5Eb21haW4iOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmh0dHBUaHJlYWRmaW5Eb21haW4udGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImh0dHBUaHJlYWRmaW5Eb21haW4iLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5odHRwVGhyZWFkZmluRG9tYWluLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlbmFibGVOb25Bc2NpaSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZW5hYmxlTm9uQXNjaWkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImVwZ0NhdGVnb3JpZXMiLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJlcGdDYXRlZ29yaWVzQ29sb3JzIiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllc0NvbG9ycy5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiVGhyZWFkZmluQXV0b1VwZGF0ZSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic3NkcCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3Muc3NkcC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZHVtbXkiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmR1bW15LnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkdW1teUNoYW5uZWwiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmR1bW15Q2hhbm5lbC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJQUFYiLCAiMzAgTWludXRlcyIsICI2MCBNaW51dGVzIiwgIjkwIE1pbnV0ZXMiLCAiMTIwIE1pbnV0ZXMiLCAiMTgwIE1pbnV0ZXMiLCAiMjQwIE1pbnV0ZXMiLCAiMzYwIE1pbnV0ZXMiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIlBQViIsICIzMF9NaW51dGVzIiwgIjYwX01pbnV0ZXMiLCAiOTBfTWludXRlcyIsICIxMjBfTWludXRlcyIsICIxODBfTWludXRlcyIsICIyNDBfTWludXRlcyIsICIzNjBfTWludXRlcyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaWdub3JlRmlsdGVycyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuaWdub3JlRmlsdGVycy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hcGkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIFNlbGVjdAogICAgICAgICAgICBjYXNlICJ0dW5lciI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudHVuZXIudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goaSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ1NvdXJjZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiUE1TIiwgIlhFUEciXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJhY2t1cC5rZWVwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5iYWNrdXBLZWVwLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIjUiLCAiMTAiLCAiMjAiLCAiMzAiLCAiNDAiLCAiNTAiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIjUiLCAiMTAiLCAiMjAiLCAiMzAiLCAiNDAiLCAiNTAiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci5zaXplLmtiIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5idWZmZXJTaXplLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIjAuNSBNQiIsICIxIE1CIiwgIjIgTUIiLCAiMyBNQiIsICI0IE1CIiwgIjUgTUIiLCAiNiBNQiIsICI3IE1CIiwgIjggTUIiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIjUxMiIsICIxMDI0IiwgIjIwNDgiLCAiMzA3MiIsICI0MDk2IiwgIjUxMjAiLCAiNjE0NCIsICI3MTY4IiwgIjgxOTIiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlciI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbInt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX2ZhbHNlfX0iLCAiRkZtcGVnOiAoe3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fZmZtcGVnfX0pIiwgIlZMQzogKHt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX3ZsY319KSJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiLSIsICJmZm1wZWciLCAidmxjIl07CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1ZHB4eSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudWRweHkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVkcHh5IiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVkcHh5LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KSB7CiAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgdGV4dDsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLndlYiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uV0VCLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLm0zdSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uTTNVLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnBtcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uUE1TLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uWE1MLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLmFwaSI6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJUaHJlYWRmaW5BdXRvVXBkYXRlIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJsaXN0ZW5pbmdJcCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmxpc3RlbmluZ0lwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJhY2t1cC5rZWVwIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYmFja3VwS2VlcC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJiYWNrdXAucGF0aCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJhY2t1cFBhdGguZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidGVtcC5wYXRoIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudGVtcFBhdGguZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYnVmZmVyIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci5zaXplLmtiIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYnVmZmVyU2l6ZS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzdG9yZUJ1ZmZlckluUkFNIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3Muc3RvcmVCdWZmZXJJblJBTS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmb3JjZUh0dHBzIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZm9yY2VIdHRwcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodHRwc1BvcnQiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5odHRwc1BvcnQuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHNUaHJlYWRmaW5Eb21haW4iOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5odHRwc1RocmVhZGZpbkRvbWFpbi5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodHRwVGhyZWFkZmluRG9tYWluIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuaHR0cFRocmVhZGZpbkRvbWFpbi5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlbmFibGVOb25Bc2NpaSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmVuYWJsZU5vbkFzY2lpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXNDb2xvcnMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci50aW1lb3V0IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudXNlckFnZW50LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5wYXRoIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZmZtcGVnUGF0aC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmZm1wZWcub3B0aW9ucyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZmbXBlZ09wdGlvbnMuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy52bGNQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInZsYy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudmxjT3B0aW9ucy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXBpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNzZHAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zc2RwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbGVzLnVwZGF0ZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZpbGVzVXBkYXRlLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImNhY2hlLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmNhY2hlSW1hZ2VzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5taXNzaW5nLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VFbXB0eUltYWdlcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4ZXBnLnJlcGxhY2UuY2hhbm5lbC50aXRsZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VDaGFubmVsVGl0bGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidWRweHkiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51ZHB4eS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGV4dCA9ICIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHByZS5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQocHJlKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KfQpjbGFzcyBTZXR0aW5nc0NhdGVnb3J5SXRlbSBleHRlbmRzIFNldHRpbmdzQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoaGVhZGxpbmUsIHNldHRpbmdzS2V5cykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5oZWFkbGluZSA9IGhlYWRsaW5lOwogICAgICAgIHRoaXMuc2V0dGluZ3NLZXlzID0gc2V0dGluZ3NLZXlzOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBzZXR0aW5nc0tleXMgPSB0aGlzLnNldHRpbmdzS2V5czsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5Eb2N1bWVudElEKTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaGVhZGxpbmUpOwogICAgICAgIC8vIFRhYmVsbGUgZsO8ciBkaWUgS2F0ZWdvcmllIGVyc3RlbGxlbgogICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdmFyIGtleXMgPSBzZXR0aW5nc0tleXMuc3BsaXQoIiwiKTsKICAgICAgICBrZXlzLmZvckVhY2goc2V0dGluZ3NLZXkgPT4gewogICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5wbXMiOgogICAgICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5hcGkiOgogICAgICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVNldHRpbmdzKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQodGFibGUpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUhSKCkpOwogICAgfQp9CmZ1bmN0aW9uIHNob3dTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTRVRUSU5HUyIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5nc0NhdGVnb3J5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc2V0dGluZ3NDYXRlZ29yeVtpXS5jcmVhdGVDYXRlZ29yeSgpOwogICAgfQp9CmZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTYXZlIFNldHRpbmdzIik7CiAgICB2YXIgY21kID0gInNhdmVTZXR0aW5ncyI7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfc2V0dGluZ3MiKTsKICAgIHZhciBzZXR0aW5ncyA9IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjaGFuZ2VkIik7CiAgICB2YXIgbmV3U2V0dGluZ3MgPSBuZXcgT2JqZWN0KCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldHRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoc2V0dGluZ3NbaV0udGFnTmFtZSkgewogICAgICAgICAgICBjYXNlICJJTlBVVCI6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZXR0aW5nc1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2V0dGluZ3NbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoIiwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZTsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHBhcnNlSW50KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgZGF0YVsic2V0dGluZ3MiXSA9IG5ld1NldHRpbmdzOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldHRpbmdzX3RzLmpzLm1hcA==" - webUI["html/lang/en.json"] = "ew0KICAibWFpbk1lbnUiOiB7DQogICAgIml0ZW0iOiB7DQogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLA0KICAgICAgInBtc0lEIjogIlBNUyBJRCIsDQogICAgICAiZmlsdGVyIjogIkZpbHRlciIsDQogICAgICAieG1sdHYiOiAiWE1MVFYiLA0KICAgICAgIm1hcHBpbmciOiAiTWFwcGluZyIsDQogICAgICAidXNlcnMiOiAiVXNlcnMiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0sDQogICAgImhlYWRsaW5lIjogew0KICAgICAgInBsYXlsaXN0IjogIkxvY2FsIG9yIHJlbW90ZSBwbGF5bGlzdHMiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIgcGxheWxpc3QiLA0KICAgICAgInhtbHR2IjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlcyIsDQogICAgICAibWFwcGluZyI6ICJNYXAgcGxheWxpc3QgY2hhbm5lbHMgdG8gRVBHIGNoYW5uZWxzIiwNCiAgICAgICJ1c2VycyI6ICJVc2VyIG1hbmFnZW1lbnQiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0NCiAgfSwNCiAgImNvbmZpcm0iOiB7DQogICAgInJlc3RvcmUiOiAiQWxsIGRhdGEgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRob3NlIGZyb20gdGhlIGJhY2t1cC4gU2hvdWxkIHRoZSBmaWxlcyBiZSByZXN0b3JlZD8iDQogIH0sDQogICJhbGVydCI6IHsNCiAgICAiZmlsZUxvYWRpbmdFcnJvciI6ICJGaWxlIGNvdWxkbid0IGJlIGxvYWRlZCIsDQogICAgImludmFsaWRDaGFubmVsTnVtYmVyIjogIkludmFsaWQgY2hhbm5lbCBudW1iZXIiLA0KICAgICJtaXNzaW5nSW5wdXQiOiAiTWlzc2luZyBpbnB1dCINCiAgfSwNCiAgImJ1dHRvbiI6IHsNCiAgICAiYmFjayI6ICJCYWNrIiwNCiAgICAiYmFja3VwIjogIkJhY2t1cCIsDQogICAgImJ1bGtFZGl0IjogIkJ1bGsgRWRpdCIsDQogICAgImNhbmNlbCI6ICJDYW5jZWwiLA0KICAgICJkZWxldGUiOiAiRGVsZXRlIiwNCiAgICAiZG9uZSI6ICJEb25lIiwNCiAgICAibG9naW4iOiAiTG9naW4iLA0KICAgICJuZXciOiAiTmV3IiwNCiAgICAibmV4dCI6ICJOZXh0IiwNCiAgICAicmVzdG9yZSI6ICJSZXN0b3JlIiwNCiAgICAic2F2ZSI6ICJTYXZlIiwNCiAgICAic2VhcmNoIjogIlNlYXJjaCIsDQogICAgInVwZGF0ZSI6ICJVcGRhdGUiLA0KICAgICJjcmFldGVBY2NvdW50IjogIkNyZWF0ZSBBY2NvdW50IiwNCiAgICAicmVzZXRMb2dzIjogIlJlc2V0IExvZ3MiLA0KICAgICJ1cGxvYWRMb2dvIjogIlVwbG9hZCBMb2dvIiwNCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiAiU29ydCBDaGFubmVscyBBbHBoYWJldGljYWxseSIsDQogICAgInNvcnRDaGFubmVsTnVtYmVycyI6ICJTb3J0IENoYW5uZWxzIg0KICB9LA0KICAiZmlsdGVyIjogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJuYW1lIjogIkZpbHRlciBOYW1lIiwNCiAgICAgICJ0eXBlIjogIkZpbHRlciBUeXBlIiwNCiAgICAgICJmaWx0ZXIiOiAiRmlsdGVyIg0KICAgIH0sDQogICAgImN1c3RvbSI6ICJDdXN0b20iLA0KICAgICJncm91cCI6ICJHcm91cCIsDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVyIE5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlciBuYW1lIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic3RhcnRpbmdudW1iZXIiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU3RhcnRpbmcgQ2hhbm5lbCBOdW1iZXIgdG8gdXNlIGZvciB0aGlzIEdyb3VwIEZpbHRlciAoRGVmYXVsdCBpcyAxMDAwKSINCiAgICB9LA0KICAgICJjYXRlZ29yeSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgQ2F0ZWdvcnkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlciBDYXRlZ29yeSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRmlsdGVyIENhdGVnb3J5IHNldHMgYWxsIGNoYW5uZWxzIGluIHRoZSBmaWx0ZXIgdG8gYSBzcGVjaWZpYyBjYXRlZ29yeSAobmV3cywgc3BvcnRzLCBldGMpIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInR5cGUiOiB7DQogICAgICAidGl0bGUiOiAiVHlwZSIsDQogICAgICAiZ3JvdXBUaXRsZSI6ICJHcm91cCBUaXRsZSIsDQogICAgICAiY3VzdG9tRmlsdGVyIjogIkN1c3RvbSBGaWx0ZXIiDQogICAgfSwNCiAgICAiY2FzZVNlbnNpdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJDYXNlIFNlbnNpdGl2ZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsdGVyUnVsZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgUnVsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiU3BvcnQge0hEfSAhe0VTLElUfSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbHRlckdyb3VwIjogew0KICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlNlbGVjdCBhIE0zVSBncm91cC4gKENvdW50ZXIpPGJyPkNoYW5naW5nIHRoZSBncm91cCB0aXRsZSBpbiB0aGUgTTNVIGludmFsaWRhdGVzIHRoZSBmaWx0ZXIuIg0KICAgIH0sDQogICAgImluY2x1ZGUiOiB7DQogICAgICAidGl0bGUiOiAiSW5jbHVkZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRkhELFVIRCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3QgaW5jbHVkZS48YnI+KENvbW1hIHNlcGFyYXRlZCkgQ29tbWEgbWVhbnMgb3IiDQogICAgfSwNCiAgICAiZXhjbHVkZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJFeGNsdWRlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJFUyxJVCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3Qgbm90IGNvbnRhaW4uPGJyPihDb21tYSBzZXBhcmF0ZWQpIENvbW1hIG1lYW5zIG9yIg0KICAgIH0NCiAgfSwNCiAgInBsYXlsaXN0Ijogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJwbGF5bGlzdCI6ICJQbGF5bGlzdCIsDQogICAgICAidHVuZXIiOiAiVHVuZXIiLA0KICAgICAgImxhc3RVcGRhdGUiOiAiTGFzdCBVcGRhdGUiLA0KICAgICAgImF2YWlsYWJpbGl0eSI6ICJBdmFpbGFiaWxpdHkiLA0KICAgICAgInR5cGUiOiAiVHlwZSIsDQogICAgICAic3RyZWFtcyI6ICJTdHJlYW1zIiwNCiAgICAgICJncm91cFRpdGxlIjogImdyb3VwLXRpdGxlIiwNCiAgICAgICJ0dmdJRCI6ICJ0dmctaWQiLA0KICAgICAgInVuaXF1ZUlEIjogIlVuaXF1ZSBJRCINCiAgICB9LA0KICAgICJwbGF5bGlzdFR5cGUiOiB7DQogICAgICAidGl0bGUiOiAiUGxheWxpc3QgdHlwZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJUeXBlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJuYW1lIjogew0KICAgICAgInRpdGxlIjogIk5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlBsYXlsaXN0IG5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRGVzY3JpcHRpb24iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWxlTTNVIjogew0KICAgICAgInRpdGxlIjogIk0zVSBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBNM1UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWxlSERIUiI6IHsNCiAgICAgICJ0aXRsZSI6ICJIREhvbWVSdW4gSVAiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIklQIGFkZHJlc3MgYW5kIHBvcnQgKDE5Mi4xNjguMS4xMDo1MDA0KSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInR1bmVyIjogew0KICAgICAgInRpdGxlIjogIlR1bmVyIC8gU3RyZWFtcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLiA8YnI+T25seSBhdmFpbGFibGUgd2l0aCBhY3RpdmF0ZWQgYnVmZmVyLjxicj5OZXcgc2V0dGluZ3Mgd2lsbCBvbmx5IGJlIGFwcGxpZWQgYWZ0ZXIgcXVpdHRpbmcgYWxsIHN0cmVhbXMuIg0KICAgIH0NCiAgfSwNCiAgInhtbHR2Ijogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJndWlkZSI6ICJHdWlkZSIsDQogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIkF2YWlsYWJpbGl0eSIsDQogICAgICAiY2hhbm5lbHMiOiAiQ2hhbm5lbHMiLA0KICAgICAgInByb2dyYW1zIjogIlByb2dyYW1zIg0KICAgIH0sDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiR3VpZGUgbmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVYTUxUViI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBYTUxUViIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0NCiAgfSwNCiAgIm1hcHBpbmciOiB7DQogICAgInRhYmxlIjogew0KICAgICAgImNoTm8iOiAiQ2guIE5vLiIsDQogICAgICAibG9nbyI6ICJMb2dvIiwNCiAgICAgICJjaGFubmVsTmFtZSI6ICJDaGFubmVsIE5hbWUiLA0KICAgICAgInBsYXlsaXN0IjogIlBsYXlsaXN0IiwNCiAgICAgICJncm91cFRpdGxlIjogIkdyb3VwIFRpdGxlIiwNCiAgICAgICJ4bWx0dkZpbGUiOiAiWE1MVFYgRmlsZSIsDQogICAgICAieG1sdHZJRCI6ICJYTUxUViBJRCINCiAgICB9LA0KICAgICJhY3RpdmUiOiB7DQogICAgICAidGl0bGUiOiAiQWN0aXZlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjaGFubmVsTmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJDaGFubmVsIE5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxHcm91cFN0YXJ0Ijogew0KICAgICAgInRpdGxlIjogIkNoYW5uZWwgR3JvdXAgU3RhcnQiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInNvcnRDaGFubmVsc0FscGhhIjogew0KICAgICAgInRpdGxlIjogIlNvcnQgQWxwaGFiZXRpY2FsbHkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInNvcnRDaGFubmVscyI6IHsNCiAgICAgICJ0aXRsZSI6ICJTb3J0IENoYW5uZWxzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJDaGFubmVsIERlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VkIGJ5IHRoZSBEdW1teSBhcyBhbiBYTUwgZGVzY3JpcHRpb24iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ1cGRhdGVDaGFubmVsTmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjaGFubmVsTG9nbyI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2dvIFVSTCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidXBkYXRlQ2hhbm5lbExvZ28iOiB7DQogICAgICAidGl0bGUiOiAiVXBkYXRlIENoYW5uZWwgTG9nbyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcnkiOiB7DQogICAgICAidGl0bGUiOiAiRVBHIENhdGVnb3J5IiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJtM3VHcm91cFRpdGxlIjogew0KICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlICh0aHJlYWRmaW4ubTN1KSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAieG1sdHZGaWxlIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInhtbHR2Q2hhbm5lbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBDaGFubmVsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwcHZleHRyYSI6IHsNCiAgICAgICJ0aXRsZSI6ICJQUFYgRXh0cmEgVGl0bGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyB3aWxsIGFkZCBjdXN0b20gdGV4dCB0byB0aGUgUHJvZ3JhbW1lIGRhdGEiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDEiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDIiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDMiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiaGlkZUNoYW5uZWwiOiB7DQogICAgICAidGl0bGUiOiAiSGlkZSBCYWNrdXAgQ2hhbm5lbCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAidXNlcnMiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgInVzZXJuYW1lIjogIlVzZXJuYW1lIiwNCiAgICAgICJwYXNzd29yZCI6ICJQYXNzd29yZCIsDQogICAgICAid2ViIjogIldFQiIsDQogICAgICAicG1zIjogIlBNUyIsDQogICAgICAibTN1IjogIk0zVSIsDQogICAgICAieG1sIjogIlhNTCIsDQogICAgICAiYXBpIjogIkFQSSINCiAgICB9LA0KICAgICJ1c2VybmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVc2VybmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29yZCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjb25maXJtIjogew0KICAgICAgInRpdGxlIjogIkNvbmZpcm0iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlBhc3N3b3JkIGNvbmZpcm0iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ3ZWIiOiB7DQogICAgICAidGl0bGUiOiAiV2ViIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAicG1zIjogew0KICAgICAgInRpdGxlIjogIlBNUyBBY2Nlc3MiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm0zdSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UgQWNjZXNzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ4bWwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYXBpIjogew0KICAgICAgInRpdGxlIjogIkFQSSBBY2Nlc3MiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0NCiAgfSwNCiAgInNldHRpbmdzIjogew0KICAgICJjYXRlZ29yeSI6IHsNCiAgICAgICJnZW5lcmFsIjogIkdlbmVyYWwiLA0KICAgICAgImZpbGVzIjogIkZpbGVzIiwNCiAgICAgICJuZXR3b3JrIjogIk5ldHdvcmsiLA0KICAgICAgInN0cmVhbWluZyI6ICJTdHJlYW1pbmciLA0KICAgICAgImJhY2t1cCI6ICJCYWNrdXAiLA0KICAgICAgImF1dGhlbnRpY2F0aW9uIjogIkF1dGhlbnRpY2F0aW9uIg0KICAgIH0sDQogICAgInVwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJTY2hlZHVsZSBmb3IgdXBkYXRpbmcgKFBsYXlsaXN0LCBYTUxUViwgQmFja3VwKSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiMDAwMCwxMDAwLDIwMDAiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRpbWUgaW4gMjQgaG91ciBmb3JtYXQgKDA4MDAgPSA4OjAwIGFtKS4gTW9yZSB0aW1lcyBjYW4gYmUgZW50ZXJlZCBjb21tYSBzZXBhcmF0ZWQuIExlYXZlIHRoaXMgZmllbGQgZW1wdHkgaWYgbm8gdXBkYXRlcyBhcmUgdG8gYmUgY2FycmllZCBvdXQuIg0KICAgIH0sDQogICAgImFwaSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBUEkgSW50ZXJmYWNlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWaWEgQVBJIGludGVyZmFjZSBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIFRocmVhZGZpbi4gQVBJIGRvY3VtZW50YXRpb24gaXMgPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL1RocmVhZGZpbi9UaHJlYWRmaW4tRG9jdW1lbnRhdGlvbi9ibG9iL21hc3Rlci9lbi9jb25maWd1cmF0aW9uLm1kI2FwaSc+aGVyZTwvYT4iDQogICAgfSwNCiAgICAic3NkcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJTU0RQIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTU0RQIGlzIGEgbmV0d29yayBwcm90b2NvbCBmb3Igc2VydmljZSBkaXNjb3ZlcnkuIEl0IGlzIHVzZWQgZm9yIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIFRocmVhZGZpbiBpbiB0aGUgbmV0d29yay4iDQogICAgfSwNCiAgICAiZHVtbXkiOiB7DQogICAgICAidGl0bGUiOiAiRW5hYmxlIERlZmF1bHQgRHVtbXkgRGF0YSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiBlbmFibGVkLCB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBtYXAgaW5hY3RpdmUgY2hhbm5lbHMgdG8gdGhlIGR1bW15IGRhdGEgY2hhbm5lbCBiZWxvdy4gVXNlIHRoaXMgdG8ga2VlcCBMaXZlIEV2ZW50IGNoYW5uZWxzIGFjdGl2ZS4iDQogICAgfSwNCiAgICAiZHVtbXlDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIkR1bW15IERhdGEgQ2hhbm5lbCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IHRoZSBkZWZhdWx0IGNoYW5uZWwgdG8gdXNlIHdoZW4gbWFwcGluZyBpbmFjdGl2ZSBjaGFubmVscyB0byB0aGUgZHVtbXkgZGF0YS4iDQogICAgfSwNCiAgICAiaWdub3JlRmlsdGVycyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJZ25vcmUgRmlsdGVycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgZmlsdGVyaW5nIGlzIGNvbXBsZXRlbHkgaWdub3JlZC4iDQogICAgfSwNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4LCBFbWJ5IG9yIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBVc2Ugb2Ygb25lIG9yIG1vcmUgWE1MVFYgZmlsZXM8YnI+LSBDaGFubmVsIG1hbmFnZW1lbnQ8YnI+LSBNM1UgLyBYTUxUViBleHBvcnQgKEhUVFAgbGluayBmb3IgSVBUViBhcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgVHVuZXJzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiINCiAgICB9LA0KICAgICJmaWxlc1VwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGVzIGFsbCBmaWxlcyBhdCBzdGFydHVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJVcGRhdGVzIGFsbCBwbGF5bGlzdHMsIHR1bmVyIGFuZCBYTUxUViBmaWxlcyBhdCBzdGFydHVwLiINCiAgICB9LA0KICAgICJjYWNoZUltYWdlcyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJbWFnZSBDYWNoaW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBbGwgaW1hZ2VzIGZyb20gdGhlIFhNTFRWIGZpbGUgYXJlIGNhY2hlZCwgYWxsb3dpbmcgZmFzdGVyIHJlbmRlcmluZyBvZiB0aGUgZ3JpZCBpbiB0aGUgY2xpZW50Ljxicj5Eb3dubG9hZGluZyB0aGUgaW1hZ2VzIG1heSB0YWtlIGEgd2hpbGUgYW5kIHdpbGwgYmUgZG9uZSBpbiB0aGUgYmFja2dyb3VuZC4iDQogICAgfSwNCiAgICAicmVwbGFjZUVtcHR5SW1hZ2VzIjogew0KICAgICAgInRpdGxlIjogIlJlcGxhY2UgbWlzc2luZyBwcm9ncmFtIGltYWdlcyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgdGhlIHBvc3RlciBpbiB0aGUgWE1MVFYgcHJvZ3JhbSBpcyBtaXNzaW5nLCB0aGUgY2hhbm5lbCBsb2dvIHdpbGwgYmUgdXNlZC4iDQogICAgfSwNCiAgICAicmVwbGFjZUNoYW5uZWxUaXRsZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJSZXBsYWNlIFBQViBjaGFubmVscyB0aXRsZS9kZXNjIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJVc2UgdGhpcyBpZiB5b3VyIHByb3ZpZGVyIG1hcHMgdGhlIFBQViBldmVudCBuYW1lIHRvIHRoZSBjaGFubmVsIG5hbWUiDQogICAgfSwNCiAgICAiVGhyZWFkZmluQXV0b1VwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBdXRvbWF0aWMgdXBkYXRlIG9mIFRocmVhZGZpbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgYSBuZXcgdmVyc2lvbiBvZiBUaHJlYWRmaW4gaXMgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkLiBUaGUgdXBkYXRlcyBhcmUgZG93bmxvYWRlZCBmcm9tIEdpdEh1Yi4iDQogICAgfSwNCiAgICAic3RyZWFtQnVmZmVyaW5nIjogew0KICAgICAgInRpdGxlIjogIlN0cmVhbSBCdWZmZXIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9ucyBvZiB0aGUgYnVmZmVyOjxicj4tIFRoZSBzdHJlYW0gaXMgcGFzc2VkIGZyb20gRkZtcGVnIG9yIFZMQyB0byBQbGV4LCBFbWJ5LCBKZWxseWZpbiBvciBNM1UgUGxheWVyPGJyPi0gU21hbGwgamVya2luZyBvZiB0aGUgc3RyZWFtcyBjYW4gYmUgY29tcGVuc2F0ZWQ8YnI+LSBITFMgLyBNM1U4IHN1cHBvcnQ8YnI+LSBSVFAgLyBSVFBTIHN1cHBvcnQ8YnI+LSBSZS1zdHJlYW1pbmc8YnI+LSBTZXBhcmF0ZSB0dW5lciBsaW1pdCBmb3IgZWFjaCBwbGF5bGlzdCIsDQogICAgICAiaW5mb19mYWxzZSI6ICJObyBCdWZmZXIgKENsaWVudCBjb25uZWN0cyBkaXJlY3RseSB0byB0aGUgc3RyZWFtaW5nIHNlcnZlcikiLA0KICAgICAgImluZm9fZmZtcGVnIjogIkZGbXBlZyBjb25uZWN0cyB0byB0aGUgc3RyZWFtaW5nIHNlcnZlciIsDQogICAgICAiaW5mb192bGMiOiAiVkxDIGNvbm5lY3RzIHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyIg0KICAgIH0sDQogICAgInVkcHh5Ijogew0KICAgICAgInRpdGxlIjogIlVEUHh5IGFkZHJlc3MiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBhZGRyZXNzIG9mIHlvdXIgVURQeHkgc2VydmVyLiBJZiBzZXQsIGFuZCB0aGUgY2hhbm5lbCBVUkxzIGluIHRoZSBtM3UgaXMgbXVsdGljYXN0LCBUaHJlYWRmaW4gd2lsbCByZXdyaXRlIGl0IHNvIHRoYXQgaXQgaXMgYWNjZXNzZWQgdmlhIHRoZSBVRFB4eSBzZXJ2aWNlLiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiaG9zdDpwb3J0Ig0KICAgIH0sDQogICAgImZmbXBlZ1BhdGgiOiB7DQogICAgICAidGl0bGUiOiAiRkZtcGVnIEJpbmFyeSBQYXRoIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXRoIHRvIEZGbXBlZyBiaW5hcnkuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9mZm1wZWciDQogICAgfSwNCiAgICAiZmZtcGVnT3B0aW9ucyI6IHsNCiAgICAgICJ0aXRsZSI6ICJGRm1wZWcgT3B0aW9ucyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRkZtcGVnIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyINCiAgICB9LA0KICAgICJ2bGNQYXRoIjogew0KICAgICAgInRpdGxlIjogIlZMQyAvIENWTEMgQmluYXJ5IFBhdGgiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBhdGggdG8gVkxDIC8gQ1ZMQyBiaW5hcnkuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9jdmxjIg0KICAgIH0sDQogICAgInZsY09wdGlvbnMiOiB7DQogICAgICAidGl0bGUiOiAiVkxDIC8gQ1ZMQyBPcHRpb25zIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWTEMgLyBDVkxDIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyINCiAgICB9LA0KICAgICJidWZmZXJTaXplIjogew0KICAgICAgInRpdGxlIjogIkJ1ZmZlciBTaXplIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCdWZmZXIgc2l6ZSBpbiBNQi48YnI+TTNVODogSWYgdGhlIFRTIHNlZ21lbnQgc21hbGxlciB0aGVuIHRoZSBidWZmZXIgc2l6ZSwgdGhlIGZpbGUgc2l6ZSBvZiB0aGUgc2VnbWVudCBpcyB1c2VkLiINCiAgICB9LA0KICAgICJzdG9yZUJ1ZmZlckluUkFNIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiU3RvcmUgYnVmZmVyIGluIFJBTSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgd3JpdGUgYnVmZmVyIHRvIFJBTSBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gZGlzayINCiAgICB9LA0KICAgICJsaXN0ZW5pbmdJcCIgOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJMaXN0ZW5pbmcgSVBzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJFbnRlciB0aGUgbGlzdGVuaW5nIElQcyBzZXByYXRlZCBieSBhbiAnOycgZm9yIGV4YW1wbGU6IDEyNy4wLjAuMTsxOTIuMTY4LjIuMSINCiAgICB9LA0KICAgICJmb3JjZUh0dHBzIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiRm9yY2UgSFRUUFMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldpdGggaW1hZ2UgY2FjaGluZyBlbmFibGVkLCBpZiBjaGVja2VkLCB3aWxsIHJld3JpdGUgTTNVIGFuZCBFUEcgdXJscyB0byBpbmNsdWRlIGh0dHBzIHByb3RvY29sIGFzIHdlbGwgYXMgaHR0cHMgcG9ydCAoZGVmYXVsdCBpcyA0NDMpIg0KICAgIH0sDQogICAgImh0dHBzUG9ydCI6DQogICAgew0KICAgICAgInRpdGxlIjogIkhUVFBTIFBvcnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldpdGggaW1hZ2UgY2FjaGluZyBlbmFibGVkLCBwb3J0IHRvIHVzZSBmb3IgZm9yY2luZyBodHRwcy4gRGVmYXVsdCBpcyA0NDMiDQogICAgfSwNCiAgICAiaHR0cHNUaHJlYWRmaW5Eb21haW4iOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQUyBUaHJlYWRmaW4gRG9tYWluIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaXRoIGltYWdlIGNhY2hpbmcgZW5hYmxlZCwgcmV3cml0ZSB0aGUgdGhyZWFkZmluIGlwIGFkZHJlc3MgaW4gdGhlIG0zdSB0byB1c2UgYSBkb21haW4gZm9yIEhUVFBTIG1vZGUuIERvIE5PVCBpbmNsdWRlIGh0dHBzIChleDogc29tZWRvbWFpbi5jb20pIg0KICAgIH0sDQogICAgImh0dHBUaHJlYWRmaW5Eb21haW4iOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJUaHJlYWRmaW4gRG9tYWluIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaXRoIGltYWdlIGNhY2hpbmcgZW5hYmxlZCwgcmV3cml0ZSB0aGUgdGhyZWFkZmluIGlwIGFkZHJlc3MgaW4gdGhlIG0zdSB0byB1c2UgYSBkb21haW4gZm9yIEhUVFAgbW9kZS4gRG8gTk9UIGluY2x1ZGUgaHR0cCAoZXg6IHNvbWVkb21haW4uY29tKSINCiAgICB9LA0KICAgICJlbmFibGVOb25Bc2NpaSI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVuYWJsZSBOb24tQVNDSUkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgYWxsb3cgc3BlY2lhbCBub24gYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgTTNVIGFuZCBFUEcuIERlZmF1bHQgaXMgZGlzYWJsZWQiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDdXN0b21pemUgdGhlIEVQRyBDYXRlZ29yaWVzLiBUaGUgZm9ybWF0IGlzIGtleTp2YWx1ZXxrZXk6dmFsdWUsIHNvIE5ld3M6bmV3c3xTcG9ydHM6c3BvcnRzfE1vdmllczptb3ZpZXMiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllc0NvbG9ycyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIENvbG9ycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9taXplIHRoZSBFUEcgQ2F0ZWdvcnkgY29sb3JzLiBUaGUgZm9ybWF0IGlzIHZhbHVlOmNvbG9yfHZhbHVlOmNvbG9yLCBzbyBuZXdzOnRvbWF0b3xzcG9ydHM6eWVsbG93Z3JlZW58bW92aWVzOnJveWFsYmx1ZSINCiAgICB9LA0KICAgICJidWZmZXJUaW1lb3V0Ijogew0KICAgICAgInRpdGxlIjogIlRpbWVvdXQgZm9yIG5ldyBjbGllbnQgY29ubmVjdGlvbnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBUaHJlYWRmaW4gYnVmZmVyIHdhaXRzIHVudGlsIG5ldyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLiBIZWxwZnVsIGZvciBmYXN0IGNoYW5uZWwgc3dpdGNoaW5nLiBWYWx1ZSBpbiBtaWxsaXNlY29uZHMuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiDQogICAgfSwNCiAgICAidXNlckFnZW50Ijogew0KICAgICAgInRpdGxlIjogIlVzZXIgQWdlbnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZXIgQWdlbnQgZm9yIEhUVFAgcmVxdWVzdHMuIEZvciBldmVyeSBIVFRQIGNvbm5lY3Rpb24sIHRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIHVzZXIgYWdlbnQuIFNob3VsZCBvbmx5IGJlIGNoYW5nZWQgaWYgVGhyZWFkZmluIGlzIGJsb2NrZWQuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJUaHJlYWRmaW4iDQogICAgfSwNCiAgICAiYmFja3VwUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgYXV0b21hdGljIGJhY2t1cHMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQmVmb3JlIGFueSB1cGRhdGUgb2YgdGhlIHByb3ZpZGVyIGRhdGEgYnkgdGhlIHNjaGVkdWxlLCBUaHJlYWRmaW4gY3JlYXRlcyBhIGJhY2t1cC4gVGhlIHBhdGggZm9yIHRoZSBhdXRvbWF0aWMgYmFja3VwcyBjYW4gYmUgY2hhbmdlZC4gVGhyZWFkZmluIHJlcXVpcmVzIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoaXMgZm9sZGVyLiINCiAgICB9LA0KICAgICJ0ZW1wUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiL3RtcC90aHJlYWRmaW4vIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiBmb3IgdGhlIGJ1ZmZlciBmaWxlcy4iDQogICAgfSwNCiAgICAiYmFja3VwS2VlcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwLiBPbGRlciBiYWNrdXBzIGFyZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQuIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogew0KICAgICAgInRpdGxlIjogIldFQiBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSB3ZWIgaW50ZXJmYWNlIG9ubHkgcG9zc2libGUgd2l0aCBjcmVkZW50aWFscy4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25QTVMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uIDxicj48Yj5XYXJuaW5nISEhPC9iPiBBZnRlciBhY3RpdmF0aW5nIHRoaXMgZnVuY3Rpb24gVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQTVMgRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uTTNVIjogew0KICAgICAgInRpdGxlIjogIk0zVSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRG93bmxvYWRpbmcgdGhlIHRocmVhZGZpbi5tM3UgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25YTUwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEb3dubG9hZGluZyB0aGUgdGhyZWFkZmluLnhtbCBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uQVBJIjogew0KICAgICAgInRpdGxlIjogIkFQSSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSBBUEkgaW50ZXJmYWNlIGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfQ0KICB9LA0KICAid2l6YXJkIjogew0KICAgICJlcGdTb3VyY2UiOiB7DQogICAgICAidGl0bGUiOiAiRVBHIFNvdXJjZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUE1TOjxicj4tIFVzZSBFUEcgZGF0YSBmcm9tIFBsZXgsIEVtYnkgb3IgSmVsbHlmaW4gPGJyPjxicj5YRVBHOjxicj4tIFVzZSBvZiBvbmUgb3IgbW9yZSBYTUxUViBmaWxlczxicj4tIENoYW5uZWwgbWFuYWdlbWVudDxicj4tIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpIg0KICAgIH0sDQogICAgInR1bmVyIjogew0KICAgICAgInRpdGxlIjogIk51bWJlciBvZiB0dW5lcnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBwYXJhbGxlbCBjb25uZWN0aW9ucyB0aGF0IGNhbiBiZSBlc3RhYmxpc2hlZCB0byB0aGUgcHJvdmlkZXIuPGJyPkF2YWlsYWJsZSBmb3I6IFBsZXgsIEVtYnksIEplbGx5ZmluLCBNM1UgKHdpdGggYWN0aXZlIGJ1ZmZlcikuPGJyPkFmdGVyIGEgY2hhbmdlLCBUaHJlYWRmaW4gbXVzdCBiZSBkZWxldGUgaW4gdGhlIFBsZXggLyBFbWJ5IC8gSmVsbHlmaW4gRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIg0KICAgIH0sDQogICAgIm0zdSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UgUGxheWxpc3QiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIE0zVSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIHBsYXlsaXN0cyINCiAgICB9LA0KICAgICJ4bWx0diI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBYTUxUViIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIFhNTFRWIGZpbGUiDQogICAgfQ0KICB9LA0KICAibG9naW4iOiB7DQogICAgImZhaWxlZCI6ICJVc2VyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIsDQogICAgImhlYWRsaW5lIjogIkxvZ2luIiwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlVzZXJuYW1lIg0KICAgIH0sDQogICAgInBhc3N3b3JkIjogew0KICAgICAgInRpdGxlIjogIlBhc3N3b3JkIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCINCiAgICB9DQogIH0sDQogICJhY2NvdW50Ijogew0KICAgICJmYWlsZWQiOiAiUGFzc3dvcmQgZG9lcyBub3QgbWF0Y2giLA0KICAgICJoZWFkbGluZSI6ICJDcmVhdGUgdXNlciBhY2NvdW50IiwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlVzZXJuYW1lIg0KICAgIH0sDQogICAgInBhc3N3b3JkIjogew0KICAgICAgInRpdGxlIjogIlBhc3N3b3JkIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCINCiAgICB9LA0KICAgICJjb25maXJtIjogew0KICAgICAgInRpdGxlIjogIkNvbmZpcm0iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkNvbmZpcm0iDQogICAgfQ0KICB9DQp9" } diff --git a/src/webserver.go b/src/webserver.go index fac53e8..f1022bb 100644 --- a/src/webserver.go +++ b/src/webserver.go @@ -27,7 +27,7 @@ func StartWebserver() (err error) { http.HandleFunc("/stream/", Stream) http.HandleFunc("/xmltv/", Threadfin) http.HandleFunc("/m3u/", Threadfin) - http.HandleFunc("/data/", WS) + http.HandleFunc("/ws/", WS) http.HandleFunc("/web/", Web) http.HandleFunc("/download/", Download) http.HandleFunc("/api/", API) @@ -55,22 +55,37 @@ func StartWebserver() (err error) { if customIps != nil { showHighlight("Webserver is restricted to listen to this address(es):") for _, ip := range customIps { - showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol.WEB, ip, Settings.Port)) + showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol, ip, Settings.Port)) } } else { for _, ip := range System.IPAddressesV4 { - showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol.WEB, ip, Settings.Port)) + showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol, ip, Settings.Port)) } for _, ip := range System.IPAddressesV6 { - showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol.WEB, ip, Settings.Port)) + showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol, ip, Settings.Port)) } } - if err = http.ListenAndServe(":"+port, nil); err != nil { - ShowError(err, 1001) - return + + + + if Settings.UseHttps { + go func () { + if err = http.ListenAndServeTLS(":" + port, System.Folder.Config + "server.crt", System.Folder.Config + "server.key", nil); err != nil { + ShowError(err, 1001) + return + } + } () + } else { + go func () { + if err = http.ListenAndServe(":" + port, nil); err != nil { + ShowError(err, 1001) + return + } + }() } - return + + select {} } func checkForRestriction(w http.ResponseWriter, r *http.Request) error{ @@ -101,12 +116,6 @@ func Index(w http.ResponseWriter, r *http.Request) { return } - if Settings.HttpThreadfinDomain != "" { - setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port)) - } else { - setGlobalDomain(r.Host) - } - debug = fmt.Sprintf("Web Server Request:Path: %s", path) showDebug(debug, 2) @@ -205,15 +214,22 @@ func Stream(w http.ResponseWriter, r *http.Request) { return } - if Settings.ForceHttps { + if Settings.ForceHttpsToUpstream { u, err := url.Parse(streamInfo.URL) if err == nil { - u.Scheme = "https" + var streamURL = "https" host_split := strings.Split(u.Host, ":") if len(host_split) > 0 { - u.Host = host_split[0] + streamURL += "://" + host_split[0] + } + if len(host_split) > 1 { + streamURL += ":" + host_split[1] + } + if u.RawQuery != ""{ + streamInfo.URL = fmt.Sprintf("%s%s?%s", streamURL, u.Path, u.RawQuery) + } else { + streamInfo.URL = streamURL + u.Path } - streamInfo.URL = fmt.Sprintf("https://%s:%d%s", u.Host, Settings.HttpsPort, u.Path) } } @@ -314,12 +330,6 @@ func Threadfin(w http.ResponseWriter, r *http.Request) { return } - if Settings.HttpThreadfinDomain != "" { - setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port)) - } else { - setGlobalDomain(r.Host) - } - // XMLTV Datei if strings.Contains(path, "xmltv/") { @@ -436,6 +446,11 @@ func DataImages(w http.ResponseWriter, r *http.Request) { w.Write(content) } +var upgrader = websocket.Upgrader{ + ReadBufferSize: 1024, + WriteBufferSize: 1024, +} + // WS : Web Sockets /ws/ func WS(w http.ResponseWriter, r *http.Request) { @@ -452,32 +467,27 @@ func WS(w http.ResponseWriter, r *http.Request) { var newToken string - /* - if r.Header.Get("Origin") != "http://"+r.Host { - httpStatusError(w, r, 403) - return - } - */ - - conn, err := websocket.Upgrade(w, r, w.Header(), 1024, 1024) + // Upgrade connection to websocket connection + conn, err := upgrader.Upgrade(w, r, w.Header()) if err != nil { ShowError(err, 0) http.Error(w, "Could not open websocket connection", http.StatusBadRequest) return } - if Settings.HttpThreadfinDomain != "" { - setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port)) - } else { - setGlobalDomain(r.Host) - } - for { - err = conn.ReadJSON(&request) + _, msgBytes, err := conn.ReadMessage() + if err != nil { + ShowError(err, 11103) + break + } + + err = json.Unmarshal(msgBytes, &request) if err != nil { - return + ShowError(err, 1120) + break } if !System.ConfigurationWizard { @@ -537,6 +547,7 @@ func WS(w http.ResponseWriter, r *http.Request) { // Daten schreiben case "saveSettings": + showInfo("WEB:Saving settings") var authenticationUpdate = Settings.AuthenticationWEB var previousStoreBufferInRAM = Settings.StoreBufferInRAM response.Settings, err = updateServerSettings(request) @@ -547,7 +558,7 @@ func WS(w http.ResponseWriter, r *http.Request) { if Settings.AuthenticationWEB && !authenticationUpdate { response.Reload = true } - + if Settings.StoreBufferInRAM != previousStoreBufferInRAM { initBufferVFS(Settings.StoreBufferInRAM) } @@ -628,7 +639,7 @@ func WS(w http.ResponseWriter, r *http.Request) { file, errNew := ThreadfinBackup() err = errNew if err == nil { - response.OpenLink = fmt.Sprintf("%s://%s/download/%s", System.ServerProtocol.WEB, System.Domain, file) + response.OpenLink = fmt.Sprintf("%s://%s/download/%s", System.ServerProtocol, System.Domain, file) } case "ThreadfinRestore": @@ -741,12 +752,6 @@ func Web(w http.ResponseWriter, r *http.Request) { return } - if Settings.HttpThreadfinDomain != "" { - setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port)) - } else { - setGlobalDomain(r.Host) - } - if System.Dev { lang, err = loadJSONFileToMap(fmt.Sprintf("html/lang/%s.json", Settings.Language)) @@ -967,11 +972,6 @@ func API(w http.ResponseWriter, r *http.Request) { } */ - if Settings.HttpThreadfinDomain != "" { - setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port)) - } else { - setGlobalDomain(r.Host) - } var request APIRequestStruct var response APIResponseStruct @@ -1063,8 +1063,8 @@ func API(w http.ResponseWriter, r *http.Request) { response.StreamsXepg = int64(Data.XEPG.XEPGCount) response.EpgSource = Settings.EpgSource response.URLDvr = System.Domain - response.URLM3U = System.ServerProtocol.M3U + "://" + System.Domain + "/m3u/threadfin.m3u" - response.URLXepg = System.ServerProtocol.XML + "://" + System.Domain + "/xmltv/threadfin.xml" + response.URLM3U = System.ServerProtocol + "://" + System.Domain + "/m3u/threadfin.m3u" + response.URLXepg = System.ServerProtocol + "://" + System.Domain + "/xmltv/threadfin.xml" case "update.m3u": err = getProviderData("m3u", "") diff --git a/src/xepg.go b/src/xepg.go index 2783fc7..3ce6c4a 100644 --- a/src/xepg.go +++ b/src/xepg.go @@ -7,7 +7,6 @@ import ( "encoding/xml" "errors" "fmt" - "io/ioutil" "log" "path" "regexp" @@ -51,7 +50,7 @@ func buildXEPG(background bool) { var err error - Data.Cache.Images, err = imgcache.New(System.Folder.ImagesCache, fmt.Sprintf("%s://%s/images/", System.ServerProtocol.WEB, System.Domain), Settings.CacheImages) + Data.Cache.Images = imgcache.NewImageCache(Settings.CacheImages, System.Folder.ImagesCache, System.BaseURL) if err != nil { ShowError(err, 0) } @@ -64,6 +63,7 @@ func buildXEPG(background bool) { go func() { + Data.Cache.Images.DeleteCache() createXEPGMapping() createXEPGDatabase() mapping() @@ -78,10 +78,12 @@ func buildXEPG(background bool) { go func() { System.ImageCachingInProgress = 1 - showInfo(fmt.Sprintf("Image Caching:Images are cached (%d)", len(Data.Cache.Images.Queue))) + Data.Cache.Images.WaitForDownloads() + showInfo(fmt.Sprintf("Image Caching:Images are cached (%d)", Data.Cache.Images.GetNumCachedImages())) + + //Data.Cache.Images.Image.Caching() + //Data.Cache.Images.Image.Remove() - Data.Cache.Images.Image.Caching() - Data.Cache.Images.Image.Remove() showInfo("Image Caching:Done") createXMLTVFile() @@ -106,6 +108,7 @@ func buildXEPG(background bool) { case false: + Data.Cache.Images.DeleteCache() createXEPGMapping() createXEPGDatabase() mapping() @@ -120,10 +123,11 @@ func buildXEPG(background bool) { go func() { System.ImageCachingInProgress = 1 - showInfo(fmt.Sprintf("Image Caching:Images are cached (%d)", len(Data.Cache.Images.Queue))) + Data.Cache.Images.WaitForDownloads() + showInfo(fmt.Sprintf("Image Caching:Images are cached (%d)", Data.Cache.Images.GetNumCachedImages())) - Data.Cache.Images.Image.Caching() - Data.Cache.Images.Image.Remove() + //Data.Cache.Images.Image.Caching() + //Data.Cache.Images.Image.Remove() showInfo("Image Caching:Done") createXMLTVFile() @@ -249,7 +253,7 @@ func createXEPGMapping() { // XML Parsen (Provider Datei) if err == nil { - var imgc = Data.Cache.Images + //var imgc = Data.Cache.Images // Daten aus der XML Datei in eine temporäre Map schreiben var xmltvMap = make(map[string]interface{}) @@ -258,7 +262,7 @@ func createXEPGMapping() { channel["id"] = c.ID channel["display-name"] = friendlyDisplayName(*c) - channel["icon"] = imgc.Image.GetURL(c.Icon.Src, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain) + channel["icon"] = Data.Cache.Images.GetImageURL(c.Icon.Src) channel["active"] = c.Active xmltvMap[c.ID] = channel @@ -492,8 +496,8 @@ func createXEPGDatabase() (err error) { // Kanallogo aktualisieren. Wird bei vorhandenem Logo in der XMLTV Datei wieder überschrieben if xepgChannel.XUpdateChannelIcon { - var imgc = Data.Cache.Images - xepgChannel.TvgLogo = imgc.Image.GetURL(m3uChannel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain) + //var imgc = Data.Cache.Images + xepgChannel.TvgLogo = Data.Cache.Images.GetImageURL(m3uChannel.TvgLogo) } Data.XEPG.Channels[currentXEPGID] = xepgChannel @@ -716,8 +720,8 @@ func mapping() (err error) { if logo, ok := channel["icon"].(string); ok { if xepgChannel.XUpdateChannelIcon && len(logo) > 0 { - var imgc = Data.Cache.Images - xepgChannel.TvgLogo = imgc.Image.GetURL(logo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain) + //var imgc = Data.Cache.Images + xepgChannel.TvgLogo = Data.Cache.Images.GetImageURL(logo) } } @@ -771,24 +775,6 @@ func createXMLTVFile() (err error) { // Image Cache // 4edd81ab7c368208cc6448b615051b37.jpg - var imgc = Data.Cache.Images - - Data.Cache.ImagesFiles = []string{} - Data.Cache.ImagesURLS = []string{} - Data.Cache.ImagesCache = []string{} - - files, err := ioutil.ReadDir(System.Folder.ImagesCache) - if err == nil { - - for _, file := range files { - - if indexOfString(file.Name(), Data.Cache.ImagesCache) == -1 { - Data.Cache.ImagesCache = append(Data.Cache.ImagesCache, file.Name()) - } - - } - - } if len(Data.XMLTV.Files) == 0 && len(Data.Streams.Active) == 0 { Data.XEPG.Channels = make(map[string]interface{}) @@ -825,7 +811,7 @@ func createXMLTVFile() (err error) { // Kanäle var channel Channel channel.ID = xepgChannel.XChannelID - channel.Icon = Icon{Src: imgc.Image.GetURL(xepgChannel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)} + channel.Icon = Icon{Src: Data.Cache.Images.GetImageURL(xepgChannel.TvgLogo)} channel.DisplayName = append(channel.DisplayName, DisplayName{Value: xepgChannel.XName}) channel.Active = xepgChannel.XActive channel.Live = true @@ -924,7 +910,7 @@ func getProgramData(xepgChannel XEPGChannelStruct) (xepgXML XMLTV, err error) { program.Country = xmltvProgram.Country // Program icon (Poster / Cover) - getPoster(program, xmltvProgram, xepgChannel, Settings.ForceHttps) + getPoster(program, xmltvProgram, xepgChannel) // Language (Sprache) program.Language = xmltvProgram.Language @@ -1030,7 +1016,7 @@ func createDummyProgram(xepgChannel XEPGChannelStruct) (dummyXMLTV XMLTV) { return } - var imgc = Data.Cache.Images + //var imgc = Data.Cache.Images var currentTime = time.Now() var dateArray = strings.Fields(currentTime.String()) var offset = " " + dateArray[2] @@ -1073,7 +1059,7 @@ func createDummyProgram(xepgChannel XEPGChannelStruct) (dummyXMLTV XMLTV) { } if Settings.XepgReplaceMissingImages { - poster.Src = imgc.Image.GetURL(xepgChannel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain) + poster.Src = Data.Cache.Images.GetImageURL(xepgChannel.TvgLogo) epg.Poster = append(epg.Poster, poster) } @@ -1116,12 +1102,12 @@ func getCategory(program *Program, xmltvProgram *Program, xepgChannel XEPGChanne } // Programm Poster Cover aus der XMLTV Datei laden -func getPoster(program *Program, xmltvProgram *Program, xepgChannel XEPGChannelStruct, forceHttps bool) { +func getPoster(program *Program, xmltvProgram *Program, xepgChannel XEPGChannelStruct) { - var imgc = Data.Cache.Images + //var imgc = Data.Cache.Images for _, poster := range xmltvProgram.Poster { - poster.Src = imgc.Image.GetURL(poster.Src, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain) + poster.Src = Data.Cache.Images.GetImageURL(poster.Src) program.Poster = append(program.Poster, poster) } @@ -1129,7 +1115,7 @@ func getPoster(program *Program, xmltvProgram *Program, xepgChannel XEPGChannelS if len(xmltvProgram.Poster) == 0 { var poster Poster - poster.Src = imgc.Image.GetURL(xepgChannel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain) + poster.Src = Data.Cache.Images.GetImageURL(xepgChannel.TvgLogo) program.Poster = append(program.Poster, poster) } @@ -1225,9 +1211,9 @@ func createM3UFile() { _, err := buildM3U([]string{}) if err != nil { ShowError(err, 000) + } else { + showInfo("XEPG:Created M3U file") } - - saveMapToJSONFile(System.File.URLS, Data.Cache.StreamingURLS) } // XEPG Datenbank bereinigen diff --git a/threadfin.go b/threadfin.go index 4ac40c8..ae3ed7e 100644 --- a/threadfin.go +++ b/threadfin.go @@ -40,20 +40,21 @@ var GitHub = GitHubStruct{Branch: "Main", User: "marcelGoerentz", Repo: "Threadf const Name = "Threadfin" // Version : Version, die Build Nummer wird in der main func geparst. -const Version = "1.1.15" +const Version = "1.2.0" // DBVersion : Datanbank Version const DBVersion = "0.5.0" // APIVersion : API Version -const APIVersion = "1.1.15" +const APIVersion = "1.2.0" var homeDirectory = fmt.Sprintf("%s%s.%s%s", src.GetUserHomeDirectory(), string(os.PathSeparator), strings.ToLower(Name), string(os.PathSeparator)) var samplePath = fmt.Sprintf("%spath%sto%sthreadfin%s", string(os.PathSeparator), string(os.PathSeparator), string(os.PathSeparator), string(os.PathSeparator)) var sampleRestore = fmt.Sprintf("%spath%sto%sfile%s", string(os.PathSeparator), string(os.PathSeparator), string(os.PathSeparator), string(os.PathSeparator)) var configFolder = flag.String("config", "", ": Config Folder ["+samplePath+"] (default: "+homeDirectory+")") -var port = flag.String("port", "", ": Server port [34400] (default: 34400)") +var port = flag.Int("port", 34400, ": Server port") +var useHttps = flag.Bool("useHttps", false , ": Use Https Webserver [place server.crt and server.key in config folder]") var restore = flag.String("restore", "", ": Restore from backup ["+sampleRestore+"threadfin_backup.zip]") var gitBranch = flag.String("branch", "", ": Git Branch [main|beta] (default: main)") @@ -141,10 +142,13 @@ func main() { } // Webserver Port - if len(*port) > 0 { - system.Flag.Port = *port + if *port != 0 { + system.Flag.Port = fmt.Sprintf("%d", *port) } + // Https Webserver + system.Flag.UseHttps = *useHttps + // Branch system.Flag.Branch = *gitBranch if len(system.Flag.Branch) > 0 { diff --git a/ts/banner.ts b/ts/banner.ts new file mode 100644 index 0000000..4af6320 --- /dev/null +++ b/ts/banner.ts @@ -0,0 +1,46 @@ +const bannerElement = document.querySelector('.banner') as HTMLElement; // Banner-Element auswählen + +async function getNewestReleaseFromGithub() { + + const releasesData = await getReleases(); + if (releasesData) { + const releases: Release[] = releasesData.map((release: any) => ({ + tag_name: release.tag_name, + })); + // Get tag name + var release_tag = releases[0]["tag_name"]; + const regex = /[^\d]/gi; + // Create Number from tag name + const latest_version = Number(release_tag.replace(regex, '')); + const version_elemnt = document.getElementById('version') as HTMLInputElement; + const current_version = Number(version_elemnt.value.replace(regex, '')); + if (latest_version > current_version) { + bannerElement.style.display = 'block'; // Show Banner if newer version is available + } + + } else { + console.log('Error fetching releases or no releases found.'); + } +} + +async function getReleases(): Promise { + try { + const response = await fetch('https://api.github.com/repos/marcelGoerentz/Threadfin/releases'); + if (!response.ok) { + throw new Error(`Error fetching releases. Status: ${response.status}`); + } + const releases = await response.json(); + return releases; + } catch (error) { + console.error('Error fetching releases:', error); + return null; + } +} + +interface Release { + name: string; + tag_name: string; + published_at: string; + // Add other relevant properties as needed +} + diff --git a/ts/base_ts.ts b/ts/base_ts.ts index a8c8c5c..25d892b 100644 --- a/ts/base_ts.ts +++ b/ts/base_ts.ts @@ -46,8 +46,8 @@ menuItems.push(new MainMenuItem("logout", "{{.mainMenu.item.logout}}", "logout.p // Kategorien für die Einstellungen var settingsCategory = new Array() settingsCategory.push(new SettingsCategoryItem("{{.settings.category.general}}", "ThreadfinAutoUpdate,ssdp,tuner,epgSource,epgCategories,epgCategoriesColors,dummy,dummyChannel,ignoreFilters,api")) -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,,xepg.replace.missing.images,xepg.replace.channel.title,enableNonAscii")) -settingsCategory.push(new SettingsCategoryItem("{{.settings.category.network}}", "listeningIp,httpThreadfinDomain,forceHttps,httpsPort,httpsThreadfinDomain")) +settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,omitPorts,xepg.replace.missing.images,xepg.replace.channel.title,enableNonAscii")) +settingsCategory.push(new SettingsCategoryItem("{{.settings.category.network}}", "listeningIp,threadfinDomain,useHttps,forceClientHttps,forceHttps")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,udpxy,buffer.size.kb,storeBufferInRAM,buffer.timeout,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.authentication}}", "authentication.web,authentication.pms,authentication.m3u,authentication.xml,authentication.api")) diff --git a/ts/menu_ts.ts b/ts/menu_ts.ts index 211f0d6..5daba50 100644 --- a/ts/menu_ts.ts +++ b/ts/menu_ts.ts @@ -1091,6 +1091,7 @@ function PageReady() { updateLog() }, 10000); + getNewestReleaseFromGithub() return } diff --git a/ts/network_ts.ts b/ts/network_ts.ts index 4b0730d..facf2b0 100644 --- a/ts/network_ts.ts +++ b/ts/network_ts.ts @@ -8,9 +8,9 @@ class Server { request(data: Object): any { - if (SERVER_CONNECTION == true) { - return - } + //if (SERVER_CONNECTION == true) { + // return + //} SERVER_CONNECTION = true @@ -29,7 +29,7 @@ class Server { break } - var url = this.protocol + window.location.hostname + ":" + window.location.port + "/data/" + "?Token=" + getCookie("Token") + var url = this.protocol + window.location.hostname + ":" + window.location.port + "/ws/" + "?Token=" + getCookie("Token") data["cmd"] = this.cmd var ws = new WebSocket(url) diff --git a/ts/settings_ts.ts b/ts/settings_ts.ts index 0f65434..be19fd8 100644 --- a/ts/settings_ts.ts +++ b/ts/settings_ts.ts @@ -145,19 +145,19 @@ class SettingsCategory { setting.appendChild(tdRight) break - case "listeningIp": - var tdLeft = document.createElement("TD") - tdLeft.innerHTML = "{{.settings.listeningIp.title}}" + ":" - - var tdRight = document.createElement("TD") - var input = content.createInput("text", "listeningIp", data) - input.setAttribute("placeholder", "{{.settings.listeningIp.placeholder}}") - input.setAttribute("onchange", "javascript: this.className = 'changed'") - tdRight.appendChild(input) - - setting.appendChild(tdLeft) - setting.appendChild(tdRight) - break + case "listeningIp": + var tdLeft = document.createElement("TD") + tdLeft.innerHTML = "{{.settings.listeningIp.title}}" + ":" + + var tdRight = document.createElement("TD") + var input = content.createInput("text", "listeningIp", data) + input.setAttribute("placeholder", "{{.settings.listeningIp.placeholder}}") + input.setAttribute("onchange", "javascript: this.className = 'changed'") + tdRight.appendChild(input) + + setting.appendChild(tdLeft) + setting.appendChild(tdRight) + break // Checkboxen case "authentication.web": @@ -300,6 +300,20 @@ class SettingsCategory { setting.appendChild(tdRight) break + case "omitPorts": + var tdLeft = document.createElement("TD") + tdLeft.innerHTML = "{{.settings.omitPorts.title}}" + ":" + + var tdRight = document.createElement("TD") + var input = content.createCheckbox(settingsKey) + input.checked = data + input.setAttribute("onchange", "javascript: this.className = 'changed'") + tdRight.appendChild(input) + + setting.appendChild(tdLeft) + setting.appendChild(tdRight) + break + case "forceHttps": var tdLeft = document.createElement("TD") tdLeft.innerHTML = "{{.settings.forceHttps.title}}" + ":" @@ -314,44 +328,58 @@ class SettingsCategory { setting.appendChild(tdRight) break - case "httpsPort": - var tdLeft = document.createElement("TD") - tdLeft.innerHTML = "{{.settings.httpsPort.title}}" + ":" - - var tdRight = document.createElement("TD") - var input = content.createInput("text", "httpsPort", data.toString()) - input.setAttribute("placeholder", "{{.settings.httpsPort.placeholder}}") - input.setAttribute("onchange", "javascript: this.className = 'changed'") - tdRight.appendChild(input) - - setting.appendChild(tdLeft) - setting.appendChild(tdRight) - break + case "useHttps": + var tdLeft = document.createElement("TD") + tdLeft.innerHTML = "{{.settings.useHttps.title}}" + ":" + + var tdRight = document.createElement("TD") + var input = content.createCheckbox(settingsKey) + input.checked = data + input.setAttribute("onchange", "javascript: this.className = 'changed'") + tdRight.appendChild(input) - case "httpsThreadfinDomain": + setting.appendChild(tdLeft) + setting.appendChild(tdRight) + break + + case "forceClientHttps": + var tdLeft = document.createElement("TD") + tdLeft.innerHTML = "{{.settings.forceClientHttps.title}}" + ":" + + var tdRight = document.createElement("TD") + var input = content.createCheckbox(settingsKey) + input.checked = data + input.setAttribute("onchange", "javascript: this.className = 'changed'") + tdRight.appendChild(input) + + setting.appendChild(tdLeft) + setting.appendChild(tdRight) + break + + case "threadfinDomain": var tdLeft = document.createElement("TD") - tdLeft.innerHTML = "{{.settings.httpsThreadfinDomain.title}}" + ":" + tdLeft.innerHTML = "{{.settings.threadfinDomain.title}}" + ":" var tdRight = document.createElement("TD") - var input = content.createInput("text", "httpsThreadfinDomain", data.toString()) - input.setAttribute("placeholder", "{{.settings.httpsThreadfinDomain.placeholder}}") + var input = content.createInput("text", "threadfinDomain", data.toString()) + input.setAttribute("placeholder", "{{.settings.threadfinDomain.placeholder}}") input.setAttribute("onchange", "javascript: this.className = 'changed'") tdRight.appendChild(input) setting.appendChild(tdLeft) setting.appendChild(tdRight) break - - case "httpThreadfinDomain": + + case "domainUseHttps": var tdLeft = document.createElement("TD") - tdLeft.innerHTML = "{{.settings.httpThreadfinDomain.title}}" + ":" + tdLeft.innerHTML = "{{.settings.domainUseHttps.title}}" + ":" var tdRight = document.createElement("TD") - var input = content.createInput("text", "httpThreadfinDomain", data.toString()) - input.setAttribute("placeholder", "{{.settings.httpThreadfinDomain.placeholder}}") + var input = content.createCheckbox(settingsKey) + input.checked = data input.setAttribute("onchange", "javascript: this.className = 'changed'") tdRight.appendChild(input) - + setting.appendChild(tdLeft) setting.appendChild(tdRight) break @@ -652,20 +680,24 @@ class SettingsCategory { text = "{{.settings.storeBufferInRAM.description}}" break + case "omitPorts": + text = "{{.settings.omitPorts.description}}" + break + case "forceHttps": text = "{{.settings.forceHttps.description}}" break - case "httpsPort": - text = "{{.settings.httpsPort.description}}" + case "useHttps": + text = "{{.settings.useHttps.description}}" break - case "httpsThreadfinDomain": - text = "{{.settings.httpsThreadfinDomain.description}}" - break + case "forceClientHttps": + text = "{{.settings.forceClientHttps.description}}" + break - case "httpThreadfinDomain": - text = "{{.settings.httpThreadfinDomain.description}}" + case "threadfinDomain": + text = "{{.settings.threadfinDomain.description}}" break case "enableNonAscii": @@ -865,12 +897,11 @@ function saveSettings() { case "buffer.timeout": value = parseFloat(value) - } newSettings[name] = value break - } + } break