diff --git a/BetterDiscordApp/js/main.js b/BetterDiscordApp/js/main.js index f337f30..649e2b7 100644 --- a/BetterDiscordApp/js/main.js +++ b/BetterDiscordApp/js/main.js @@ -95,7 +95,7 @@ module.exports = /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minimumDiscordVersion\", function() { return minimumDiscordVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"currentDiscordVersion\", function() { return currentDiscordVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minSupportedVersion\", function() { return minSupportedVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bbdVersion\", function() { return bbdVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bbdChangelog\", function() { return bbdChangelog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return settings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultCookie\", function() { return defaultCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settingsCookie\", function() { return settingsCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settingsRPC\", function() { return settingsRPC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultRPC\", function() { return defaultRPC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdpluginErrors\", function() { return bdpluginErrors; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdthemeErrors\", function() { return bdthemeErrors; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdConfig\", function() { return bdConfig; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdthemes\", function() { return bdthemes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdplugins\", function() { return bdplugins; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pluginCookie\", function() { return pluginCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"themeCookie\", function() { return themeCookie; });\n// var settingsPanel, voiceMode, pluginModule, themeModule, dMode, publicServersModule, mainCore, BDV2;\nconst minimumDiscordVersion = \"0.0.306\";\nconst currentDiscordVersion = window.DiscordNative && window.DiscordNative.remoteApp && window.DiscordNative.remoteApp.getVersion && window.DiscordNative.remoteApp.getVersion() || \"0.0.306\";\nconst minSupportedVersion = \"0.3.0\";\nconst bbdVersion = \"0.3.4\";\nconst bbdChangelog = {\n description: \"LightCord Edition.\",\n changes: [{\n title: \"What's New?\",\n items: [\"**LightCord** is now using BandagedBD. That means all plugins you were using can be used too !\", \"**Window Transparency** changes were made to more compatible with external window managers and addons like Glasscord.\", \"Initialization sequence has once again been changed slightly to hopefully improve loading times.\", \"We removed emotes. That's sad for people who were actually using it, but it was leading to more loading time and some basic words were emote.\"]\n }, {\n title: \"Bug Fixes\",\n type: \"fixed\",\n items: [\"Some fixes related to showing modals in the `BdApi`.\"]\n }]\n};\nconst settings = {\n \"Custom css live update\": {\n id: \"bda-css-0\",\n info: \"\",\n implemented: true,\n hidden: true,\n cat: \"core\"\n },\n \"Custom css auto udpate\": {\n id: \"bda-css-1\",\n info: \"\",\n implemented: true,\n hidden: true,\n cat: \"core\"\n },\n \"BetterDiscord Blue\": {\n id: \"bda-gs-b\",\n info: \"Replace Discord blue with BD Blue\",\n implemented: false,\n hidden: false,\n cat: \"core\"\n },\n\n /* Core */\n\n /* ====== */\n \"Public Servers\": {\n id: \"bda-gs-1\",\n info: \"Display public servers button\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Minimal Mode\": {\n id: \"bda-gs-2\",\n info: \"Hide elements and reduce the size of elements.\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Voice Mode\": {\n id: \"bda-gs-4\",\n info: \"Only show voice chat\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Hide Channels\": {\n id: \"bda-gs-3\",\n info: \"Hide channels in minimal mode\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Dark Mode\": {\n id: \"bda-gs-5\",\n info: \"Make certain elements dark by default(wip)\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Voice Disconnect\": {\n id: \"bda-dc-0\",\n info: \"Disconnect from voice server when closing Discord\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"24 Hour Timestamps\": {\n id: \"bda-gs-6\",\n info: \"Replace 12hr timestamps with proper ones\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Colored Text\": {\n id: \"bda-gs-7\",\n info: \"Make text color the same as role color\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Normalize Classes\": {\n id: \"fork-ps-4\",\n info: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n\n /* Content */\n \"Content Error Modal\": {\n id: \"fork-ps-1\",\n info: \"Shows a modal with plugin/theme errors\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"content manager\"\n },\n \"Show Toasts\": {\n id: \"fork-ps-2\",\n info: \"Shows a small notification for important information\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"content manager\"\n },\n \"Scroll To Settings\": {\n id: \"fork-ps-3\",\n info: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"content manager\"\n },\n \"Automatic Loading\": {\n id: \"fork-ps-5\",\n info: \"Automatically loads, reloads, and unloads plugins and themes\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"content manager\"\n },\n\n /* Developer */\n \"Developer Mode\": {\n id: \"bda-gs-8\",\n info: \"Developer Mode Toggle\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"developer settings\"\n },\n \"Copy Selector\": {\n id: \"fork-dm-1\",\n info: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"developer settings\"\n },\n \"React DevTools\": {\n id: \"reactDevTools\",\n info: \"Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.\",\n implemented: true,\n hidden: true,\n cat: \"core\",\n category: \"developer settings\"\n },\n\n /** LightCord */\n \"Disable BetterDiscord\": {\n id: \"bd-disable\",\n info: \"Disable Betterdiscord (plugins, themes, etc).\",\n implemented: false,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Blur Personnal Informations\": {\n id: \"lightcord-6\",\n info: \"Blur sensitive informations like email, payment infos and more.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Calling Ring Beat\": {\n id: \"lightcord-2\",\n info: \"Enable Discord's special calling beat.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Developer Options\": {\n id: \"lightcord-1\",\n info: \"Enable Discord's Internal Developer Options. This allow the \\\"Experiments\\\" tab and the \\\"Developer Options\\\" tab. (must close and reopen settings)\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Ad Block\": {\n id: \"lightcord-4\",\n info: \"Block any BOT that dm you with an invite link. Even in an embed.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Enable Lightcord Servers\": {\n id: \"lightcord-5\",\n info: \"Disabling it erase any informations about you in our servers. But you won't see anything like custom badges.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n\n /** Lightcord Window */\n \"Always-on-Top\": {\n id: \"lightcord-3\",\n info: \"Enable window's Always-on-Top mode, where Lightcord stays on top of other applications.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Window\"\n },\n\n /** RichPresence */\n \"Enable\": {\n id: \"lightcord-presence-1\",\n info: \"Enable RichPresence below.\",\n implemented: true,\n hidden: false,\n cat: \"status\"\n }\n};\nconst defaultCookie = {\n \"bda-gs-1\": true,\n \"bda-gs-2\": false,\n \"bda-gs-3\": false,\n \"bda-gs-4\": false,\n \"bda-gs-5\": true,\n \"bda-gs-6\": false,\n \"bda-gs-7\": false,\n \"bda-gs-8\": true,\n \"bda-es-0\": true,\n \"bda-es-1\": true,\n \"bda-es-2\": true,\n \"bda-es-4\": false,\n \"bda-es-6\": true,\n \"bda-es-7\": true,\n \"bda-gs-b\": false,\n \"bda-es-8\": true,\n \"bda-dc-0\": false,\n \"bda-css-0\": false,\n \"bda-css-1\": false,\n \"bda-es-9\": true,\n \"fork-dm-1\": false,\n \"fork-ps-1\": true,\n \"fork-ps-2\": true,\n \"fork-ps-3\": true,\n \"fork-ps-4\": true,\n \"fork-ps-5\": true,\n \"fork-es-2\": false,\n \"fork-es-3\": true,\n \"fork-wp-1\": false,\n \"fork-wp-2\": false,\n \"fork-beta\": true,\n \"reactDevTools\": false,\n \"lightcord-1\": false,\n \"lightcord-2\": true,\n \"lightcord-presence-1\": false,\n \"lightcord-3\": false,\n \"lightcord-4\": false,\n \"lightcord-5\": true,\n \"lightcord-6\": true\n};\nconst settingsCookie = {};\nconst settingsRPC = {};\nconst defaultRPC = {\n \"name\": \"Lightcord\",\n \"application_id\": \"711416957718757418\",\n \"state\": \"Lightcord Client\",\n \"details\": \"Browsing Discord\",\n \"timestamps.start\": Date.now(),\n \"assets.small\": null,\n \"assets.large\": \"712323821037682791\"\n};\nconst bdpluginErrors = [];\nconst bdthemeErrors = []; // define for backwards compatibility\n\nconst bdConfig = Object.create(BetterDiscordConfig);\nconst bdthemes = {};\nconst bdplugins = {};\nconst pluginCookie = {};\nconst themeCookie = {};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvMGdsb2JhbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjLzBnbG9iYWxzLmpzPzAwZDIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwgcGx1Z2luTW9kdWxlLCB0aGVtZU1vZHVsZSwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGUsIG1haW5Db3JlLCBCRFYyO1xuZXhwb3J0IGNvbnN0IG1pbmltdW1EaXNjb3JkVmVyc2lvbiA9IFwiMC4wLjMwNlwiO1xuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9IHdpbmRvdy5EaXNjb3JkTmF0aXZlICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcCAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAuZ2V0VmVyc2lvbiAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAuZ2V0VmVyc2lvbigpIHx8IFwiMC4wLjMwNlwiO1xuZXhwb3J0IGNvbnN0IG1pblN1cHBvcnRlZFZlcnNpb24gPSBcIjAuMy4wXCI7XG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjRcIjtcbmV4cG9ydCBjb25zdCBiYmRDaGFuZ2Vsb2cgPSB7XG4gIGRlc2NyaXB0aW9uOiBcIkxpZ2h0Q29yZCBFZGl0aW9uLlwiLFxuICBjaGFuZ2VzOiBbe1xuICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXG4gICAgaXRlbXM6IFtcIioqTGlnaHRDb3JkKiogaXMgbm93IHVzaW5nIEJhbmRhZ2VkQkQuIFRoYXQgbWVhbnMgYWxsIHBsdWdpbnMgeW91IHdlcmUgdXNpbmcgY2FuIGJlIHVzZWQgdG9vICFcIiwgXCIqKldpbmRvdyBUcmFuc3BhcmVuY3kqKiBjaGFuZ2VzIHdlcmUgbWFkZSB0byBtb3JlIGNvbXBhdGlibGUgd2l0aCBleHRlcm5hbCB3aW5kb3cgbWFuYWdlcnMgYW5kIGFkZG9ucyBsaWtlIEdsYXNzY29yZC5cIiwgXCJJbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBoYXMgb25jZSBhZ2FpbiBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgdG8gaG9wZWZ1bGx5IGltcHJvdmUgbG9hZGluZyB0aW1lcy5cIiwgXCJXZSByZW1vdmVkIGVtb3Rlcy4gVGhhdCdzIHNhZCBmb3IgcGVvcGxlIHdobyB3ZXJlIGFjdHVhbGx5IHVzaW5nIGl0LCBidXQgaXQgd2FzIGxlYWRpbmcgdG8gbW9yZSBsb2FkaW5nIHRpbWUgYW5kIHNvbWUgYmFzaWMgd29yZHMgd2VyZSBlbW90ZS5cIl1cbiAgfSwge1xuICAgIHRpdGxlOiBcIkJ1ZyBGaXhlc1wiLFxuICAgIHR5cGU6IFwiZml4ZWRcIixcbiAgICBpdGVtczogW1wiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiXVxuICB9XVxufTtcbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcbiAgXCJDdXN0b20gY3NzIGxpdmUgdXBkYXRlXCI6IHtcbiAgICBpZDogXCJiZGEtY3NzLTBcIixcbiAgICBpbmZvOiBcIlwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogdHJ1ZSxcbiAgICBjYXQ6IFwiY29yZVwiXG4gIH0sXG4gIFwiQ3VzdG9tIGNzcyBhdXRvIHVkcGF0ZVwiOiB7XG4gICAgaWQ6IFwiYmRhLWNzcy0xXCIsXG4gICAgaW5mbzogXCJcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IHRydWUsXG4gICAgY2F0OiBcImNvcmVcIlxuICB9LFxuICBcIkJldHRlckRpc2NvcmQgQmx1ZVwiOiB7XG4gICAgaWQ6IFwiYmRhLWdzLWJcIixcbiAgICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLFxuICAgIGltcGxlbWVudGVkOiBmYWxzZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCJcbiAgfSxcblxuICAvKiBDb3JlICovXG5cbiAgLyogPT09PT09ICovXG4gIFwiUHVibGljIFNlcnZlcnNcIjoge1xuICAgIGlkOiBcImJkYS1ncy0xXCIsXG4gICAgaW5mbzogXCJEaXNwbGF5IHB1YmxpYyBzZXJ2ZXJzIGJ1dHRvblwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImNvcmVcIixcbiAgICBjYXRlZ29yeTogXCJtb2R1bGVzXCJcbiAgfSxcbiAgXCJNaW5pbWFsIE1vZGVcIjoge1xuICAgIGlkOiBcImJkYS1ncy0yXCIsXG4gICAgaW5mbzogXCJIaWRlIGVsZW1lbnRzIGFuZCByZWR1Y2UgdGhlIHNpemUgb2YgZWxlbWVudHMuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcIm1vZHVsZXNcIlxuICB9LFxuICBcIlZvaWNlIE1vZGVcIjoge1xuICAgIGlkOiBcImJkYS1ncy00XCIsXG4gICAgaW5mbzogXCJPbmx5IHNob3cgdm9pY2UgY2hhdFwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImNvcmVcIixcbiAgICBjYXRlZ29yeTogXCJtb2R1bGVzXCJcbiAgfSxcbiAgXCJIaWRlIENoYW5uZWxzXCI6IHtcbiAgICBpZDogXCJiZGEtZ3MtM1wiLFxuICAgIGluZm86IFwiSGlkZSBjaGFubmVscyBpbiBtaW5pbWFsIG1vZGVcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwibW9kdWxlc1wiXG4gIH0sXG4gIFwiRGFyayBNb2RlXCI6IHtcbiAgICBpZDogXCJiZGEtZ3MtNVwiLFxuICAgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcIm1vZHVsZXNcIlxuICB9LFxuICBcIlZvaWNlIERpc2Nvbm5lY3RcIjoge1xuICAgIGlkOiBcImJkYS1kYy0wXCIsXG4gICAgaW5mbzogXCJEaXNjb25uZWN0IGZyb20gdm9pY2Ugc2VydmVyIHdoZW4gY2xvc2luZyBEaXNjb3JkXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcIm1vZHVsZXNcIlxuICB9LFxuICBcIjI0IEhvdXIgVGltZXN0YW1wc1wiOiB7XG4gICAgaWQ6IFwiYmRhLWdzLTZcIixcbiAgICBpbmZvOiBcIlJlcGxhY2UgMTJociB0aW1lc3RhbXBzIHdpdGggcHJvcGVyIG9uZXNcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwibW9kdWxlc1wiXG4gIH0sXG4gIFwiQ29sb3JlZCBUZXh0XCI6IHtcbiAgICBpZDogXCJiZGEtZ3MtN1wiLFxuICAgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwibW9kdWxlc1wiXG4gIH0sXG4gIFwiTm9ybWFsaXplIENsYXNzZXNcIjoge1xuICAgIGlkOiBcImZvcmstcHMtNFwiLFxuICAgIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwibW9kdWxlc1wiXG4gIH0sXG5cbiAgLyogQ29udGVudCAqL1xuICBcIkNvbnRlbnQgRXJyb3IgTW9kYWxcIjoge1xuICAgIGlkOiBcImZvcmstcHMtMVwiLFxuICAgIGluZm86IFwiU2hvd3MgYSBtb2RhbCB3aXRoIHBsdWdpbi90aGVtZSBlcnJvcnNcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJcbiAgfSxcbiAgXCJTaG93IFRvYXN0c1wiOiB7XG4gICAgaWQ6IFwiZm9yay1wcy0yXCIsXG4gICAgaW5mbzogXCJTaG93cyBhIHNtYWxsIG5vdGlmaWNhdGlvbiBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwiXG4gIH0sXG4gIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6IHtcbiAgICBpZDogXCJmb3JrLXBzLTNcIixcbiAgICBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImNvcmVcIixcbiAgICBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIlxuICB9LFxuICBcIkF1dG9tYXRpYyBMb2FkaW5nXCI6IHtcbiAgICBpZDogXCJmb3JrLXBzLTVcIixcbiAgICBpbmZvOiBcIkF1dG9tYXRpY2FsbHkgbG9hZHMsIHJlbG9hZHMsIGFuZCB1bmxvYWRzIHBsdWdpbnMgYW5kIHRoZW1lc1wiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImNvcmVcIixcbiAgICBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIlxuICB9LFxuXG4gIC8qIERldmVsb3BlciAqL1xuICBcIkRldmVsb3BlciBNb2RlXCI6IHtcbiAgICBpZDogXCJiZGEtZ3MtOFwiLFxuICAgIGluZm86IFwiRGV2ZWxvcGVyIE1vZGUgVG9nZ2xlXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wiXG4gIH0sXG4gIFwiQ29weSBTZWxlY3RvclwiOiB7XG4gICAgaWQ6IFwiZm9yay1kbS0xXCIsXG4gICAgaW5mbzogXCJBZGRzIGEgXFxcIkNvcHkgU2VsZWN0b3JcXFwiIG9wdGlvbiB0byBjb250ZXh0IG1lbnVzIHdoZW4gZGV2ZWxvcGVyIG1vZGUgaXMgYWN0aXZlXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wiXG4gIH0sXG4gIFwiUmVhY3QgRGV2VG9vbHNcIjoge1xuICAgIGlkOiBcInJlYWN0RGV2VG9vbHNcIixcbiAgICBpbmZvOiBcIkFkZHMgcmVhY3QgZGV2ZWxvcGVyIHRvb2xzIHRvIHRoZSBkZXZ0b29scy4gTXVzdCBiZSBpbnN0YWxsZWQgaW4gR29vZ2xlIENocm9tZSBvbiB5b3VyIHBjLlwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogdHJ1ZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wiXG4gIH0sXG5cbiAgLyoqIExpZ2h0Q29yZCAqL1xuICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiB7XG4gICAgaWQ6IFwiYmQtZGlzYWJsZVwiLFxuICAgIGluZm86IFwiRGlzYWJsZSBCZXR0ZXJkaXNjb3JkIChwbHVnaW5zLCB0aGVtZXMsIGV0YykuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IGZhbHNlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImxpZ2h0Y29yZFwiLFxuICAgIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiXG4gIH0sXG4gIFwiQmx1ciBQZXJzb25uYWwgSW5mb3JtYXRpb25zXCI6IHtcbiAgICBpZDogXCJsaWdodGNvcmQtNlwiLFxuICAgIGluZm86IFwiQmx1ciBzZW5zaXRpdmUgaW5mb3JtYXRpb25zIGxpa2UgZW1haWwsIHBheW1lbnQgaW5mb3MgYW5kIG1vcmUuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwibGlnaHRjb3JkXCIsXG4gICAgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJcbiAgfSxcbiAgXCJDYWxsaW5nIFJpbmcgQmVhdFwiOiB7XG4gICAgaWQ6IFwibGlnaHRjb3JkLTJcIixcbiAgICBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3Mgc3BlY2lhbCBjYWxsaW5nIGJlYXQuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwibGlnaHRjb3JkXCIsXG4gICAgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJcbiAgfSxcbiAgXCJEZXZlbG9wZXIgT3B0aW9uc1wiOiB7XG4gICAgaWQ6IFwibGlnaHRjb3JkLTFcIixcbiAgICBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgSW50ZXJuYWwgRGV2ZWxvcGVyIE9wdGlvbnMuIFRoaXMgYWxsb3cgdGhlIFxcXCJFeHBlcmltZW50c1xcXCIgdGFiIGFuZCB0aGUgXFxcIkRldmVsb3BlciBPcHRpb25zXFxcIiB0YWIuIChtdXN0IGNsb3NlIGFuZCByZW9wZW4gc2V0dGluZ3MpXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwibGlnaHRjb3JkXCIsXG4gICAgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJcbiAgfSxcbiAgXCJBZCBCbG9ja1wiOiB7XG4gICAgaWQ6IFwibGlnaHRjb3JkLTRcIixcbiAgICBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbSB5b3Ugd2l0aCBhbiBpbnZpdGUgbGluay4gRXZlbiBpbiBhbiBlbWJlZC5cIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJsaWdodGNvcmRcIixcbiAgICBjYXRlZ29yeTogXCJMaWdodGNvcmRcIlxuICB9LFxuICBcIkVuYWJsZSBMaWdodGNvcmQgU2VydmVyc1wiOiB7XG4gICAgaWQ6IFwibGlnaHRjb3JkLTVcIixcbiAgICBpbmZvOiBcIkRpc2FibGluZyBpdCBlcmFzZSBhbnkgaW5mb3JtYXRpb25zIGFib3V0IHlvdSBpbiBvdXIgc2VydmVycy4gQnV0IHlvdSB3b24ndCBzZWUgYW55dGhpbmcgbGlrZSBjdXN0b20gYmFkZ2VzLlwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImxpZ2h0Y29yZFwiLFxuICAgIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiXG4gIH0sXG5cbiAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cbiAgXCJBbHdheXMtb24tVG9wXCI6IHtcbiAgICBpZDogXCJsaWdodGNvcmQtM1wiLFxuICAgIGluZm86IFwiRW5hYmxlIHdpbmRvdydzIEFsd2F5cy1vbi1Ub3AgbW9kZSwgd2hlcmUgTGlnaHRjb3JkIHN0YXlzIG9uIHRvcCBvZiBvdGhlciBhcHBsaWNhdGlvbnMuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwibGlnaHRjb3JkXCIsXG4gICAgY2F0ZWdvcnk6IFwiV2luZG93XCJcbiAgfSxcblxuICAvKiogUmljaFByZXNlbmNlICovXG4gIFwiRW5hYmxlXCI6IHtcbiAgICBpZDogXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiLFxuICAgIGluZm86IFwiRW5hYmxlIFJpY2hQcmVzZW5jZSBiZWxvdy5cIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJzdGF0dXNcIlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb29raWUgPSB7XG4gIFwiYmRhLWdzLTFcIjogdHJ1ZSxcbiAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcbiAgXCJiZGEtZ3MtM1wiOiBmYWxzZSxcbiAgXCJiZGEtZ3MtNFwiOiBmYWxzZSxcbiAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxuICBcImJkYS1ncy02XCI6IGZhbHNlLFxuICBcImJkYS1ncy03XCI6IGZhbHNlLFxuICBcImJkYS1ncy04XCI6IHRydWUsXG4gIFwiYmRhLWVzLTBcIjogdHJ1ZSxcbiAgXCJiZGEtZXMtMVwiOiB0cnVlLFxuICBcImJkYS1lcy0yXCI6IHRydWUsXG4gIFwiYmRhLWVzLTRcIjogZmFsc2UsXG4gIFwiYmRhLWVzLTZcIjogdHJ1ZSxcbiAgXCJiZGEtZXMtN1wiOiB0cnVlLFxuICBcImJkYS1ncy1iXCI6IGZhbHNlLFxuICBcImJkYS1lcy04XCI6IHRydWUsXG4gIFwiYmRhLWRjLTBcIjogZmFsc2UsXG4gIFwiYmRhLWNzcy0wXCI6IGZhbHNlLFxuICBcImJkYS1jc3MtMVwiOiBmYWxzZSxcbiAgXCJiZGEtZXMtOVwiOiB0cnVlLFxuICBcImZvcmstZG0tMVwiOiBmYWxzZSxcbiAgXCJmb3JrLXBzLTFcIjogdHJ1ZSxcbiAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcbiAgXCJmb3JrLXBzLTNcIjogdHJ1ZSxcbiAgXCJmb3JrLXBzLTRcIjogdHJ1ZSxcbiAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcbiAgXCJmb3JrLWVzLTJcIjogZmFsc2UsXG4gIFwiZm9yay1lcy0zXCI6IHRydWUsXG4gIFwiZm9yay13cC0xXCI6IGZhbHNlLFxuICBcImZvcmstd3AtMlwiOiBmYWxzZSxcbiAgXCJmb3JrLWJldGFcIjogdHJ1ZSxcbiAgXCJyZWFjdERldlRvb2xzXCI6IGZhbHNlLFxuICBcImxpZ2h0Y29yZC0xXCI6IGZhbHNlLFxuICBcImxpZ2h0Y29yZC0yXCI6IHRydWUsXG4gIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXG4gIFwibGlnaHRjb3JkLTNcIjogZmFsc2UsXG4gIFwibGlnaHRjb3JkLTRcIjogZmFsc2UsXG4gIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcbiAgXCJsaWdodGNvcmQtNlwiOiB0cnVlXG59O1xuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0UlBDID0ge1xuICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcbiAgXCJhcHBsaWNhdGlvbl9pZFwiOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiLFxuICBcInN0YXRlXCI6IFwiTGlnaHRjb3JkIENsaWVudFwiLFxuICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXG4gIFwidGltZXN0YW1wcy5zdGFydFwiOiBEYXRlLm5vdygpLFxuICBcImFzc2V0cy5zbWFsbFwiOiBudWxsLFxuICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXG59O1xuZXhwb3J0IGNvbnN0IGJkcGx1Z2luRXJyb3JzID0gW107XG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbmV4cG9ydCBjb25zdCBiZENvbmZpZyA9IE9iamVjdC5jcmVhdGUoQmV0dGVyRGlzY29yZENvbmZpZyk7XG5leHBvcnQgY29uc3QgYmR0aGVtZXMgPSB7fTtcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcbmV4cG9ydCBjb25zdCB0aGVtZUNvb2tpZSA9IHt9OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/0globals.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minimumDiscordVersion\", function() { return minimumDiscordVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"currentDiscordVersion\", function() { return currentDiscordVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"minSupportedVersion\", function() { return minSupportedVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bbdVersion\", function() { return bbdVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bbdChangelog\", function() { return bbdChangelog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return settings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultCookie\", function() { return defaultCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settingsCookie\", function() { return settingsCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settingsRPC\", function() { return settingsRPC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultRPC\", function() { return defaultRPC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdpluginErrors\", function() { return bdpluginErrors; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdthemeErrors\", function() { return bdthemeErrors; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdConfig\", function() { return bdConfig; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdthemes\", function() { return bdthemes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bdplugins\", function() { return bdplugins; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pluginCookie\", function() { return pluginCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"themeCookie\", function() { return themeCookie; });\n// var settingsPanel, voiceMode, pluginModule, themeModule, dMode, publicServersModule, mainCore, BDV2;\nconst minimumDiscordVersion = \"0.0.306\";\nconst currentDiscordVersion = window.DiscordNative && window.DiscordNative.remoteApp && window.DiscordNative.remoteApp.getVersion && window.DiscordNative.remoteApp.getVersion() || \"0.0.306\";\nconst minSupportedVersion = \"0.3.0\";\nconst bbdVersion = \"0.3.4\";\nconst bbdChangelog = {\n description: \"Lightcord Edition.\",\n changes: [{\n title: \"What's New?\",\n items: [\"**Lightcord** is now using BandagedBD. That means all plugins you were using can be used too !\", \"**Window Transparency** changes were made to more compatible with external window managers and addons like Glasscord.\", \"Initialization sequence has once again been changed slightly to hopefully improve loading times.\", \"We removed emotes. That's sad for people who were actually using it, but it was leading to more loading time and some basic words were emote.\"]\n }, {\n title: \"Bug Fixes\",\n type: \"fixed\",\n items: [\"Some fixes related to showing modals in the `BdApi`.\"]\n }]\n};\nconst settings = {\n \"Custom css live update\": {\n id: \"bda-css-0\",\n info: \"\",\n implemented: true,\n hidden: true,\n cat: \"core\"\n },\n \"Custom css auto udpate\": {\n id: \"bda-css-1\",\n info: \"\",\n implemented: true,\n hidden: true,\n cat: \"core\"\n },\n \"BetterDiscord Blue\": {\n id: \"bda-gs-b\",\n info: \"Replace Discord blue with BD Blue\",\n implemented: false,\n hidden: false,\n cat: \"core\"\n },\n\n /* Core */\n\n /* ====== */\n \"Public Servers\": {\n id: \"bda-gs-1\",\n info: \"Display public servers button\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Minimal Mode\": {\n id: \"bda-gs-2\",\n info: \"Hide elements and reduce the size of elements.\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Voice Mode\": {\n id: \"bda-gs-4\",\n info: \"Only show voice chat\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Hide Channels\": {\n id: \"bda-gs-3\",\n info: \"Hide channels in minimal mode\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Dark Mode\": {\n id: \"bda-gs-5\",\n info: \"Make certain elements dark by default(wip)\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Voice Disconnect\": {\n id: \"bda-dc-0\",\n info: \"Disconnect from voice server when closing Discord\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"24 Hour Timestamps\": {\n id: \"bda-gs-6\",\n info: \"Replace 12hr timestamps with proper ones\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Colored Text\": {\n id: \"bda-gs-7\",\n info: \"Make text color the same as role color\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n \"Normalize Classes\": {\n id: \"fork-ps-4\",\n info: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"modules\"\n },\n\n /* Content */\n \"Content Error Modal\": {\n id: \"fork-ps-1\",\n info: \"Shows a modal with plugin/theme errors\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"content manager\"\n },\n \"Show Toasts\": {\n id: \"fork-ps-2\",\n info: \"Shows a small notification for important information\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"content manager\"\n },\n \"Scroll To Settings\": {\n id: \"fork-ps-3\",\n info: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"content manager\"\n },\n \"Automatic Loading\": {\n id: \"fork-ps-5\",\n info: \"Automatically loads, reloads, and unloads plugins and themes\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"content manager\"\n },\n\n /* Developer */\n \"Developer Mode\": {\n id: \"bda-gs-8\",\n info: \"Developer Mode Toggle\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"developer settings\"\n },\n \"Copy Selector\": {\n id: \"fork-dm-1\",\n info: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\",\n implemented: true,\n hidden: false,\n cat: \"core\",\n category: \"developer settings\"\n },\n \"React DevTools\": {\n id: \"reactDevTools\",\n info: \"Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.\",\n implemented: true,\n hidden: true,\n cat: \"core\",\n category: \"developer settings\"\n },\n\n /** Lightcord */\n \"Disable BetterDiscord\": {\n id: \"bd-disable\",\n info: \"Disable Betterdiscord (plugins, themes, etc).\",\n implemented: false,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Blur Personnal Informations\": {\n id: \"lightcord-6\",\n info: \"Blur sensitive informations like email, payment infos and more.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Calling Ring Beat\": {\n id: \"lightcord-2\",\n info: \"Enable Discord's special calling beat.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Developer Options\": {\n id: \"lightcord-1\",\n info: \"Enable Discord's Internal Developer Options. This allow the \\\"Experiments\\\" tab and the \\\"Developer Options\\\" tab. (must close and reopen settings)\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Ad Block\": {\n id: \"lightcord-4\",\n info: \"Block any BOT that dm you with an invite link. Even in an embed.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n \"Enable Lightcord Servers\": {\n id: \"lightcord-5\",\n info: \"Disabling it erase any informations about you in our servers. But you won't see anything like custom badges.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Lightcord\"\n },\n\n /** Lightcord Window */\n \"Always-on-Top\": {\n id: \"lightcord-3\",\n info: \"Enable window's Always-on-Top mode, where Lightcord stays on top of other applications.\",\n implemented: true,\n hidden: false,\n cat: \"lightcord\",\n category: \"Window\"\n },\n\n /** RichPresence */\n \"Enable\": {\n id: \"lightcord-presence-1\",\n info: \"Enable RichPresence below.\",\n implemented: true,\n hidden: false,\n cat: \"status\"\n }\n};\nconst defaultCookie = {\n \"bda-gs-1\": true,\n \"bda-gs-2\": false,\n \"bda-gs-3\": false,\n \"bda-gs-4\": false,\n \"bda-gs-5\": true,\n \"bda-gs-6\": false,\n \"bda-gs-7\": false,\n \"bda-gs-8\": true,\n \"bda-es-0\": true,\n \"bda-es-1\": true,\n \"bda-es-2\": true,\n \"bda-es-4\": false,\n \"bda-es-6\": true,\n \"bda-es-7\": true,\n \"bda-gs-b\": false,\n \"bda-es-8\": true,\n \"bda-dc-0\": false,\n \"bda-css-0\": false,\n \"bda-css-1\": false,\n \"bda-es-9\": true,\n \"fork-dm-1\": false,\n \"fork-ps-1\": true,\n \"fork-ps-2\": true,\n \"fork-ps-3\": true,\n \"fork-ps-4\": true,\n \"fork-ps-5\": true,\n \"fork-es-2\": false,\n \"fork-es-3\": true,\n \"fork-wp-1\": false,\n \"fork-wp-2\": false,\n \"fork-beta\": true,\n \"reactDevTools\": false,\n \"lightcord-1\": false,\n \"lightcord-2\": true,\n \"lightcord-presence-1\": false,\n \"lightcord-3\": false,\n \"lightcord-4\": false,\n \"lightcord-5\": true,\n \"lightcord-6\": true\n};\nconst settingsCookie = {};\nconst settingsRPC = {};\nconst defaultRPC = {\n \"name\": \"Lightcord\",\n \"application_id\": \"711416957718757418\",\n \"state\": \"Lightcord Client\",\n \"details\": \"Browsing Discord\",\n \"timestamps.start\": Date.now(),\n \"assets.small\": null,\n \"assets.large\": \"712323821037682791\"\n};\nconst bdpluginErrors = [];\nconst bdthemeErrors = []; // define for backwards compatibility\n\nconst bdConfig = Object.create(BetterDiscordConfig);\nconst bdthemes = {};\nconst bdplugins = {};\nconst pluginCookie = {};\nconst themeCookie = {};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvMGdsb2JhbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjLzBnbG9iYWxzLmpzPzAwZDIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwgcGx1Z2luTW9kdWxlLCB0aGVtZU1vZHVsZSwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGUsIG1haW5Db3JlLCBCRFYyO1xuZXhwb3J0IGNvbnN0IG1pbmltdW1EaXNjb3JkVmVyc2lvbiA9IFwiMC4wLjMwNlwiO1xuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9IHdpbmRvdy5EaXNjb3JkTmF0aXZlICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcCAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAuZ2V0VmVyc2lvbiAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAuZ2V0VmVyc2lvbigpIHx8IFwiMC4wLjMwNlwiO1xuZXhwb3J0IGNvbnN0IG1pblN1cHBvcnRlZFZlcnNpb24gPSBcIjAuMy4wXCI7XG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjRcIjtcbmV4cG9ydCBjb25zdCBiYmRDaGFuZ2Vsb2cgPSB7XG4gIGRlc2NyaXB0aW9uOiBcIkxpZ2h0Y29yZCBFZGl0aW9uLlwiLFxuICBjaGFuZ2VzOiBbe1xuICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXG4gICAgaXRlbXM6IFtcIioqTGlnaHRjb3JkKiogaXMgbm93IHVzaW5nIEJhbmRhZ2VkQkQuIFRoYXQgbWVhbnMgYWxsIHBsdWdpbnMgeW91IHdlcmUgdXNpbmcgY2FuIGJlIHVzZWQgdG9vICFcIiwgXCIqKldpbmRvdyBUcmFuc3BhcmVuY3kqKiBjaGFuZ2VzIHdlcmUgbWFkZSB0byBtb3JlIGNvbXBhdGlibGUgd2l0aCBleHRlcm5hbCB3aW5kb3cgbWFuYWdlcnMgYW5kIGFkZG9ucyBsaWtlIEdsYXNzY29yZC5cIiwgXCJJbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBoYXMgb25jZSBhZ2FpbiBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgdG8gaG9wZWZ1bGx5IGltcHJvdmUgbG9hZGluZyB0aW1lcy5cIiwgXCJXZSByZW1vdmVkIGVtb3Rlcy4gVGhhdCdzIHNhZCBmb3IgcGVvcGxlIHdobyB3ZXJlIGFjdHVhbGx5IHVzaW5nIGl0LCBidXQgaXQgd2FzIGxlYWRpbmcgdG8gbW9yZSBsb2FkaW5nIHRpbWUgYW5kIHNvbWUgYmFzaWMgd29yZHMgd2VyZSBlbW90ZS5cIl1cbiAgfSwge1xuICAgIHRpdGxlOiBcIkJ1ZyBGaXhlc1wiLFxuICAgIHR5cGU6IFwiZml4ZWRcIixcbiAgICBpdGVtczogW1wiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiXVxuICB9XVxufTtcbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcbiAgXCJDdXN0b20gY3NzIGxpdmUgdXBkYXRlXCI6IHtcbiAgICBpZDogXCJiZGEtY3NzLTBcIixcbiAgICBpbmZvOiBcIlwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogdHJ1ZSxcbiAgICBjYXQ6IFwiY29yZVwiXG4gIH0sXG4gIFwiQ3VzdG9tIGNzcyBhdXRvIHVkcGF0ZVwiOiB7XG4gICAgaWQ6IFwiYmRhLWNzcy0xXCIsXG4gICAgaW5mbzogXCJcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IHRydWUsXG4gICAgY2F0OiBcImNvcmVcIlxuICB9LFxuICBcIkJldHRlckRpc2NvcmQgQmx1ZVwiOiB7XG4gICAgaWQ6IFwiYmRhLWdzLWJcIixcbiAgICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLFxuICAgIGltcGxlbWVudGVkOiBmYWxzZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCJcbiAgfSxcblxuICAvKiBDb3JlICovXG5cbiAgLyogPT09PT09ICovXG4gIFwiUHVibGljIFNlcnZlcnNcIjoge1xuICAgIGlkOiBcImJkYS1ncy0xXCIsXG4gICAgaW5mbzogXCJEaXNwbGF5IHB1YmxpYyBzZXJ2ZXJzIGJ1dHRvblwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImNvcmVcIixcbiAgICBjYXRlZ29yeTogXCJtb2R1bGVzXCJcbiAgfSxcbiAgXCJNaW5pbWFsIE1vZGVcIjoge1xuICAgIGlkOiBcImJkYS1ncy0yXCIsXG4gICAgaW5mbzogXCJIaWRlIGVsZW1lbnRzIGFuZCByZWR1Y2UgdGhlIHNpemUgb2YgZWxlbWVudHMuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcIm1vZHVsZXNcIlxuICB9LFxuICBcIlZvaWNlIE1vZGVcIjoge1xuICAgIGlkOiBcImJkYS1ncy00XCIsXG4gICAgaW5mbzogXCJPbmx5IHNob3cgdm9pY2UgY2hhdFwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImNvcmVcIixcbiAgICBjYXRlZ29yeTogXCJtb2R1bGVzXCJcbiAgfSxcbiAgXCJIaWRlIENoYW5uZWxzXCI6IHtcbiAgICBpZDogXCJiZGEtZ3MtM1wiLFxuICAgIGluZm86IFwiSGlkZSBjaGFubmVscyBpbiBtaW5pbWFsIG1vZGVcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwibW9kdWxlc1wiXG4gIH0sXG4gIFwiRGFyayBNb2RlXCI6IHtcbiAgICBpZDogXCJiZGEtZ3MtNVwiLFxuICAgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcIm1vZHVsZXNcIlxuICB9LFxuICBcIlZvaWNlIERpc2Nvbm5lY3RcIjoge1xuICAgIGlkOiBcImJkYS1kYy0wXCIsXG4gICAgaW5mbzogXCJEaXNjb25uZWN0IGZyb20gdm9pY2Ugc2VydmVyIHdoZW4gY2xvc2luZyBEaXNjb3JkXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcIm1vZHVsZXNcIlxuICB9LFxuICBcIjI0IEhvdXIgVGltZXN0YW1wc1wiOiB7XG4gICAgaWQ6IFwiYmRhLWdzLTZcIixcbiAgICBpbmZvOiBcIlJlcGxhY2UgMTJociB0aW1lc3RhbXBzIHdpdGggcHJvcGVyIG9uZXNcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwibW9kdWxlc1wiXG4gIH0sXG4gIFwiQ29sb3JlZCBUZXh0XCI6IHtcbiAgICBpZDogXCJiZGEtZ3MtN1wiLFxuICAgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwibW9kdWxlc1wiXG4gIH0sXG4gIFwiTm9ybWFsaXplIENsYXNzZXNcIjoge1xuICAgIGlkOiBcImZvcmstcHMtNFwiLFxuICAgIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwibW9kdWxlc1wiXG4gIH0sXG5cbiAgLyogQ29udGVudCAqL1xuICBcIkNvbnRlbnQgRXJyb3IgTW9kYWxcIjoge1xuICAgIGlkOiBcImZvcmstcHMtMVwiLFxuICAgIGluZm86IFwiU2hvd3MgYSBtb2RhbCB3aXRoIHBsdWdpbi90aGVtZSBlcnJvcnNcIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJjb3JlXCIsXG4gICAgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJcbiAgfSxcbiAgXCJTaG93IFRvYXN0c1wiOiB7XG4gICAgaWQ6IFwiZm9yay1wcy0yXCIsXG4gICAgaW5mbzogXCJTaG93cyBhIHNtYWxsIG5vdGlmaWNhdGlvbiBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwiXG4gIH0sXG4gIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6IHtcbiAgICBpZDogXCJmb3JrLXBzLTNcIixcbiAgICBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImNvcmVcIixcbiAgICBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIlxuICB9LFxuICBcIkF1dG9tYXRpYyBMb2FkaW5nXCI6IHtcbiAgICBpZDogXCJmb3JrLXBzLTVcIixcbiAgICBpbmZvOiBcIkF1dG9tYXRpY2FsbHkgbG9hZHMsIHJlbG9hZHMsIGFuZCB1bmxvYWRzIHBsdWdpbnMgYW5kIHRoZW1lc1wiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImNvcmVcIixcbiAgICBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIlxuICB9LFxuXG4gIC8qIERldmVsb3BlciAqL1xuICBcIkRldmVsb3BlciBNb2RlXCI6IHtcbiAgICBpZDogXCJiZGEtZ3MtOFwiLFxuICAgIGluZm86IFwiRGV2ZWxvcGVyIE1vZGUgVG9nZ2xlXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wiXG4gIH0sXG4gIFwiQ29weSBTZWxlY3RvclwiOiB7XG4gICAgaWQ6IFwiZm9yay1kbS0xXCIsXG4gICAgaW5mbzogXCJBZGRzIGEgXFxcIkNvcHkgU2VsZWN0b3JcXFwiIG9wdGlvbiB0byBjb250ZXh0IG1lbnVzIHdoZW4gZGV2ZWxvcGVyIG1vZGUgaXMgYWN0aXZlXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wiXG4gIH0sXG4gIFwiUmVhY3QgRGV2VG9vbHNcIjoge1xuICAgIGlkOiBcInJlYWN0RGV2VG9vbHNcIixcbiAgICBpbmZvOiBcIkFkZHMgcmVhY3QgZGV2ZWxvcGVyIHRvb2xzIHRvIHRoZSBkZXZ0b29scy4gTXVzdCBiZSBpbnN0YWxsZWQgaW4gR29vZ2xlIENocm9tZSBvbiB5b3VyIHBjLlwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogdHJ1ZSxcbiAgICBjYXQ6IFwiY29yZVwiLFxuICAgIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wiXG4gIH0sXG5cbiAgLyoqIExpZ2h0Y29yZCAqL1xuICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiB7XG4gICAgaWQ6IFwiYmQtZGlzYWJsZVwiLFxuICAgIGluZm86IFwiRGlzYWJsZSBCZXR0ZXJkaXNjb3JkIChwbHVnaW5zLCB0aGVtZXMsIGV0YykuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IGZhbHNlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImxpZ2h0Y29yZFwiLFxuICAgIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiXG4gIH0sXG4gIFwiQmx1ciBQZXJzb25uYWwgSW5mb3JtYXRpb25zXCI6IHtcbiAgICBpZDogXCJsaWdodGNvcmQtNlwiLFxuICAgIGluZm86IFwiQmx1ciBzZW5zaXRpdmUgaW5mb3JtYXRpb25zIGxpa2UgZW1haWwsIHBheW1lbnQgaW5mb3MgYW5kIG1vcmUuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwibGlnaHRjb3JkXCIsXG4gICAgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJcbiAgfSxcbiAgXCJDYWxsaW5nIFJpbmcgQmVhdFwiOiB7XG4gICAgaWQ6IFwibGlnaHRjb3JkLTJcIixcbiAgICBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3Mgc3BlY2lhbCBjYWxsaW5nIGJlYXQuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwibGlnaHRjb3JkXCIsXG4gICAgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJcbiAgfSxcbiAgXCJEZXZlbG9wZXIgT3B0aW9uc1wiOiB7XG4gICAgaWQ6IFwibGlnaHRjb3JkLTFcIixcbiAgICBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgSW50ZXJuYWwgRGV2ZWxvcGVyIE9wdGlvbnMuIFRoaXMgYWxsb3cgdGhlIFxcXCJFeHBlcmltZW50c1xcXCIgdGFiIGFuZCB0aGUgXFxcIkRldmVsb3BlciBPcHRpb25zXFxcIiB0YWIuIChtdXN0IGNsb3NlIGFuZCByZW9wZW4gc2V0dGluZ3MpXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwibGlnaHRjb3JkXCIsXG4gICAgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJcbiAgfSxcbiAgXCJBZCBCbG9ja1wiOiB7XG4gICAgaWQ6IFwibGlnaHRjb3JkLTRcIixcbiAgICBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbSB5b3Ugd2l0aCBhbiBpbnZpdGUgbGluay4gRXZlbiBpbiBhbiBlbWJlZC5cIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJsaWdodGNvcmRcIixcbiAgICBjYXRlZ29yeTogXCJMaWdodGNvcmRcIlxuICB9LFxuICBcIkVuYWJsZSBMaWdodGNvcmQgU2VydmVyc1wiOiB7XG4gICAgaWQ6IFwibGlnaHRjb3JkLTVcIixcbiAgICBpbmZvOiBcIkRpc2FibGluZyBpdCBlcmFzZSBhbnkgaW5mb3JtYXRpb25zIGFib3V0IHlvdSBpbiBvdXIgc2VydmVycy4gQnV0IHlvdSB3b24ndCBzZWUgYW55dGhpbmcgbGlrZSBjdXN0b20gYmFkZ2VzLlwiLFxuICAgIGltcGxlbWVudGVkOiB0cnVlLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gICAgY2F0OiBcImxpZ2h0Y29yZFwiLFxuICAgIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiXG4gIH0sXG5cbiAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cbiAgXCJBbHdheXMtb24tVG9wXCI6IHtcbiAgICBpZDogXCJsaWdodGNvcmQtM1wiLFxuICAgIGluZm86IFwiRW5hYmxlIHdpbmRvdydzIEFsd2F5cy1vbi1Ub3AgbW9kZSwgd2hlcmUgTGlnaHRjb3JkIHN0YXlzIG9uIHRvcCBvZiBvdGhlciBhcHBsaWNhdGlvbnMuXCIsXG4gICAgaW1wbGVtZW50ZWQ6IHRydWUsXG4gICAgaGlkZGVuOiBmYWxzZSxcbiAgICBjYXQ6IFwibGlnaHRjb3JkXCIsXG4gICAgY2F0ZWdvcnk6IFwiV2luZG93XCJcbiAgfSxcblxuICAvKiogUmljaFByZXNlbmNlICovXG4gIFwiRW5hYmxlXCI6IHtcbiAgICBpZDogXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiLFxuICAgIGluZm86IFwiRW5hYmxlIFJpY2hQcmVzZW5jZSBiZWxvdy5cIixcbiAgICBpbXBsZW1lbnRlZDogdHJ1ZSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGNhdDogXCJzdGF0dXNcIlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb29raWUgPSB7XG4gIFwiYmRhLWdzLTFcIjogdHJ1ZSxcbiAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcbiAgXCJiZGEtZ3MtM1wiOiBmYWxzZSxcbiAgXCJiZGEtZ3MtNFwiOiBmYWxzZSxcbiAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxuICBcImJkYS1ncy02XCI6IGZhbHNlLFxuICBcImJkYS1ncy03XCI6IGZhbHNlLFxuICBcImJkYS1ncy04XCI6IHRydWUsXG4gIFwiYmRhLWVzLTBcIjogdHJ1ZSxcbiAgXCJiZGEtZXMtMVwiOiB0cnVlLFxuICBcImJkYS1lcy0yXCI6IHRydWUsXG4gIFwiYmRhLWVzLTRcIjogZmFsc2UsXG4gIFwiYmRhLWVzLTZcIjogdHJ1ZSxcbiAgXCJiZGEtZXMtN1wiOiB0cnVlLFxuICBcImJkYS1ncy1iXCI6IGZhbHNlLFxuICBcImJkYS1lcy04XCI6IHRydWUsXG4gIFwiYmRhLWRjLTBcIjogZmFsc2UsXG4gIFwiYmRhLWNzcy0wXCI6IGZhbHNlLFxuICBcImJkYS1jc3MtMVwiOiBmYWxzZSxcbiAgXCJiZGEtZXMtOVwiOiB0cnVlLFxuICBcImZvcmstZG0tMVwiOiBmYWxzZSxcbiAgXCJmb3JrLXBzLTFcIjogdHJ1ZSxcbiAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcbiAgXCJmb3JrLXBzLTNcIjogdHJ1ZSxcbiAgXCJmb3JrLXBzLTRcIjogdHJ1ZSxcbiAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcbiAgXCJmb3JrLWVzLTJcIjogZmFsc2UsXG4gIFwiZm9yay1lcy0zXCI6IHRydWUsXG4gIFwiZm9yay13cC0xXCI6IGZhbHNlLFxuICBcImZvcmstd3AtMlwiOiBmYWxzZSxcbiAgXCJmb3JrLWJldGFcIjogdHJ1ZSxcbiAgXCJyZWFjdERldlRvb2xzXCI6IGZhbHNlLFxuICBcImxpZ2h0Y29yZC0xXCI6IGZhbHNlLFxuICBcImxpZ2h0Y29yZC0yXCI6IHRydWUsXG4gIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXG4gIFwibGlnaHRjb3JkLTNcIjogZmFsc2UsXG4gIFwibGlnaHRjb3JkLTRcIjogZmFsc2UsXG4gIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcbiAgXCJsaWdodGNvcmQtNlwiOiB0cnVlXG59O1xuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0UlBDID0ge1xuICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcbiAgXCJhcHBsaWNhdGlvbl9pZFwiOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiLFxuICBcInN0YXRlXCI6IFwiTGlnaHRjb3JkIENsaWVudFwiLFxuICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXG4gIFwidGltZXN0YW1wcy5zdGFydFwiOiBEYXRlLm5vdygpLFxuICBcImFzc2V0cy5zbWFsbFwiOiBudWxsLFxuICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXG59O1xuZXhwb3J0IGNvbnN0IGJkcGx1Z2luRXJyb3JzID0gW107XG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbmV4cG9ydCBjb25zdCBiZENvbmZpZyA9IE9iamVjdC5jcmVhdGUoQmV0dGVyRGlzY29yZENvbmZpZyk7XG5leHBvcnQgY29uc3QgYmR0aGVtZXMgPSB7fTtcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcbmV4cG9ydCBjb25zdCB0aGVtZUNvb2tpZSA9IHt9OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/0globals.js\n"); /***/ }), @@ -203,7 +203,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* BDEvents */\nconst EventEm /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/**\r\n * Credits to @hellbound1337 on github for the css\r\n */\n\nlet selectors;\n\nfunction getSelectors() {\n let standardSidebarView = BDModules.get(e => e.standardSidebarView)[0];\n if (!standardSidebarView) return null;\n let defaultClassName = removeDa(standardSidebarView.standardSidebarView);\n let selects = [];\n selects.push(`#app-mount .${defaultClassName} .payment-info .${removeDa(BDModules.get(e => e.description && typeof e.description === \"string\" && e.description.includes(\"formText\"))[0].description)}`);\n selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.paymentSourceRow)[0].paymentSourceRow)} .${removeDa(BDModules.get(e => e.subText && e.descriptionWrapper)[0].subText)}`);\n selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.userSettingsAccount)[0].userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${removeDa(BDModules.get(e => e.viewBody)[0].viewBody)}`);\n return selects;\n}\n\nfunction removeDa(className) {\n if (!className) return className;\n return className.split(\" \").filter(e => !e.startsWith(\"da-\")).join(\" \");\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class BlurPrivate {\n constructor() {\n this.enabled = false;\n }\n\n enable() {\n if (this.enabled) return;\n this.enabled = true;\n selectors = selectors || getSelectors();\n if (!selectors) console.error(new Error(\"Couldn't find selectors to blur personnal informations.\"));\n _domtools__WEBPACK_IMPORTED_MODULE_0__[\"default\"].addStyle(\"blurPrivate\", `\n${selectors[0]}, ${selectors[1]}, ${selectors[2]} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${selectors[0]}:hover, ${selectors[1]}:hover, ${selectors[2]}:hover {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`);\n }\n\n disable() {\n if (!this.enabled) return;\n this.enabled = false;\n _domtools__WEBPACK_IMPORTED_MODULE_0__[\"default\"].removeStyle(\"blurPrivate\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9ibHVyUHJpdmF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9ibHVyUHJpdmF0ZS5qcz82YWVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xyXG4gKi9cbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiO1xubGV0IHNlbGVjdG9ycztcblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCkge1xuICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdO1xuICBpZiAoIXN0YW5kYXJkU2lkZWJhclZpZXcpIHJldHVybiBudWxsO1xuICBsZXQgZGVmYXVsdENsYXNzTmFtZSA9IHJlbW92ZURhKHN0YW5kYXJkU2lkZWJhclZpZXcuc3RhbmRhcmRTaWRlYmFyVmlldyk7XG4gIGxldCBzZWxlY3RzID0gW107XG4gIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApO1xuICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucGF5bWVudFNvdXJjZVJvdylbMF0ucGF5bWVudFNvdXJjZVJvdyl9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnN1YlRleHQgJiYgZS5kZXNjcmlwdGlvbldyYXBwZXIpWzBdLnN1YlRleHQpfWApO1xuICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUudXNlclNldHRpbmdzQWNjb3VudClbMF0udXNlclNldHRpbmdzQWNjb3VudCl9IGRpdjpudGgtY2hpbGQoMik+ZGl2Om50aC1jaGlsZCgyKT4uJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS52aWV3Qm9keSlbMF0udmlld0JvZHkpfWApO1xuICByZXR1cm4gc2VsZWN0cztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGEoY2xhc3NOYW1lKSB7XG4gIGlmICghY2xhc3NOYW1lKSByZXR1cm4gY2xhc3NOYW1lO1xuICByZXR1cm4gY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhZS5zdGFydHNXaXRoKFwiZGEtXCIpKS5qb2luKFwiIFwiKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJsdXJQcml2YXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICBlbmFibGUoKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzIHx8IGdldFNlbGVjdG9ycygpO1xuICAgIGlmICghc2VsZWN0b3JzKSBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc2VsZWN0b3JzIHRvIGJsdXIgcGVyc29ubmFsIGluZm9ybWF0aW9ucy5cIikpO1xuICAgIERPTVRvb2xzLmFkZFN0eWxlKFwiYmx1clByaXZhdGVcIiwgYFxuJHtzZWxlY3RvcnNbMF19LCAke3NlbGVjdG9yc1sxXX0sICR7c2VsZWN0b3JzWzJdfSB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKTtcbiAgICBmaWx0ZXI6IGJsdXIoNHB4KTtcbiAgICBvcGFjaXR5OiAuODtcbn1cblxuJHtzZWxlY3RvcnNbMF19OmhvdmVyLCAke3NlbGVjdG9yc1sxXX06aG92ZXIsICR7c2VsZWN0b3JzWzJdfTpob3ZlciB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA5LC42OCwuNTMpO1xuICAgIGZpbHRlcjogbm9uZTtcbiAgICBvcGFjaXR5OiAxO1xufWApO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgIERPTVRvb2xzLnJlbW92ZVN0eWxlKFwiYmx1clByaXZhdGVcIik7XG4gIH1cblxufSgpOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/blurPrivate.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/**\r\n * Credits to @hellbound1337 on github for the css\r\n */\n\n\nlet selectors;\nconst removeDa = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeDa;\n\nfunction getSelectors() {\n let standardSidebarView = BDModules.get(e => e.standardSidebarView)[0];\n if (!standardSidebarView) return null;\n let defaultClassName = removeDa(standardSidebarView.standardSidebarView);\n let selects = [];\n selects.push(`#app-mount .${defaultClassName} .payment-info .${removeDa(BDModules.get(e => e.description && typeof e.description === \"string\" && e.description.includes(\"formText\"))[0].description)}`);\n selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.paymentSourceRow)[0].paymentSourceRow)} .${removeDa(BDModules.get(e => e.subText && e.descriptionWrapper)[0].subText)}`);\n selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.userSettingsAccount)[0].userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${removeDa(BDModules.get(e => e.viewBody)[0].viewBody)}`);\n return selects;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class BlurPrivate {\n constructor() {\n this.enabled = false;\n }\n\n enable() {\n if (this.enabled) return;\n this.enabled = true;\n selectors = selectors || getSelectors();\n if (!selectors) console.error(new Error(\"Couldn't find selectors to blur personnal informations.\"));\n _domtools__WEBPACK_IMPORTED_MODULE_0__[\"default\"].addStyle(\"blurPrivate\", `\n${selectors[0]}, ${selectors[1]}, ${selectors[2]} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${selectors[0]}:hover, ${selectors[1]}:hover, ${selectors[2]}:hover {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`);\n }\n\n disable() {\n if (!this.enabled) return;\n this.enabled = false;\n _domtools__WEBPACK_IMPORTED_MODULE_0__[\"default\"].removeStyle(\"blurPrivate\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9ibHVyUHJpdmF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9ibHVyUHJpdmF0ZS5qcz82YWVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xyXG4gKi9cbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5sZXQgc2VsZWN0b3JzO1xuY29uc3QgcmVtb3ZlRGEgPSBVdGlscy5yZW1vdmVEYTtcblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCkge1xuICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdO1xuICBpZiAoIXN0YW5kYXJkU2lkZWJhclZpZXcpIHJldHVybiBudWxsO1xuICBsZXQgZGVmYXVsdENsYXNzTmFtZSA9IHJlbW92ZURhKHN0YW5kYXJkU2lkZWJhclZpZXcuc3RhbmRhcmRTaWRlYmFyVmlldyk7XG4gIGxldCBzZWxlY3RzID0gW107XG4gIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApO1xuICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucGF5bWVudFNvdXJjZVJvdylbMF0ucGF5bWVudFNvdXJjZVJvdyl9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnN1YlRleHQgJiYgZS5kZXNjcmlwdGlvbldyYXBwZXIpWzBdLnN1YlRleHQpfWApO1xuICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUudXNlclNldHRpbmdzQWNjb3VudClbMF0udXNlclNldHRpbmdzQWNjb3VudCl9IGRpdjpudGgtY2hpbGQoMik+ZGl2Om50aC1jaGlsZCgyKT4uJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS52aWV3Qm9keSlbMF0udmlld0JvZHkpfWApO1xuICByZXR1cm4gc2VsZWN0cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJsdXJQcml2YXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICBlbmFibGUoKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzIHx8IGdldFNlbGVjdG9ycygpO1xuICAgIGlmICghc2VsZWN0b3JzKSBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc2VsZWN0b3JzIHRvIGJsdXIgcGVyc29ubmFsIGluZm9ybWF0aW9ucy5cIikpO1xuICAgIERPTVRvb2xzLmFkZFN0eWxlKFwiYmx1clByaXZhdGVcIiwgYFxuJHtzZWxlY3RvcnNbMF19LCAke3NlbGVjdG9yc1sxXX0sICR7c2VsZWN0b3JzWzJdfSB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKTtcbiAgICBmaWx0ZXI6IGJsdXIoNHB4KTtcbiAgICBvcGFjaXR5OiAuODtcbn1cblxuJHtzZWxlY3RvcnNbMF19OmhvdmVyLCAke3NlbGVjdG9yc1sxXX06aG92ZXIsICR7c2VsZWN0b3JzWzJdfTpob3ZlciB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA5LC42OCwuNTMpO1xuICAgIGZpbHRlcjogbm9uZTtcbiAgICBvcGFjaXR5OiAxO1xufWApO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgIERPTVRvb2xzLnJlbW92ZVN0eWxlKFwiYmx1clByaXZhdGVcIik7XG4gIH1cblxufSgpOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/blurPrivate.js\n"); /***/ }), @@ -251,7 +251,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0gl /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _settingsPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settingsPanel */ \"./src/modules/settingsPanel.js\");\n/* harmony import */ var _pluginModule__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginModule */ \"./src/modules/pluginModule.js\");\n/* harmony import */ var _themeModule__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./themeModule */ \"./src/modules/themeModule.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _webpackModules__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./webpackModules */ \"./src/modules/webpackModules.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _ui_bdLogo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../ui/bdLogo */ \"./src/ui/bdLogo.js\");\n/* harmony import */ var _ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../ui/tooltipWrap */ \"./src/ui/tooltipWrap.js\");\n/* harmony import */ var _svg_lightcord__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../svg/lightcord */ \"./src/svg/lightcord.jsx\");\n/* harmony import */ var _pluginCertifier__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./pluginCertifier */ \"./src/modules/pluginCertifier.js\");\n/* harmony import */ var _distant__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./distant */ \"./src/modules/distant.js\");\n/* harmony import */ var _emojiModule__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./emojiModule */ \"./src/modules/emojiModule.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction Core() {// Object.assign(bdConfig, __non_webpack_require__(DataStore.configFile));\n // this.init();\n}\n\nCore.prototype.setConfig = function (config) {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"], config);\n};\n\nCore.prototype.init = async function () {\n if (!Array.prototype.flat) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Not Supported\", \"BetterDiscord v\" + _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"] + \" does not support this old version (\" + _0globals__WEBPACK_IMPORTED_MODULE_0__[\"currentDiscordVersion\"] + \") of Discord. Please update your Discord installation before proceeding.\");\n return;\n }\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].version < _0globals__WEBPACK_IMPORTED_MODULE_0__[\"minSupportedVersion\"]) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Not Supported\", \"BetterDiscord v\" + _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].version + \" (your version)\" + \" is not supported by the latest js (\" + _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"] + \").

Please download the latest version from GitHub\");\n return;\n }\n\n if (window.ED) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Not Supported\", \"BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.\");\n return;\n }\n\n if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes(\"Patched\")) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Not Supported\", \"BandagedBD does not work with Powercord. Please uninstall one of them.\");\n return;\n }\n\n const latestLocalVersion = _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].updater ? _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].updater.LatestVersion : _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].latestVersion;\n\n if (latestLocalVersion > _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].version) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(\"Update Available\", [`There is an update available for BandagedBD's Injector (${latestLocalVersion}).`, \"You can either update and restart now, or later.\"], {\n confirmText: \"Update Now\",\n cancelText: \"Maybe Later\",\n onConfirm: async () => {\n const onUpdateFailed = () => {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Could Not Update\", `Unable to update automatically, please download the installer and reinstall normally.

Download Installer`);\n };\n\n try {\n const didUpdate = await this.updateInjector();\n if (!didUpdate) return onUpdateFailed();\n\n const app = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n app.relaunch();\n app.exit();\n } catch (err) {\n onUpdateFailed();\n }\n }\n });\n }\n\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n this.initSettings();\n await this.checkForGuilds();\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].initialize();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Updating Settings\");\n _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initializeSettings();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n await _pluginModule__WEBPACK_IMPORTED_MODULE_4__[\"default\"].loadPlugins();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n await _themeModule__WEBPACK_IMPORTED_MODULE_5__[\"default\"].loadThemes();\n _domtools__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addStyle(\"customcss\", atob(_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getBDData(\"bdcustomcss\")));\n window.addEventListener(\"beforeunload\", function () {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-dc-0\"]) document.querySelector(\".btn.btn-disconnect\").click();\n });\n _pluginCertifier__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n if (document.getElementsByClassName(\"bd-loaderv2\").length) document.getElementsByClassName(\"bd-loaderv2\")[0].remove();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Main Observer\");\n this.initObserver(); // Show loading errors\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-1\"]) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Collecting Startup Errors\");\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showContentErrors({\n plugins: _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdpluginErrors\"],\n themes: _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdthemeErrors\"]\n });\n }\n\n const previousVersion = _dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getBDData(\"version\");\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"] > previousVersion) {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdChangelog\"]) this.showChangelogModal(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdChangelog\"]);\n _dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].setBDData(\"version\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"]);\n }\n\n await _emojiModule__WEBPACK_IMPORTED_MODULE_14__[\"default\"].init();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchSocial.bind(this), \"BD Social Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildPills.bind(this), \"BD Guild Pills Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildListItems.bind(this), \"BD Guild List Items Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildSeparator.bind(this), \"BD Guild Separator Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchMessageHeader.bind(this), \"BD Badge Chat Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchMemberList.bind(this), \"BD Badge Member List Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchAttachment.bind(this), \"LC Plugin Certifier Patch\")();\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].haveInstalledDefault) {\n let alert = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"First Installation\", \"As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.\");\n await new Promise(resolve => {\n alert.onClose(resolve);\n });\n }\n\n const logo = document.querySelector(\"#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark\");\n\n if (logo) {\n logo.innerHTML = `\n \n \n \n`;\n }\n};\n\nCore.prototype.checkForGuilds = function () {\n let timesChecked = 0;\n return new Promise(resolve => {\n const checkForGuilds = function () {\n const wrapper = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].guildClasses.wrapper.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper}`).length > 0) timesChecked++;\n const guild = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].guildClasses.listItem.split(\" \")[0];\n const blob = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].guildClasses.blobContainer.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].deferLoaded = true);else if (timesChecked >= 50) return resolve(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].deferLoaded = true);\n setTimeout(checkForGuilds, 100);\n };\n\n if (document.readyState != \"loading\") setTimeout(checkForGuilds, 100);\n document.addEventListener(\"DOMContentLoaded\", () => {\n setTimeout(checkForGuilds, 100);\n });\n });\n};\n\nCore.prototype.injectExternals = async function () {\n await _domtools__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addScript(\"ace-script\", \"https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js\");\n if (window.require.original) window.require = window.require.original;\n};\n\nCore.prototype.initSettings = function () {\n _dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n\n if (!_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSettingGroup(\"settings\") && !_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSettingGroup(\"rpc\")) {\n if (!_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSettingGroup(\"settings\")) {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"], _0globals__WEBPACK_IMPORTED_MODULE_0__[\"defaultCookie\"]);\n }\n\n if (!_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSettingGroup(\"rpc\")) {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"], _0globals__WEBPACK_IMPORTED_MODULE_0__[\"defaultRPC\"]);\n }\n\n _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].saveSettings();\n } else {\n _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadSettings();\n\n for (const setting in _0globals__WEBPACK_IMPORTED_MODULE_0__[\"defaultCookie\"]) {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][setting] == undefined) {\n _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][setting] = _0globals__WEBPACK_IMPORTED_MODULE_0__[\"defaultCookie\"][setting];\n _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].saveSettings();\n }\n }\n }\n};\n\nCore.prototype.initObserver = function () {\n const mainObserver = new MutationObserver(mutations => {\n for (let i = 0, mlen = mutations.length; i < mlen; i++) {\n const mutation = mutations[i];\n if (typeof _pluginModule__WEBPACK_IMPORTED_MODULE_4__[\"default\"] !== \"undefined\") _pluginModule__WEBPACK_IMPORTED_MODULE_4__[\"default\"].rawObserver(mutation); // if there was nothing added, skip\n\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) continue;\n const node = mutation.addedNodes[0];\n let [classNameLayer, classNameSocialLinks] = [BDModules.get(e => e.layer && typeof e.layer === \"string\" && e.animating)[0].layer, BDModules.get(e => e.socialLinks && typeof e.socialLinks === \"string\")[0].socialLinks];\n\n if (node.classList.contains(classNameLayer)) {\n if (node.getElementsByClassName(\"guild-settings-base-section\").length) node.setAttribute(\"layer-id\", \"server-settings\");\n\n if (node.getElementsByClassName(classNameSocialLinks).length) {\n node.setAttribute(\"layer-id\", \"user-settings\");\n node.setAttribute(\"id\", \"user-settings\");\n if (!document.getElementById(\"bd-settings-sidebar\")) _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].renderSidebar();\n }\n }\n\n if (node.parentElement == document.body && node.querySelector(\"#ace_settingsmenu\")) node.id = \"ace_settingsmenu_container\"; // Emoji Picker\n //node.getElementsByClassName(\"emojiPicker-3m1S-j\").length && !node.querySelector(\".emojiPicker-3m1S-j\").parentElement.classList.contains(\"animatorLeft-1EQxU0\")\n //if (node.classList.contains(classNameLayer2) && node.getElementsByClassName(classNameEmojiPicker).length && !node.querySelector(\".\"+classNameEmojiPicker).parentElement.classList.contains(classNameAnimatorLeft)) quickEmoteMenu.obsCallback(node);\n }\n });\n mainObserver.observe(document, {\n childList: true,\n subtree: true\n });\n};\n\nCore.prototype.showChangelogModal = function (options = {}) {\n return _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showChangelogModal(options);\n};\n\nCore.prototype.alert = function (title, content) {\n return _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(title, content);\n};\n\nCore.prototype.patchSocial = function () {\n if (this.socialPatch) return;\n const TabBar = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"TabBar\");\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!TabBar) return;\n this.socialPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(TabBar.prototype, \"render\", {\n after: data => {\n const children = data.returnValue.props.children;\n if (!children || !children.length || children.length < 3) return;\n if (children[children.length - 3].type.displayName !== \"Separator\") return;\n if (!children[children.length - 2].type.toString().includes(\"socialLinks\")) return;\n\n if (Anchor) {\n let socialModule1 = BDModules.get(e => e.socialLinks)[0];\n const original = children[children.length - 2].type;\n\n const newOne = function () {\n const returnVal = original(...arguments);\n returnVal.props.children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"Lightcord\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link \" + socialModule1.link,\n href: \"https://github.com/Lightcord/Lightcord\",\n title: \"Lightcord\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_svg_lightcord__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n }))));\n returnVal.props.children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"BandagedBD\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link \" + socialModule1.link,\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_bdLogo__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n }))));\n return returnVal;\n };\n\n children[children.length - 2].type = newOne;\n }\n\n let [classNameColorMuted, sizes, classNameVersionHash] = [BDModules.get(e => e.colorMuted)[0].colorMuted, BDModules.get(e => e.size32)[0], BDModules.get(e => e.versionHash)[0].versionHash];\n const injector = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"div\", {\n className: `${classNameColorMuted} ${sizes.size12}`\n }, `Injector ${_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].version}`);\n const versionHash = `(${_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].hash ? _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].hash.substring(0, 7) : _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].branch})`;\n const additional = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"div\", {\n className: `${classNameColorMuted} ${sizes.size12}`\n }, `BBD ${_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"]} `, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"span\", {\n className: classNameVersionHash + \" da-versionHash\"\n }, versionHash));\n const originalVersions = children[children.length - 1].type;\n\n children[children.length - 1].type = function () {\n const returnVal = originalVersions(...arguments);\n returnVal.props.children.splice(returnVal.props.children.length - 1, 0, injector);\n returnVal.props.children.splice(1, 0, additional);\n return returnVal;\n };\n }\n });\n};\n\nconst getGuildClasses = function () {\n const guildsWrapper = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"wrapper\", \"unreadMentionsBar\");\n const guilds = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"guildsError\", \"selected\");\n const pill = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"blobContainer\");\n return Object.assign({}, guildsWrapper, guilds, pill);\n};\n\nCore.prototype.patchGuildListItems = function () {\n if (this.guildListItemsPatch) return;\n const GuildClasses = getGuildClasses();\n const listItemClass = GuildClasses.listItem.split(\" \")[0];\n const blobClass = GuildClasses.blobContainer.split(\" \")[0];\n const reactInstance = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getInternalInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement);\n const GuildComponent = reactInstance.return.type;\n if (!GuildComponent) return;\n this.guildListItemsPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(GuildComponent.prototype, \"render\", {\n after: data => {\n if (data.returnValue && data.thisObject) {\n const returnValue = data.returnValue;\n const guildData = data.thisObject.props;\n returnValue.props.className += \" bd-guild\";\n if (guildData.unread) returnValue.props.className += \" bd-unread\";\n if (guildData.selected) returnValue.props.className += \" bd-selected\";\n if (guildData.audio) returnValue.props.className += \" bd-audio\";\n if (guildData.video) returnValue.props.className += \" bd-video\";\n if (guildData.badge) returnValue.props.className += \" bd-badge\";\n if (guildData.animatable) returnValue.props.className += \" bd-animatable\";\n return returnValue;\n }\n }\n });\n};\n\nCore.prototype.patchGuildPills = function () {\n if (this.guildPillPatch) return;\n const guildPill = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.default && !m.default.displayName && m.default.toString && m.default.toString().includes(\"translate3d\"));\n if (!guildPill) return;\n this.guildPillPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(guildPill, \"default\", {\n after: data => {\n const props = data.methodArguments[0];\n if (props.unread) data.returnValue.props.className += \" bd-unread\";\n if (props.selected) data.returnValue.props.className += \" bd-selected\";\n if (props.hovered) data.returnValue.props.className += \" bd-hovered\";\n return data.returnValue;\n }\n });\n};\n\nCore.prototype.patchGuildSeparator = function () {\n if (this.guildSeparatorPatch) return;\n const Guilds = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByDisplayName(\"Guilds\");\n const guildComponents = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"renderListItem\");\n if (!guildComponents || !Guilds) return;\n\n const GuildSeparator = function () {\n const returnValue = guildComponents.Separator(...arguments);\n returnValue.props.className += \" bd-guild-separator\";\n return returnValue;\n };\n\n this.guildSeparatorPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(Guilds.prototype, \"render\", {\n after: data => {\n data.returnValue.props.children[1].props.children[3].type = GuildSeparator;\n }\n });\n};\n\nCore.prototype.patchAttachment = function () {\n if (this.AttachmentPatch) return;\n const Attachment = BDModules.get(e => e.default && e.default.displayName === \"Attachment\")[0]; // temporary\n\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!Anchor || !Attachment || !Attachment.default) return;\n this.AttachmentPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(Attachment, \"default\", {\n after: data => {\n const attachment = data.methodArguments[0] || null;\n const children = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.returnValue, \"props.children\");\n if (!children || !attachment || !attachment.url) return;\n if (!Array.isArray(children)) return;\n const id = Object(_distant__WEBPACK_IMPORTED_MODULE_13__[\"uuidv4\"])();\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"div\", {\n id: \"certified-\" + id\n }));\n _pluginCertifier__WEBPACK_IMPORTED_MODULE_12__[\"default\"].patch(attachment, \"certified-\" + id);\n }\n });\n};\n\nCore.prototype.patchMessageHeader = function () {\n if (this.messageHeaderPatch) return;\n const MessageHeader = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"MessageTimestamp\");\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!Anchor || !MessageHeader || !MessageHeader.default) return;\n this.messageHeaderPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(MessageHeader, \"default\", {\n after: data => {\n const author = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.methodArguments[0], \"message.author\"); // const header = Utils.getNestedProp(data.returnValue, \"props.children.1.props\");\n\n const children = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.returnValue, \"props.children.1.props.children.1.props.children\");\n if (!children || !author || !author.id) return; // if (header && header.className) header.className += \" \"\n\n if (!Array.isArray(children)) return;\n\n if (author.id === \"249746236008169473\") {\n // Rauenzi: BandagedBD Developer\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"BandagedBD Developer\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-chat-badge\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_bdLogo__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: \"16px\",\n className: \"bd-logo\"\n }))));\n } else if (author.id === \"696481194443014174\" || author.id === \"696003456611385396\") {\n // Not Thomiz: Lightcord Developer, Phorcys: Lightcord Developer\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"Lightcord Developer\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-chat-badge\",\n href: \"https://github.com/Lightcord/Lightcord\",\n title: \"Lightcord\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_svg_lightcord__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n size: \"16px\",\n className: \"bd-logo\"\n }))));\n }\n\n const id = Object(_distant__WEBPACK_IMPORTED_MODULE_13__[\"uuidv4\"])();\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"div\", {\n id: \"badges-\" + id,\n style: {\n display: \"inline\"\n }\n }));\n applyBadges(id, author, true);\n }\n });\n};\n\nfunction applyBadges(id, user, chat) {\n process.nextTick(() => {\n const div = document.getElementById(\"badges-\" + id);\n if (!div || div.childNodes.length > 0) return;\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n _distant__WEBPACK_IMPORTED_MODULE_13__[\"default\"].getBadges(user.id).then(badges => {\n badges.forEach(badge => {\n const props = {\n svg: {\n size: \"16px\",\n className: \"bd-logo\",\n width: \"16px\"\n }\n };\n badge.scopes.forEach(scope => {\n if (scope === \"user\") {\n // require user\n props.user = user;\n }\n });\n\n if (!badge.href) {\n props.Anchor = Anchor;\n props.href = {\n className: chat ? \"bd-chat-badge\" : \"bd-member-badge\",\n title: badge.name,\n target: \"_blank\"\n };\n }\n\n const element = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: badge.name\n }, badge.href ? _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(Anchor, {\n href: badge.href,\n className: chat ? \"bd-chat-badge\" : \"bd-member-badge\",\n title: badge.name,\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(badge.component, props)) : _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(badge.component, props));\n const div2 = document.createElement(\"div\");\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].reactDom.render(element, div2);\n div2.childNodes.forEach(node => {\n div.appendChild(node);\n });\n });\n });\n });\n}\n\nCore.prototype.patchMemberList = function () {\n if (this.memberListPatch) return;\n const MemberListItem = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByDisplayName(\"MemberListItem\");\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!Anchor || !MemberListItem || !MemberListItem.prototype || !MemberListItem.prototype.renderDecorators) return;\n this.memberListPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(MemberListItem.prototype, \"renderDecorators\", {\n after: data => {\n const user = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.thisObject, \"props.user\");\n const children = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.returnValue, \"props.children\");\n if (!children || !user || !user.id) return; // if (header && header.className) header.className += \" \"\n\n if (!Array.isArray(children)) return;\n\n if (user.id === \"249746236008169473\") {\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"BandagedBD Developer\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-member-badge\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_bdLogo__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: \"16px\",\n className: \"bd-logo\"\n }))));\n } else if (user.id === \"696481194443014174\" || user.id === \"696003456611385396\") {\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"Lightcord Developer\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-member-badge\",\n href: \"https://github.com/Lightcord/Lightcord\",\n title: \"Lightcord\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_svg_lightcord__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n size: \"32px\",\n className: \"bd-logo\"\n }))));\n }\n\n const id = Object(_distant__WEBPACK_IMPORTED_MODULE_13__[\"uuidv4\"])();\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"div\", {\n id: \"badges-\" + id\n }));\n applyBadges(id, user, false);\n }\n });\n};\n\nCore.prototype.updateInjector = async function () {\n const injectionPath = _dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].injectionPath;\n if (!injectionPath) return false;\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const path = __webpack_require__(/*! path */ \"path\");\n\n const rmrf = __webpack_require__(/*! rimraf */ \"rimraf\");\n\n const yauzl = __webpack_require__(/*! yauzl */ \"yauzl\");\n\n const mkdirp = __webpack_require__(/*! mkdirp */ \"mkdirp\");\n\n const request =\n /*require(\"request\");*/\n null;\n const parentPath = path.resolve(injectionPath, \"..\");\n const folderName = path.basename(injectionPath);\n const zipLink = \"https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip\";\n const savedZip = path.resolve(parentPath, \"injector.zip\");\n const extractedFolder = path.resolve(parentPath, \"BetterDiscordApp-injector\"); // Download the injector zip file\n\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Downloading \" + zipLink);\n let success = await new Promise(resolve => {\n request.get({\n url: zipLink,\n encoding: null\n }, async (error, response, body) => {\n if (error || response.statusCode !== 200) return resolve(false); // Save a backup in case someone has their own copy\n\n const alreadyExists = await new Promise(res => fs.exists(savedZip, res));\n if (alreadyExists) await new Promise(res => fs.rename(savedZip, `${savedZip}.bak${Math.round(performance.now())}`, res));\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Writing \" + savedZip);\n fs.writeFile(savedZip, body, err => resolve(!err));\n });\n });\n if (!success) return success; // Check and delete rename extraction\n\n const alreadyExists = await new Promise(res => fs.exists(extractedFolder, res));\n if (alreadyExists) await new Promise(res => fs.rename(extractedFolder, `${extractedFolder}.bak${Math.round(performance.now())}`, res)); // Unzip the downloaded zip file\n\n const zipfile = await new Promise(r => yauzl.open(savedZip, {\n lazyEntries: true\n }, (err, zip) => r(zip)));\n zipfile.on(\"entry\", function (entry) {\n // Skip directories, they are handled with mkdirp\n if (entry.fileName.endsWith(\"/\")) return zipfile.readEntry();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Extracting \" + entry.fileName); // Make any needed parent directories\n\n const fullPath = path.resolve(parentPath, entry.fileName);\n mkdirp.sync(path.dirname(fullPath));\n zipfile.openReadStream(entry, function (err, readStream) {\n if (err) return success = false;\n readStream.on(\"end\", function () {\n zipfile.readEntry();\n }); // Go to next file after this\n\n readStream.pipe(fs.createWriteStream(fullPath));\n });\n });\n zipfile.readEntry(); // Start reading\n // Wait for the final file to finish\n\n await new Promise(resolve => zipfile.once(\"end\", resolve)); // Save a backup in case something goes wrong during final step\n\n const backupFolder = path.resolve(parentPath, `${folderName}.bak${Math.round(performance.now())}`);\n await new Promise(resolve => fs.rename(injectionPath, backupFolder, resolve)); // Rename the extracted folder to what it should be\n\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", `Renaming ${path.basename(extractedFolder)} to ${folderName}`);\n success = await new Promise(resolve => fs.rename(extractedFolder, injectionPath, err => resolve(!err)));\n\n if (!success) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].err(\"InjectorUpdate\", \"Failed to rename the final directory\");\n return success;\n } // If rename had issues, delete what we tried to rename and restore backup\n\n\n if (!success) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].err(\"InjectorUpdate\", \"Something went wrong... restoring backups.\");\n await new Promise(resolve => rmrf(extractedFolder, resolve));\n await new Promise(resolve => fs.rename(backupFolder, injectionPath, resolve));\n return success;\n } // If we've gotten to this point, everything should have gone smoothly.\n // Cleanup the backup folder then remove the zip\n\n\n await new Promise(resolve => rmrf(backupFolder, resolve));\n await new Promise(resolve => fs.unlink(savedZip, resolve));\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Injector Updated!\");\n return success;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new Core());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb3JlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvcmUuanM/MTNjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiZENvbmZpZywgbWluU3VwcG9ydGVkVmVyc2lvbiwgYmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luRXJyb3JzLCBiZHRoZW1lRXJyb3JzLCBiYmRDaGFuZ2Vsb2csIGRlZmF1bHRDb29raWUsIGN1cnJlbnREaXNjb3JkVmVyc2lvbiwgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEMgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBCRExvZ28gZnJvbSBcIi4uL3VpL2JkTG9nb1wiO1xuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9saWdodGNvcmRcIjtcbmltcG9ydCBQbHVnaW5DZXJ0aWZpZXIgZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XG5pbXBvcnQgZGlzdGFudCwgeyB1dWlkdjQgfSBmcm9tIFwiLi9kaXN0YW50XCI7XG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIjtcblxuZnVuY3Rpb24gQ29yZSgpIHsvLyBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhEYXRhU3RvcmUuY29uZmlnRmlsZSkpO1xuICAvLyB0aGlzLmluaXQoKTtcbn1cblxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBjb25maWcpO1xufTtcblxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgaWYgKCFBcnJheS5wcm90b3R5cGUuZmxhdCkge1xuICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmJkVmVyc2lvbiArIFwiIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvbGQgdmVyc2lvbiAoXCIgKyBjdXJyZW50RGlzY29yZFZlcnNpb24gKyBcIikgb2YgRGlzY29yZC4gUGxlYXNlIHVwZGF0ZSB5b3VyIERpc2NvcmQgaW5zdGFsbGF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nLlwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYmRDb25maWcudmVyc2lvbiA8IG1pblN1cHBvcnRlZFZlcnNpb24pIHtcbiAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJkQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIGJiZFZlcnNpb24gKyBcIikuPGJyPjxicj4gUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+R2l0SHViPC9hPlwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAod2luZG93LkVEKSB7XG4gICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAod2luZG93LldlYlNvY2tldCAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUgJiYgd2luZG93LldlYlNvY2tldC5uYW1lLmluY2x1ZGVzKFwiUGF0Y2hlZFwiKSkge1xuICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIFBvd2VyY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbGF0ZXN0TG9jYWxWZXJzaW9uID0gYmRDb25maWcudXBkYXRlciA/IGJkQ29uZmlnLnVwZGF0ZXIuTGF0ZXN0VmVyc2lvbiA6IGJkQ29uZmlnLmxhdGVzdFZlcnNpb247XG5cbiAgaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IGJkQ29uZmlnLnZlcnNpb24pIHtcbiAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJVcGRhdGUgQXZhaWxhYmxlXCIsIFtgVGhlcmUgaXMgYW4gdXBkYXRlIGF2YWlsYWJsZSBmb3IgQmFuZGFnZWRCRCdzIEluamVjdG9yICgke2xhdGVzdExvY2FsVmVyc2lvbn0pLmAsIFwiWW91IGNhbiBlaXRoZXIgdXBkYXRlIGFuZCByZXN0YXJ0IG5vdywgb3IgbGF0ZXIuXCJdLCB7XG4gICAgICBjb25maXJtVGV4dDogXCJVcGRhdGUgTm93XCIsXG4gICAgICBjYW5jZWxUZXh0OiBcIk1heWJlIExhdGVyXCIsXG4gICAgICBvbkNvbmZpcm06IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgb25VcGRhdGVGYWlsZWQgPSAoKSA9PiB7XG4gICAgICAgICAgVXRpbHMuYWxlcnQoXCJDb3VsZCBOb3QgVXBkYXRlXCIsIGBVbmFibGUgdG8gdXBkYXRlIGF1dG9tYXRpY2FsbHksIHBsZWFzZSBkb3dubG9hZCB0aGUgaW5zdGFsbGVyIGFuZCByZWluc3RhbGwgbm9ybWFsbHkuPGJyIC8+PGJyIC8+PGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5Eb3dubG9hZCBJbnN0YWxsZXI8L2E+YCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XG4gICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xuXG4gICAgICAgICAgY29uc3QgYXBwID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XG5cbiAgICAgICAgICBhcHAucmVsYXVuY2goKTtcbiAgICAgICAgICBhcHAuZXhpdCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBvblVwZGF0ZUZhaWxlZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xuICB0aGlzLmluaXRTZXR0aW5ncygpO1xuICBhd2FpdCB0aGlzLmNoZWNrRm9yR3VpbGRzKCk7XG4gIEJEVjIuaW5pdGlhbGl6ZSgpO1xuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiVXBkYXRpbmcgU2V0dGluZ3NcIik7XG4gIHNldHRpbmdzUGFuZWwuaW5pdGlhbGl6ZVNldHRpbmdzKCk7XG4gIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XG4gIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2lucygpO1xuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XG4gIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZXMoKTtcbiAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIGF0b2IoRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpKSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZGMtMFwiXSkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idG4uYnRuLWRpc2Nvbm5lY3RcIikuY2xpY2soKTtcbiAgfSk7XG4gIFBsdWdpbkNlcnRpZmllci5zdGFydCgpO1xuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpLmxlbmd0aCkgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XG4gIHRoaXMuaW5pdE9ic2VydmVyKCk7IC8vIFNob3cgbG9hZGluZyBlcnJvcnNcblxuICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIHtcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcbiAgICBVdGlscy5zaG93Q29udGVudEVycm9ycyh7XG4gICAgICBwbHVnaW5zOiBiZHBsdWdpbkVycm9ycyxcbiAgICAgIHRoZW1lczogYmR0aGVtZUVycm9yc1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XG5cbiAgaWYgKGJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcbiAgICBpZiAoYmJkQ2hhbmdlbG9nKSB0aGlzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO1xuICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJ2ZXJzaW9uXCIsIGJiZFZlcnNpb24pO1xuICB9XG5cbiAgYXdhaXQgRW1vamlNb2R1bGUuaW5pdCgpO1xuICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoU29jaWFsLmJpbmQodGhpcyksIFwiQkQgU29jaWFsIFBhdGNoXCIpKCk7XG4gIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFBpbGxzLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgUGlsbHMgUGF0Y2hcIikoKTtcbiAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkTGlzdEl0ZW1zLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgTGlzdCBJdGVtcyBQYXRjaFwiKSgpO1xuICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRTZXBhcmF0b3IuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBTZXBhcmF0b3IgUGF0Y2hcIikoKTtcbiAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lc3NhZ2VIZWFkZXIuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBDaGF0IFBhdGNoXCIpKCk7XG4gIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZW1iZXJMaXN0LmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgTWVtYmVyIExpc3QgUGF0Y2hcIikoKTtcbiAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dGFjaG1lbnQuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XG5cbiAgaWYgKGJkQ29uZmlnLmhhdmVJbnN0YWxsZWREZWZhdWx0KSB7XG4gICAgbGV0IGFsZXJ0ID0gVXRpbHMuYWxlcnQoXCJGaXJzdCBJbnN0YWxsYXRpb25cIiwgXCJBcyBpdCBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaW5zdGFsbCBMaWdodGNvcmQsIFdlIGFkZGVkIHR3byBkZWZhdWx0IHRoZW1lcyBhbmQgb25lIGRlZmF1bHQgcGx1Z2luIGluIHlvdXIgcGx1Z2luL3RoZW1lIGZvbGRlci4gQ2hlY2sgaXQgaW4gdGhlIFBsdWdpbi9UaGVtZSBzZXR0aW5ncy5cIik7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBhbGVydC5vbkNsb3NlKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbG9nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gZGl2LnR5cGVXaW5kb3dzLTF6YS1uNy53aXRoRnJhbWUtaGFZbHRJLnRpdGxlQmFyLUFDNHBHVi5ob3Jpem9udGFsUmV2ZXJzZS0zdFJqWTcuZmxleC0xTzFHS1kuZGlyZWN0aW9uUm93UmV2ZXJzZS1tOElqSXEuanVzdGlmeVN0YXJ0LTJOREZ6aS5hbGlnblN0cmV0Y2gtRHBHUGYzLmRhLXR5cGVXaW5kb3dzLmRhLXdpdGhGcmFtZS5kYS10aXRsZUJhci5kYS1ob3Jpem9udGFsUmV2ZXJzZS5kYS1mbGV4LmRhLWRpcmVjdGlvblJvd1JldmVyc2UuZGEtanVzdGlmeVN0YXJ0LmRhLWFsaWduU3RyZXRjaCA+IGRpdi53b3JkbWFya1dpbmRvd3MtMXYwbFlELndvcmRtYXJrLTJpRERmbS5kYS13b3JkbWFya1dpbmRvd3MuZGEtd29yZG1hcmtcIik7XG5cbiAgaWYgKGxvZ28pIHtcbiAgICBsb2dvLmlubmVySFRNTCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIxMFwiIHdpZHRoPVwiNzBcIiB2aWV3Qm94PVwiMCAwIDcyLjU0IDEwXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTVweCwgbWFyZ2luLXRvcDogMTBweFwiPlxuICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTQ0LjgxLDkuNjdWNi4zM2MwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxQTMuNTMsMy41MywwLDAsMCw0Ni4yLDNjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNjdjMCwyLjIxLDEuODksMy4zMywzLjc3LDMuMzNhMy44NywzLjg3LDAsMCwwLDMuNDUtMi4xOGwtMi4xMi0xQzQ3LDExLjE3LDQ0LjgxLDEwLjg1LDQ0LjgxLDkuNjdaTTEwLjY4LDEyLjg5aDIuNDFWMy4xN0gxMC42OFpNNzEuNzYsMy4xNEg2OC4xOVY3LjIzTDcwLjU3LDkuNHYtNGgxLjI3Yy44MSwwLDEuMjEuNDEsMS4yMSwxdjNjMCwuNjMtLjM4LDEuMDUtMS4yMSwxLjA1SDY4LjE4djIuMzFoMy41N2MxLjkyLDAsMy43Mi0xLDMuNzItMy4yVjYuMzlDNzUuNDgsNC4xMyw3My42OCwzLjE0LDcxLjc2LDMuMTRaTTU0LjIyLDNjLTIsMC00LDEuMS00LDMuMzRWOS42NmMwLDIuMjMsMiwzLjM0LDQsMy4zNHMzLjk1LTEuMTEsMy45NS0zLjM0VjYuMzRDNTguMTksNC4xMSw1Ni4yLDMsNTQuMjIsM1ptMS41NSw2LjY2YzAsLjctLjc4LDEuMDYtMS41NCwxLjA2cy0xLjU1LS4zNS0xLjU1LTEuMDZWNi4zNGMwLS43Mi43NS0xLjEsMS41LTEuMXMxLjU5LjM1LDEuNTksMS4xWk02Ni44NCw2LjM0YzAtMi4yOS0xLjU4LTMuMi0zLjU1LTMuMkg1OS40NnY5LjczaDIuNDVWOS43N2guNDNsMi4yMiwzLjA5aDNMNjUsOS41MkM2Ni4xMyw5LjE1LDY2Ljg0LDguMTQsNjYuODQsNi4zNFpNNjMuMzMsNy42NUg2MS45MVY1LjQzaDEuNDJBMS4xMSwxLjExLDAsMSwxLDYzLjMzLDcuNjVaTTI5LjgzLDEzaDIuNDJWMy4wNkgyOS44M1Y2LjczbC0zLDBWMy4wOUgyNC43djkuNzhoMi4xNFY4LjY4bDMsMFpNMTcuMTYsOS43NlY2LjQyYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFhMy41NSwzLjU1LDAsMCwwLTMuMzYtMi4yNGMtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS43NmMwLDIuMjEsMiwzLjE1LDMuOSwzLjE1czMuNTgtMSwzLjU4LTNWNy41OEgxOC43OWwwLDEuMzZIMjAuM3YuNzdDMjAuMywxMC45MiwxNy4xNiwxMC45NCwxNy4xNiw5Ljc2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtMi45MyAtMylcIi8+XG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjM1LjkxIDAuMDYgMzguNDMgMC4wNiAzOC40MyAxLjg0IDM1LjkyIDEuODEgMzUuOTcgMTAgMzMuNTUgMTAgMzMuNDkgMS43NSAzMC45OCAxLjc0IDMwLjk4IDAuMDYgMzMuNDkgMC4wNiAzNS45MSAwLjA2XCIvPlxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIwIDkuOTcgNi41IDEwIDYuNSA3LjYzIDIuNDEgNy42MyAyLjQxIDAuMjYgMCAyLjI2IDAgOS45N1wiLz5cbjwvc3ZnPmA7XG4gIH1cbn07XG5cbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24gKCkge1xuICBsZXQgdGltZXNDaGVja2VkID0gMDtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9YCkubGVuZ3RoID4gMCkgdGltZXNDaGVja2VkKys7XG4gICAgICBjb25zdCBndWlsZCA9IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgIGNvbnN0IGJsb2IgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO2Vsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XG4gICAgfTtcblxuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwibG9hZGluZ1wiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUuaW5qZWN0RXh0ZXJuYWxzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBhd2FpdCBET00uYWRkU2NyaXB0KFwiYWNlLXNjcmlwdFwiLCBcImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2FjZS8xLjIuOS9hY2UuanNcIik7XG4gIGlmICh3aW5kb3cucmVxdWlyZS5vcmlnaW5hbCkgd2luZG93LnJlcXVpcmUgPSB3aW5kb3cucmVxdWlyZS5vcmlnaW5hbDtcbn07XG5cbkNvcmUucHJvdG90eXBlLmluaXRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgRGF0YVN0b3JlLmluaXRpYWxpemUoKTtcblxuICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSAmJiAhRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSkge1xuICAgIGlmICghRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBkZWZhdWx0Q29va2llKTtcbiAgICB9XG5cbiAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIGRlZmF1bHRSUEMpO1xuICAgIH1cblxuICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XG4gIH0gZWxzZSB7XG4gICAgc2V0dGluZ3NQYW5lbC5sb2FkU2V0dGluZ3MoKTtcblxuICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiBkZWZhdWx0Q29va2llKSB7XG4gICAgICBpZiAoc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNldHRpbmdzQ29va2llW3NldHRpbmddID0gZGVmYXVsdENvb2tpZVtzZXR0aW5nXTtcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbkNvcmUucHJvdG90eXBlLmluaXRPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgbWFpbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcbiAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW2ldO1xuICAgICAgaWYgKHR5cGVvZiBwbHVnaW5Nb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIHBsdWdpbk1vZHVsZS5yYXdPYnNlcnZlcihtdXRhdGlvbik7IC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGFkZGVkLCBza2lwXG5cbiAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XG4gICAgICBsZXQgW2NsYXNzTmFtZUxheWVyLCBjbGFzc05hbWVTb2NpYWxMaW5rc10gPSBbQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zb2NpYWxMaW5rcyAmJiB0eXBlb2YgZS5zb2NpYWxMaW5rcyA9PT0gXCJzdHJpbmdcIilbMF0uc29jaWFsTGlua3NdO1xuXG4gICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIpKSB7XG4gICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJndWlsZC1zZXR0aW5ncy1iYXNlLXNlY3Rpb25cIikubGVuZ3RoKSBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xuXG4gICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lU29jaWFsTGlua3MpLmxlbmd0aCkge1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xuICAgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZC1zZXR0aW5ncy1zaWRlYmFyXCIpKSBzZXR0aW5nc1BhbmVsLnJlbmRlclNpZGViYXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5wYXJlbnRFbGVtZW50ID09IGRvY3VtZW50LmJvZHkgJiYgbm9kZS5xdWVyeVNlbGVjdG9yKFwiI2FjZV9zZXR0aW5nc21lbnVcIikpIG5vZGUuaWQgPSBcImFjZV9zZXR0aW5nc21lbnVfY29udGFpbmVyXCI7IC8vIEVtb2ppIFBpY2tlclxuICAgICAgLy9ub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYW5pbWF0b3JMZWZ0LTFFUXhVMFwiKVxuICAgICAgLy9pZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIyKSAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lRW1vamlQaWNrZXIpLmxlbmd0aCAgJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVFbW9qaVBpY2tlcikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lQW5pbWF0b3JMZWZ0KSkgcXVpY2tFbW90ZU1lbnUub2JzQ2FsbGJhY2sobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgbWFpbk9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgc3VidHJlZTogdHJ1ZVxuICB9KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnNob3dDaGFuZ2Vsb2dNb2RhbCA9IGZ1bmN0aW9uIChvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIFV0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zKTtcbn07XG5cbkNvcmUucHJvdG90eXBlLmFsZXJ0ID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50KSB7XG4gIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaFNvY2lhbCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuc29jaWFsUGF0Y2gpIHJldHVybjtcbiAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJUYWJCYXJcIik7XG4gIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICBpZiAoIVRhYkJhcikgcmV0dXJuO1xuICB0aGlzLnNvY2lhbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xuICAgIGFmdGVyOiBkYXRhID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcbiAgICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCB8fCBjaGlsZHJlbi5sZW5ndGggPCAzKSByZXR1cm47XG4gICAgICBpZiAoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gM10udHlwZS5kaXNwbGF5TmFtZSAhPT0gXCJTZXBhcmF0b3JcIikgcmV0dXJuO1xuICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xuXG4gICAgICBpZiAoQW5jaG9yKSB7XG4gICAgICAgIGxldCBzb2NpYWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc29jaWFsTGlua3MpWzBdO1xuICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGU7XG5cbiAgICAgICAgY29uc3QgbmV3T25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7XG4gICAgICAgICAgICBjb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgICAgc2lkZTogXCJ0b3BcIixcbiAgICAgICAgICAgIHRleHQ6IFwiTGlnaHRjb3JkXCJcbiAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIgKyBzb2NpYWxNb2R1bGUxLmxpbmssXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsXG4gICAgICAgICAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcbiAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxuICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7XG4gICAgICAgICAgICBzaXplOiBcIjE2cHhcIixcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wiXG4gICAgICAgICAgfSkpKSk7XG4gICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7XG4gICAgICAgICAgICBjb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgICAgc2lkZTogXCJ0b3BcIixcbiAgICAgICAgICAgIHRleHQ6IFwiQmFuZGFnZWRCRFwiXG4gICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiICsgc29jaWFsTW9kdWxlMS5saW5rLFxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsXG4gICAgICAgICAgICB0aXRsZTogXCJCYW5kYWdlZEJEXCIsXG4gICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7XG4gICAgICAgICAgICBzaXplOiBcIjE2cHhcIixcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wiXG4gICAgICAgICAgfSkpKSk7XG4gICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgfTtcblxuICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlID0gbmV3T25lO1xuICAgICAgfVxuXG4gICAgICBsZXQgW2NsYXNzTmFtZUNvbG9yTXV0ZWQsIHNpemVzLCBjbGFzc05hbWVWZXJzaW9uSGFzaF0gPSBbQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JNdXRlZClbMF0uY29sb3JNdXRlZCwgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUudmVyc2lvbkhhc2gpWzBdLnZlcnNpb25IYXNoXTtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBgJHtjbGFzc05hbWVDb2xvck11dGVkfSAke3NpemVzLnNpemUxMn1gXG4gICAgICB9LCBgSW5qZWN0b3IgJHtiZENvbmZpZy52ZXJzaW9ufWApO1xuICAgICAgY29uc3QgdmVyc2lvbkhhc2ggPSBgKCR7YmRDb25maWcuaGFzaCA/IGJkQ29uZmlnLmhhc2guc3Vic3RyaW5nKDAsIDcpIDogYmRDb25maWcuYnJhbmNofSlgO1xuICAgICAgY29uc3QgYWRkaXRpb25hbCA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YFxuICAgICAgfSwgYEJCRCAke2JiZFZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoICsgXCIgZGEtdmVyc2lvbkhhc2hcIlxuICAgICAgfSwgdmVyc2lvbkhhc2gpKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVmVyc2lvbnMgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlO1xuXG4gICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbFZlcnNpb25zKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5zcGxpY2UocmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLmxlbmd0aCAtIDEsIDAsIGluamVjdG9yKTtcbiAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IGdldEd1aWxkQ2xhc3NlcyA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwid3JhcHBlclwiLCBcInVucmVhZE1lbnRpb25zQmFyXCIpO1xuICBjb25zdCBndWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XG4gIGNvbnN0IHBpbGwgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImJsb2JDb250YWluZXJcIik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZExpc3RJdGVtcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCkgcmV0dXJuO1xuICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcbiAgY29uc3QgbGlzdEl0ZW1DbGFzcyA9IEd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XG4gIGNvbnN0IGJsb2JDbGFzcyA9IEd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcbiAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XG4gIGNvbnN0IEd1aWxkQ29tcG9uZW50ID0gcmVhY3RJbnN0YW5jZS5yZXR1cm4udHlwZTtcbiAgaWYgKCFHdWlsZENvbXBvbmVudCkgcmV0dXJuO1xuICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICBhZnRlcjogZGF0YSA9PiB7XG4gICAgICBpZiAoZGF0YS5yZXR1cm5WYWx1ZSAmJiBkYXRhLnRoaXNPYmplY3QpIHtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlO1xuICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XG4gICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xuICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xuICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcbiAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XG4gICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xuICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcbiAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRQaWxscyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuZ3VpbGRQaWxsUGF0Y2gpIHJldHVybjtcbiAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcbiAgaWYgKCFndWlsZFBpbGwpIHJldHVybjtcbiAgdGhpcy5ndWlsZFBpbGxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKGd1aWxkUGlsbCwgXCJkZWZhdWx0XCIsIHtcbiAgICBhZnRlcjogZGF0YSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xuICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XG4gICAgICBpZiAocHJvcHMuc2VsZWN0ZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XG4gICAgICBpZiAocHJvcHMuaG92ZXJlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtaG92ZXJlZFwiO1xuICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2gpIHJldHVybjtcbiAgY29uc3QgR3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XG4gIGNvbnN0IGd1aWxkQ29tcG9uZW50cyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XG4gIGlmICghZ3VpbGRDb21wb25lbnRzIHx8ICFHdWlsZHMpIHJldHVybjtcblxuICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcbiAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGQtc2VwYXJhdG9yXCI7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9O1xuXG4gIHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkcy5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICBhZnRlcjogZGF0YSA9PiB7XG4gICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuWzNdLnR5cGUgPSBHdWlsZFNlcGFyYXRvcjtcbiAgICB9XG4gIH0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRhY2htZW50ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5BdHRhY2htZW50UGF0Y2gpIHJldHVybjtcbiAgY29uc3QgQXR0YWNobWVudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF0dGFjaG1lbnRcIilbMF07IC8vIHRlbXBvcmFyeVxuXG4gIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICBpZiAoIUFuY2hvciB8fCAhQXR0YWNobWVudCB8fCAhQXR0YWNobWVudC5kZWZhdWx0KSByZXR1cm47XG4gIHRoaXMuQXR0YWNobWVudFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goQXR0YWNobWVudCwgXCJkZWZhdWx0XCIsIHtcbiAgICBhZnRlcjogZGF0YSA9PiB7XG4gICAgICBjb25zdCBhdHRhY2htZW50ID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0gfHwgbnVsbDtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xuICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51cmwpIHJldHVybjtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcbiAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICBjaGlsZHJlbi5wdXNoKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGlkOiBcImNlcnRpZmllZC1cIiArIGlkXG4gICAgICB9KSk7XG4gICAgICBQbHVnaW5DZXJ0aWZpZXIucGF0Y2goYXR0YWNobWVudCwgXCJjZXJ0aWZpZWQtXCIgKyBpZCk7XG4gICAgfVxuICB9KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoTWVzc2FnZUhlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubWVzc2FnZUhlYWRlclBhdGNoKSByZXR1cm47XG4gIGNvbnN0IE1lc3NhZ2VIZWFkZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIk1lc3NhZ2VUaW1lc3RhbXBcIik7XG4gIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICBpZiAoIUFuY2hvciB8fCAhTWVzc2FnZUhlYWRlciB8fCAhTWVzc2FnZUhlYWRlci5kZWZhdWx0KSByZXR1cm47XG4gIHRoaXMubWVzc2FnZUhlYWRlclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVzc2FnZUhlYWRlciwgXCJkZWZhdWx0XCIsIHtcbiAgICBhZnRlcjogZGF0YSA9PiB7XG4gICAgICBjb25zdCBhdXRob3IgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpOyAvLyBjb25zdCBoZWFkZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wc1wiKTtcblxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuXCIpO1xuICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXV0aG9yIHx8ICFhdXRob3IuaWQpIHJldHVybjsgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcblxuICAgICAgaWYgKGF1dGhvci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikge1xuICAgICAgICAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxuICAgICAgICBjaGlsZHJlbi5wdXNoKEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge1xuICAgICAgICAgIGNvbG9yOiBcImJsYWNrXCIsXG4gICAgICAgICAgc2lkZTogXCJ0b3BcIixcbiAgICAgICAgICB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJcbiAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsXG4gICAgICAgICAgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxuICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7XG4gICAgICAgICAgc2l6ZTogXCIxNnB4XCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIlxuICAgICAgICB9KSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoYXV0aG9yLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IGF1dGhvci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIikge1xuICAgICAgICAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7XG4gICAgICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgICAgICBzaWRlOiBcInRvcFwiLFxuICAgICAgICAgIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwiXG4gICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLFxuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIixcbiAgICAgICAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtcbiAgICAgICAgICBzaXplOiBcIjE2cHhcIixcbiAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtbG9nb1wiXG4gICAgICAgIH0pKSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBpZDogXCJiYWRnZXMtXCIgKyBpZCxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGFwcGx5QmFkZ2VzKGlkLCBhdXRob3IsIHRydWUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBhcHBseUJhZGdlcyhpZCwgdXNlciwgY2hhdCkge1xuICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhZGdlcy1cIiArIGlkKTtcbiAgICBpZiAoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSByZXR1cm47XG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgZGlzdGFudC5nZXRCYWRnZXModXNlci5pZCkudGhlbihiYWRnZXMgPT4ge1xuICAgICAgYmFkZ2VzLmZvckVhY2goYmFkZ2UgPT4ge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICBzdmc6IHtcbiAgICAgICAgICAgIHNpemU6IFwiMTZweFwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjE2cHhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgYmFkZ2Uuc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xuICAgICAgICAgIGlmIChzY29wZSA9PT0gXCJ1c2VyXCIpIHtcbiAgICAgICAgICAgIC8vIHJlcXVpcmUgdXNlclxuICAgICAgICAgICAgcHJvcHMudXNlciA9IHVzZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWJhZGdlLmhyZWYpIHtcbiAgICAgICAgICBwcm9wcy5BbmNob3IgPSBBbmNob3I7XG4gICAgICAgICAgcHJvcHMuaHJlZiA9IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIixcbiAgICAgICAgICAgIHRpdGxlOiBiYWRnZS5uYW1lLFxuICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtcbiAgICAgICAgICBjb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIHNpZGU6IFwidG9wXCIsXG4gICAgICAgICAgdGV4dDogYmFkZ2UubmFtZVxuICAgICAgICB9LCBiYWRnZS5ocmVmID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xuICAgICAgICAgIGhyZWY6IGJhZGdlLmhyZWYsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLFxuICAgICAgICAgIHRpdGxlOiBiYWRnZS5uYW1lLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxuICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcykpIDogQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpKTtcbiAgICAgICAgY29uc3QgZGl2MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKGVsZW1lbnQsIGRpdjIpO1xuICAgICAgICBkaXYyLmNoaWxkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lbWJlckxpc3QgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLm1lbWJlckxpc3RQYXRjaCkgcmV0dXJuO1xuICBjb25zdCBNZW1iZXJMaXN0SXRlbSA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWVtYmVyTGlzdEl0ZW1cIik7XG4gIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICBpZiAoIUFuY2hvciB8fCAhTWVtYmVyTGlzdEl0ZW0gfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLnJlbmRlckRlY29yYXRvcnMpIHJldHVybjtcbiAgdGhpcy5tZW1iZXJMaXN0UGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUsIFwicmVuZGVyRGVjb3JhdG9yc1wiLCB7XG4gICAgYWZ0ZXI6IGRhdGEgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS50aGlzT2JqZWN0LCBcInByb3BzLnVzZXJcIik7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcbiAgICAgIGlmICghY2hpbGRyZW4gfHwgIXVzZXIgfHwgIXVzZXIuaWQpIHJldHVybjsgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcblxuICAgICAgaWYgKHVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtcbiAgICAgICAgICBjb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIHNpZGU6IFwidG9wXCIsXG4gICAgICAgICAgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwiXG4gICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsXG4gICAgICAgICAgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxuICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7XG4gICAgICAgICAgc2l6ZTogXCIxNnB4XCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIlxuICAgICAgICB9KSkpKTtcbiAgICAgIH0gZWxzZSBpZiAodXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCB1c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7XG4gICAgICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgICAgICBzaWRlOiBcInRvcFwiLFxuICAgICAgICAgIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwiXG4gICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLFxuICAgICAgICAgIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxuICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge1xuICAgICAgICAgIHNpemU6IFwiMzJweFwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJcbiAgICAgICAgfSkpKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICBjaGlsZHJlbi5wdXNoKEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGlkOiBcImJhZGdlcy1cIiArIGlkXG4gICAgICB9KSk7XG4gICAgICBhcHBseUJhZGdlcyhpZCwgdXNlciwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS51cGRhdGVJbmplY3RvciA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgaW5qZWN0aW9uUGF0aCA9IERhdGFTdG9yZS5pbmplY3Rpb25QYXRoO1xuICBpZiAoIWluamVjdGlvblBhdGgpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcblxuICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5cbiAgY29uc3Qgcm1yZiA9IHJlcXVpcmUoXCJyaW1yYWZcIik7XG5cbiAgY29uc3QgeWF1emwgPSByZXF1aXJlKFwieWF1emxcIik7XG5cbiAgY29uc3QgbWtkaXJwID0gcmVxdWlyZShcIm1rZGlycFwiKTtcblxuICBjb25zdCByZXF1ZXN0ID1cbiAgLypyZXF1aXJlKFwicmVxdWVzdFwiKTsqL1xuICBudWxsO1xuICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5yZXNvbHZlKGluamVjdGlvblBhdGgsIFwiLi5cIik7XG4gIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGluamVjdGlvblBhdGgpO1xuICBjb25zdCB6aXBMaW5rID0gXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL2FyY2hpdmUvaW5qZWN0b3IuemlwXCI7XG4gIGNvbnN0IHNhdmVkWmlwID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiaW5qZWN0b3IuemlwXCIpO1xuICBjb25zdCBleHRyYWN0ZWRGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJCZXR0ZXJEaXNjb3JkQXBwLWluamVjdG9yXCIpOyAvLyBEb3dubG9hZCB0aGUgaW5qZWN0b3IgemlwIGZpbGVcblxuICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkRvd25sb2FkaW5nIFwiICsgemlwTGluayk7XG4gIGxldCBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmVxdWVzdC5nZXQoe1xuICAgICAgdXJsOiB6aXBMaW5rLFxuICAgICAgZW5jb2Rpbmc6IG51bGxcbiAgICB9LCBhc3luYyAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XG4gICAgICBpZiAoZXJyb3IgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSByZXR1cm4gcmVzb2x2ZShmYWxzZSk7IC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21lb25lIGhhcyB0aGVpciBvd24gY29weVxuXG4gICAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhzYXZlZFppcCwgcmVzKSk7XG4gICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XG4gICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIldyaXRpbmcgXCIgKyBzYXZlZFppcCk7XG4gICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcbiAgICB9KTtcbiAgfSk7XG4gIGlmICghc3VjY2VzcykgcmV0dXJuIHN1Y2Nlc3M7IC8vIENoZWNrIGFuZCBkZWxldGUgcmVuYW1lIGV4dHJhY3Rpb25cblxuICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xuICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGAke2V4dHJhY3RlZEZvbGRlcn0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTsgLy8gVW56aXAgdGhlIGRvd25sb2FkZWQgemlwIGZpbGVcblxuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7XG4gICAgbGF6eUVudHJpZXM6IHRydWVcbiAgfSwgKGVyciwgemlwKSA9PiByKHppcCkpKTtcbiAgemlwZmlsZS5vbihcImVudHJ5XCIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcbiAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkV4dHJhY3RpbmcgXCIgKyBlbnRyeS5maWxlTmFtZSk7IC8vIE1ha2UgYW55IG5lZWRlZCBwYXJlbnQgZGlyZWN0b3JpZXNcblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGVudHJ5LmZpbGVOYW1lKTtcbiAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoZnVsbFBhdGgpKTtcbiAgICB6aXBmaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCBmdW5jdGlvbiAoZXJyLCByZWFkU3RyZWFtKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgcmVhZFN0cmVhbS5vbihcImVuZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICB9KTsgLy8gR28gdG8gbmV4dCBmaWxlIGFmdGVyIHRoaXNcblxuICAgICAgcmVhZFN0cmVhbS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZ1bGxQYXRoKSk7XG4gICAgfSk7XG4gIH0pO1xuICB6aXBmaWxlLnJlYWRFbnRyeSgpOyAvLyBTdGFydCByZWFkaW5nXG4gIC8vIFdhaXQgZm9yIHRoZSBmaW5hbCBmaWxlIHRvIGZpbmlzaFxuXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gemlwZmlsZS5vbmNlKFwiZW5kXCIsIHJlc29sdmUpKTsgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBmaW5hbCBzdGVwXG5cbiAgY29uc3QgYmFja3VwRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGAke2ZvbGRlck5hbWV9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCk7XG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGluamVjdGlvblBhdGgsIGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpOyAvLyBSZW5hbWUgdGhlIGV4dHJhY3RlZCBmb2xkZXIgdG8gd2hhdCBpdCBzaG91bGQgYmVcblxuICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBgUmVuYW1pbmcgJHtwYXRoLmJhc2VuYW1lKGV4dHJhY3RlZEZvbGRlcil9IHRvICR7Zm9sZGVyTmFtZX1gKTtcbiAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcblxuICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfSAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxuXG5cbiAgaWYgKCFzdWNjZXNzKSB7XG4gICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uLiByZXN0b3JpbmcgYmFja3Vwcy5cIik7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGV4dHJhY3RlZEZvbGRlciwgcmVzb2x2ZSkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGJhY2t1cEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgcmVzb2x2ZSkpO1xuICAgIHJldHVybiBzdWNjZXNzO1xuICB9IC8vIElmIHdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBldmVyeXRoaW5nIHNob3VsZCBoYXZlIGdvbmUgc21vb3RobHkuXG4gIC8vIENsZWFudXAgdGhlIGJhY2t1cCBmb2xkZXIgdGhlbiByZW1vdmUgdGhlIHppcFxuXG5cbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnVubGluayhzYXZlZFppcCwgcmVzb2x2ZSkpO1xuICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xuICByZXR1cm4gc3VjY2Vzcztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlKCk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _settingsPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settingsPanel */ \"./src/modules/settingsPanel.js\");\n/* harmony import */ var _pluginModule__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginModule */ \"./src/modules/pluginModule.js\");\n/* harmony import */ var _themeModule__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./themeModule */ \"./src/modules/themeModule.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _webpackModules__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./webpackModules */ \"./src/modules/webpackModules.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _ui_bdLogo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../ui/bdLogo */ \"./src/ui/bdLogo.js\");\n/* harmony import */ var _ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../ui/tooltipWrap */ \"./src/ui/tooltipWrap.js\");\n/* harmony import */ var _svg_lightcord__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../svg/lightcord */ \"./src/svg/lightcord.jsx\");\n/* harmony import */ var _pluginCertifier__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./pluginCertifier */ \"./src/modules/pluginCertifier.js\");\n/* harmony import */ var _distant__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./distant */ \"./src/modules/distant.js\");\n/* harmony import */ var _emojiModule__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./emojiModule */ \"./src/modules/emojiModule.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction Core() {// Object.assign(bdConfig, __non_webpack_require__(DataStore.configFile));\n // this.init();\n}\n\nCore.prototype.setConfig = function (config) {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"], config);\n};\n\nCore.prototype.init = async function () {\n if (!Array.prototype.flat) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Not Supported\", \"BetterDiscord v\" + _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"] + \" does not support this old version (\" + _0globals__WEBPACK_IMPORTED_MODULE_0__[\"currentDiscordVersion\"] + \") of Discord. Please update your Discord installation before proceeding.\");\n return;\n }\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].version < _0globals__WEBPACK_IMPORTED_MODULE_0__[\"minSupportedVersion\"]) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Not Supported\", \"BetterDiscord v\" + _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].version + \" (your version)\" + \" is not supported by the latest js (\" + _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"] + \").

Please download the latest version from GitHub\");\n return;\n }\n\n if (window.ED) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Not Supported\", \"BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.\");\n return;\n }\n\n if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes(\"Patched\")) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Not Supported\", \"BandagedBD does not work with Powercord. Please uninstall one of them.\");\n return;\n }\n\n const latestLocalVersion = _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].updater ? _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].updater.LatestVersion : _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].latestVersion;\n\n if (latestLocalVersion > _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].version) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(\"Update Available\", [`There is an update available for BandagedBD's Injector (${latestLocalVersion}).`, \"You can either update and restart now, or later.\"], {\n confirmText: \"Update Now\",\n cancelText: \"Maybe Later\",\n onConfirm: async () => {\n const onUpdateFailed = () => {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Could Not Update\", `Unable to update automatically, please download the installer and reinstall normally.

Download Installer`);\n };\n\n try {\n const didUpdate = await this.updateInjector();\n if (!didUpdate) return onUpdateFailed();\n\n const app = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n app.relaunch();\n app.exit();\n } catch (err) {\n onUpdateFailed();\n }\n }\n });\n }\n\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n this.initSettings();\n await this.checkForGuilds();\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].initialize();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Updating Settings\");\n _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initializeSettings();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n await _pluginModule__WEBPACK_IMPORTED_MODULE_4__[\"default\"].loadPlugins();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n await _themeModule__WEBPACK_IMPORTED_MODULE_5__[\"default\"].loadThemes();\n _domtools__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addStyle(\"customcss\", atob(_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getBDData(\"bdcustomcss\")));\n window.addEventListener(\"beforeunload\", function () {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-dc-0\"]) document.querySelector(\".btn.btn-disconnect\").click();\n });\n _pluginCertifier__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n if (document.getElementsByClassName(\"bd-loaderv2\").length) document.getElementsByClassName(\"bd-loaderv2\")[0].remove();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Main Observer\");\n this.initObserver(); // Show loading errors\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-1\"]) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Collecting Startup Errors\");\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showContentErrors({\n plugins: _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdpluginErrors\"],\n themes: _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdthemeErrors\"]\n });\n }\n\n const previousVersion = _dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getBDData(\"version\");\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"] > previousVersion) {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdChangelog\"]) this.showChangelogModal(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdChangelog\"]);\n _dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].setBDData(\"version\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"]);\n }\n\n const emojiModule = _emojiModule__WEBPACK_IMPORTED_MODULE_14__[\"default\"];\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchSocial.bind(this), \"BD Social Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildPills.bind(this), \"BD Guild Pills Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildListItems.bind(this), \"BD Guild List Items Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildSeparator.bind(this), \"BD Guild Separator Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchMessageHeader.bind(this), \"BD Badge Chat Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchMemberList.bind(this), \"BD Badge Member List Patch\")();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchAttachment.bind(this), \"LC Plugin Certifier Patch\")();\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].haveInstalledDefault) {\n let alert = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"First Installation\", \"As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.\");\n await new Promise(resolve => {\n alert.onClose(resolve);\n });\n }\n\n const logo = document.querySelector(\"#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark\");\n\n if (logo) {\n logo.innerHTML = `\n \n \n \n`;\n }\n};\n\nCore.prototype.checkForGuilds = function () {\n let timesChecked = 0;\n return new Promise(resolve => {\n const checkForGuilds = function () {\n const wrapper = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].guildClasses.wrapper.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper}`).length > 0) timesChecked++;\n const guild = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].guildClasses.listItem.split(\" \")[0];\n const blob = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].guildClasses.blobContainer.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].deferLoaded = true);else if (timesChecked >= 50) return resolve(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].deferLoaded = true);\n setTimeout(checkForGuilds, 100);\n };\n\n if (document.readyState != \"loading\") setTimeout(checkForGuilds, 100);\n document.addEventListener(\"DOMContentLoaded\", () => {\n setTimeout(checkForGuilds, 100);\n });\n });\n};\n\nCore.prototype.injectExternals = async function () {\n await _domtools__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addScript(\"ace-script\", \"https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js\");\n if (window.require.original) window.require = window.require.original;\n};\n\nCore.prototype.initSettings = function () {\n _dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n\n if (!_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSettingGroup(\"settings\") && !_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSettingGroup(\"rpc\")) {\n if (!_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSettingGroup(\"settings\")) {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"], _0globals__WEBPACK_IMPORTED_MODULE_0__[\"defaultCookie\"]);\n }\n\n if (!_dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getSettingGroup(\"rpc\")) {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"], _0globals__WEBPACK_IMPORTED_MODULE_0__[\"defaultRPC\"]);\n }\n\n _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].saveSettings();\n } else {\n _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadSettings();\n\n for (const setting in _0globals__WEBPACK_IMPORTED_MODULE_0__[\"defaultCookie\"]) {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][setting] == undefined) {\n _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][setting] = _0globals__WEBPACK_IMPORTED_MODULE_0__[\"defaultCookie\"][setting];\n _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].saveSettings();\n }\n }\n }\n};\n\nCore.prototype.initObserver = function () {\n const mainObserver = new MutationObserver(mutations => {\n for (let i = 0, mlen = mutations.length; i < mlen; i++) {\n const mutation = mutations[i];\n if (typeof _pluginModule__WEBPACK_IMPORTED_MODULE_4__[\"default\"] !== \"undefined\") _pluginModule__WEBPACK_IMPORTED_MODULE_4__[\"default\"].rawObserver(mutation); // if there was nothing added, skip\n\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) continue;\n const node = mutation.addedNodes[0];\n let [classNameLayer, classNameSocialLinks] = [BDModules.get(e => e.layer && typeof e.layer === \"string\" && e.animating)[0].layer, BDModules.get(e => e.socialLinks && typeof e.socialLinks === \"string\")[0].socialLinks];\n\n if (node.classList.contains(classNameLayer)) {\n if (node.getElementsByClassName(\"guild-settings-base-section\").length) node.setAttribute(\"layer-id\", \"server-settings\");\n\n if (node.getElementsByClassName(classNameSocialLinks).length) {\n node.setAttribute(\"layer-id\", \"user-settings\");\n node.setAttribute(\"id\", \"user-settings\");\n if (!document.getElementById(\"bd-settings-sidebar\")) _settingsPanel__WEBPACK_IMPORTED_MODULE_3__[\"default\"].renderSidebar();\n }\n }\n\n if (node.parentElement == document.body && node.querySelector(\"#ace_settingsmenu\")) node.id = \"ace_settingsmenu_container\"; // Emoji Picker\n //node.getElementsByClassName(\"emojiPicker-3m1S-j\").length && !node.querySelector(\".emojiPicker-3m1S-j\").parentElement.classList.contains(\"animatorLeft-1EQxU0\")\n //if (node.classList.contains(classNameLayer2) && node.getElementsByClassName(classNameEmojiPicker).length && !node.querySelector(\".\"+classNameEmojiPicker).parentElement.classList.contains(classNameAnimatorLeft)) quickEmoteMenu.obsCallback(node);\n }\n });\n mainObserver.observe(document, {\n childList: true,\n subtree: true\n });\n};\n\nCore.prototype.showChangelogModal = function (options = {}) {\n return _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showChangelogModal(options);\n};\n\nCore.prototype.alert = function (title, content) {\n return _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(title, content);\n};\n\nCore.prototype.patchSocial = function () {\n if (this.socialPatch) return;\n const TabBar = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"TabBar\");\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!TabBar) return;\n this.socialPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(TabBar.prototype, \"render\", {\n after: data => {\n const children = data.returnValue.props.children;\n if (!children || !children.length || children.length < 3) return;\n if (children[children.length - 3].type.displayName !== \"Separator\") return;\n if (!children[children.length - 2].type.toString().includes(\"socialLinks\")) return;\n\n if (Anchor) {\n let socialModule1 = BDModules.get(e => e.socialLinks)[0];\n const original = children[children.length - 2].type;\n\n const newOne = function () {\n const returnVal = original(...arguments);\n returnVal.props.children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"Lightcord\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link \" + socialModule1.link,\n href: \"https://github.com/Lightcord/Lightcord\",\n title: \"Lightcord\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_svg_lightcord__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n }))));\n returnVal.props.children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"BandagedBD\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link \" + socialModule1.link,\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_bdLogo__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n }))));\n return returnVal;\n };\n\n children[children.length - 2].type = newOne;\n }\n\n let [classNameColorMuted, sizes, classNameVersionHash] = [BDModules.get(e => e.colorMuted)[0].colorMuted, BDModules.get(e => e.size32)[0], BDModules.get(e => e.versionHash)[0].versionHash];\n const injector = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"div\", {\n className: `${classNameColorMuted} ${sizes.size12}`\n }, `Injector ${_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].version}`);\n const versionHash = `(${_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].hash ? _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].hash.substring(0, 7) : _0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdConfig\"].branch})`;\n const additional = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"div\", {\n className: `${classNameColorMuted} ${sizes.size12}`\n }, `BBD ${_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"]} `, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"span\", {\n className: classNameVersionHash + \" da-versionHash\"\n }, versionHash));\n const originalVersions = children[children.length - 1].type;\n\n children[children.length - 1].type = function () {\n const returnVal = originalVersions(...arguments);\n returnVal.props.children.splice(returnVal.props.children.length - 1, 0, injector);\n returnVal.props.children.splice(1, 0, additional);\n return returnVal;\n };\n }\n });\n};\n\nconst getGuildClasses = function () {\n const guildsWrapper = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"wrapper\", \"unreadMentionsBar\");\n const guilds = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"guildsError\", \"selected\");\n const pill = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"blobContainer\");\n return Object.assign({}, guildsWrapper, guilds, pill);\n};\n\nCore.prototype.patchGuildListItems = function () {\n if (this.guildListItemsPatch) return;\n const GuildClasses = getGuildClasses();\n const listItemClass = GuildClasses.listItem.split(\" \")[0];\n const blobClass = GuildClasses.blobContainer.split(\" \")[0];\n const reactInstance = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getInternalInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement);\n const GuildComponent = reactInstance.return.type;\n if (!GuildComponent) return;\n this.guildListItemsPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(GuildComponent.prototype, \"render\", {\n after: data => {\n if (data.returnValue && data.thisObject) {\n const returnValue = data.returnValue;\n const guildData = data.thisObject.props;\n returnValue.props.className += \" bd-guild\";\n if (guildData.unread) returnValue.props.className += \" bd-unread\";\n if (guildData.selected) returnValue.props.className += \" bd-selected\";\n if (guildData.audio) returnValue.props.className += \" bd-audio\";\n if (guildData.video) returnValue.props.className += \" bd-video\";\n if (guildData.badge) returnValue.props.className += \" bd-badge\";\n if (guildData.animatable) returnValue.props.className += \" bd-animatable\";\n return returnValue;\n }\n }\n });\n};\n\nCore.prototype.patchGuildPills = function () {\n if (this.guildPillPatch) return;\n const guildPill = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.default && !m.default.displayName && m.default.toString && m.default.toString().includes(\"translate3d\"));\n if (!guildPill) return;\n this.guildPillPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(guildPill, \"default\", {\n after: data => {\n const props = data.methodArguments[0];\n if (props.unread) data.returnValue.props.className += \" bd-unread\";\n if (props.selected) data.returnValue.props.className += \" bd-selected\";\n if (props.hovered) data.returnValue.props.className += \" bd-hovered\";\n return data.returnValue;\n }\n });\n};\n\nCore.prototype.patchGuildSeparator = function () {\n if (this.guildSeparatorPatch) return;\n const Guilds = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByDisplayName(\"Guilds\");\n const guildComponents = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"renderListItem\");\n if (!guildComponents || !Guilds) return;\n\n const GuildSeparator = function () {\n const returnValue = guildComponents.Separator(...arguments);\n returnValue.props.className += \" bd-guild-separator\";\n return returnValue;\n };\n\n this.guildSeparatorPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(Guilds.prototype, \"render\", {\n after: data => {\n data.returnValue.props.children[1].props.children[3].type = GuildSeparator;\n }\n });\n};\n\nCore.prototype.patchAttachment = function () {\n if (this.AttachmentPatch) return;\n const Attachment = BDModules.get(e => e.default && e.default.displayName === \"Attachment\")[0]; // temporary\n\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!Anchor || !Attachment || !Attachment.default) return;\n this.AttachmentPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(Attachment, \"default\", {\n after: data => {\n const attachment = data.methodArguments[0] || null;\n const children = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.returnValue, \"props.children\");\n if (!children || !attachment || !attachment.url) return;\n if (!Array.isArray(children)) return;\n const id = Object(_distant__WEBPACK_IMPORTED_MODULE_13__[\"uuidv4\"])();\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"div\", {\n id: \"certified-\" + id\n }));\n _pluginCertifier__WEBPACK_IMPORTED_MODULE_12__[\"default\"].patch(attachment, \"certified-\" + id);\n }\n });\n};\n\nCore.prototype.patchMessageHeader = function () {\n if (this.messageHeaderPatch) return;\n const MessageHeader = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByProps(\"MessageTimestamp\");\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!Anchor || !MessageHeader || !MessageHeader.default) return;\n this.messageHeaderPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(MessageHeader, \"default\", {\n after: data => {\n const author = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.methodArguments[0], \"message.author\"); // const header = Utils.getNestedProp(data.returnValue, \"props.children.1.props\");\n\n const children = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.returnValue, \"props.children.1.props.children.1.props.children\");\n if (!children || !author || !author.id) return; // if (header && header.className) header.className += \" \"\n\n if (!Array.isArray(children)) return;\n\n if (author.id === \"249746236008169473\") {\n // Rauenzi: BandagedBD Developer\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"BandagedBD Developer\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-chat-badge\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_bdLogo__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: \"16px\",\n className: \"bd-logo\"\n }))));\n } else if (author.id === \"696481194443014174\" || author.id === \"696003456611385396\") {\n // Not Thomiz: Lightcord Developer, Phorcys: Lightcord Developer\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"Lightcord Developer\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-chat-badge\",\n href: \"https://github.com/Lightcord/Lightcord\",\n title: \"Lightcord\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_svg_lightcord__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n size: \"16px\",\n className: \"bd-logo\"\n }))));\n }\n\n const id = Object(_distant__WEBPACK_IMPORTED_MODULE_13__[\"uuidv4\"])();\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"div\", {\n id: \"badges-\" + id,\n style: {\n display: \"inline\"\n }\n }));\n applyBadges(id, author, true);\n }\n });\n};\n\nfunction applyBadges(id, user, chat) {\n process.nextTick(() => {\n const div = document.getElementById(\"badges-\" + id);\n if (!div || div.childNodes.length > 0) return;\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n _distant__WEBPACK_IMPORTED_MODULE_13__[\"default\"].getBadges(user.id).then(badges => {\n badges.forEach(badge => {\n const props = {\n svg: {\n size: \"16px\",\n className: \"bd-logo\",\n width: \"16px\"\n }\n };\n badge.scopes.forEach(scope => {\n if (scope === \"user\") {\n // require user\n props.user = user;\n }\n });\n\n if (!badge.href) {\n props.Anchor = Anchor;\n props.href = {\n className: chat ? \"bd-chat-badge\" : \"bd-member-badge\",\n title: badge.name,\n target: \"_blank\"\n };\n }\n\n const element = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: badge.name\n }, badge.href ? _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(Anchor, {\n href: badge.href,\n className: chat ? \"bd-chat-badge\" : \"bd-member-badge\",\n title: badge.name,\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(badge.component, props)) : _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(badge.component, props));\n const div2 = document.createElement(\"div\");\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].reactDom.render(element, div2);\n div2.childNodes.forEach(node => {\n div.appendChild(node);\n });\n });\n });\n });\n}\n\nCore.prototype.patchMemberList = function () {\n if (this.memberListPatch) return;\n const MemberListItem = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].findByDisplayName(\"MemberListItem\");\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!Anchor || !MemberListItem || !MemberListItem.prototype || !MemberListItem.prototype.renderDecorators) return;\n this.memberListPatch = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(MemberListItem.prototype, \"renderDecorators\", {\n after: data => {\n const user = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.thisObject, \"props.user\");\n const children = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getNestedProp(data.returnValue, \"props.children\");\n if (!children || !user || !user.id) return; // if (header && header.className) header.className += \" \"\n\n if (!Array.isArray(children)) return;\n\n if (user.id === \"249746236008169473\") {\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"BandagedBD Developer\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-member-badge\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_bdLogo__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n size: \"16px\",\n className: \"bd-logo\"\n }))));\n } else if (user.id === \"696481194443014174\" || user.id === \"696003456611385396\") {\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"Lightcord Developer\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-member-badge\",\n href: \"https://github.com/Lightcord/Lightcord\",\n title: \"Lightcord\",\n target: \"_blank\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_svg_lightcord__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n size: \"32px\",\n className: \"bd-logo\"\n }))));\n }\n\n const id = Object(_distant__WEBPACK_IMPORTED_MODULE_13__[\"uuidv4\"])();\n children.push(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"div\", {\n id: \"badges-\" + id\n }));\n applyBadges(id, user, false);\n }\n });\n};\n\nCore.prototype.updateInjector = async function () {\n const injectionPath = _dataStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].injectionPath;\n if (!injectionPath) return false;\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const path = __webpack_require__(/*! path */ \"path\");\n\n const rmrf = __webpack_require__(/*! rimraf */ \"rimraf\");\n\n const yauzl = __webpack_require__(/*! yauzl */ \"yauzl\");\n\n const mkdirp = __webpack_require__(/*! mkdirp */ \"mkdirp\");\n\n const request =\n /*require(\"request\");*/\n null;\n const parentPath = path.resolve(injectionPath, \"..\");\n const folderName = path.basename(injectionPath);\n const zipLink = \"https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip\";\n const savedZip = path.resolve(parentPath, \"injector.zip\");\n const extractedFolder = path.resolve(parentPath, \"BetterDiscordApp-injector\"); // Download the injector zip file\n\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Downloading \" + zipLink);\n let success = await new Promise(resolve => {\n request.get({\n url: zipLink,\n encoding: null\n }, async (error, response, body) => {\n if (error || response.statusCode !== 200) return resolve(false); // Save a backup in case someone has their own copy\n\n const alreadyExists = await new Promise(res => fs.exists(savedZip, res));\n if (alreadyExists) await new Promise(res => fs.rename(savedZip, `${savedZip}.bak${Math.round(performance.now())}`, res));\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Writing \" + savedZip);\n fs.writeFile(savedZip, body, err => resolve(!err));\n });\n });\n if (!success) return success; // Check and delete rename extraction\n\n const alreadyExists = await new Promise(res => fs.exists(extractedFolder, res));\n if (alreadyExists) await new Promise(res => fs.rename(extractedFolder, `${extractedFolder}.bak${Math.round(performance.now())}`, res)); // Unzip the downloaded zip file\n\n const zipfile = await new Promise(r => yauzl.open(savedZip, {\n lazyEntries: true\n }, (err, zip) => r(zip)));\n zipfile.on(\"entry\", function (entry) {\n // Skip directories, they are handled with mkdirp\n if (entry.fileName.endsWith(\"/\")) return zipfile.readEntry();\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Extracting \" + entry.fileName); // Make any needed parent directories\n\n const fullPath = path.resolve(parentPath, entry.fileName);\n mkdirp.sync(path.dirname(fullPath));\n zipfile.openReadStream(entry, function (err, readStream) {\n if (err) return success = false;\n readStream.on(\"end\", function () {\n zipfile.readEntry();\n }); // Go to next file after this\n\n readStream.pipe(fs.createWriteStream(fullPath));\n });\n });\n zipfile.readEntry(); // Start reading\n // Wait for the final file to finish\n\n await new Promise(resolve => zipfile.once(\"end\", resolve)); // Save a backup in case something goes wrong during final step\n\n const backupFolder = path.resolve(parentPath, `${folderName}.bak${Math.round(performance.now())}`);\n await new Promise(resolve => fs.rename(injectionPath, backupFolder, resolve)); // Rename the extracted folder to what it should be\n\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", `Renaming ${path.basename(extractedFolder)} to ${folderName}`);\n success = await new Promise(resolve => fs.rename(extractedFolder, injectionPath, err => resolve(!err)));\n\n if (!success) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].err(\"InjectorUpdate\", \"Failed to rename the final directory\");\n return success;\n } // If rename had issues, delete what we tried to rename and restore backup\n\n\n if (!success) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].err(\"InjectorUpdate\", \"Something went wrong... restoring backups.\");\n await new Promise(resolve => rmrf(extractedFolder, resolve));\n await new Promise(resolve => fs.rename(backupFolder, injectionPath, resolve));\n return success;\n } // If we've gotten to this point, everything should have gone smoothly.\n // Cleanup the backup folder then remove the zip\n\n\n await new Promise(resolve => rmrf(backupFolder, resolve));\n await new Promise(resolve => fs.unlink(savedZip, resolve));\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Injector Updated!\");\n return success;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new Core());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb3JlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvcmUuanM/MTNjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiZENvbmZpZywgbWluU3VwcG9ydGVkVmVyc2lvbiwgYmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luRXJyb3JzLCBiZHRoZW1lRXJyb3JzLCBiYmRDaGFuZ2Vsb2csIGRlZmF1bHRDb29raWUsIGN1cnJlbnREaXNjb3JkVmVyc2lvbiwgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEMgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBCRExvZ28gZnJvbSBcIi4uL3VpL2JkTG9nb1wiO1xuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9saWdodGNvcmRcIjtcbmltcG9ydCBQbHVnaW5DZXJ0aWZpZXIgZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XG5pbXBvcnQgZGlzdGFudCwgeyB1dWlkdjQgfSBmcm9tIFwiLi9kaXN0YW50XCI7XG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIjtcblxuZnVuY3Rpb24gQ29yZSgpIHsvLyBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhEYXRhU3RvcmUuY29uZmlnRmlsZSkpO1xuICAvLyB0aGlzLmluaXQoKTtcbn1cblxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBjb25maWcpO1xufTtcblxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgaWYgKCFBcnJheS5wcm90b3R5cGUuZmxhdCkge1xuICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmJkVmVyc2lvbiArIFwiIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvbGQgdmVyc2lvbiAoXCIgKyBjdXJyZW50RGlzY29yZFZlcnNpb24gKyBcIikgb2YgRGlzY29yZC4gUGxlYXNlIHVwZGF0ZSB5b3VyIERpc2NvcmQgaW5zdGFsbGF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nLlwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYmRDb25maWcudmVyc2lvbiA8IG1pblN1cHBvcnRlZFZlcnNpb24pIHtcbiAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJkQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIGJiZFZlcnNpb24gKyBcIikuPGJyPjxicj4gUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+R2l0SHViPC9hPlwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAod2luZG93LkVEKSB7XG4gICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAod2luZG93LldlYlNvY2tldCAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUgJiYgd2luZG93LldlYlNvY2tldC5uYW1lLmluY2x1ZGVzKFwiUGF0Y2hlZFwiKSkge1xuICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIFBvd2VyY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbGF0ZXN0TG9jYWxWZXJzaW9uID0gYmRDb25maWcudXBkYXRlciA/IGJkQ29uZmlnLnVwZGF0ZXIuTGF0ZXN0VmVyc2lvbiA6IGJkQ29uZmlnLmxhdGVzdFZlcnNpb247XG5cbiAgaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IGJkQ29uZmlnLnZlcnNpb24pIHtcbiAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJVcGRhdGUgQXZhaWxhYmxlXCIsIFtgVGhlcmUgaXMgYW4gdXBkYXRlIGF2YWlsYWJsZSBmb3IgQmFuZGFnZWRCRCdzIEluamVjdG9yICgke2xhdGVzdExvY2FsVmVyc2lvbn0pLmAsIFwiWW91IGNhbiBlaXRoZXIgdXBkYXRlIGFuZCByZXN0YXJ0IG5vdywgb3IgbGF0ZXIuXCJdLCB7XG4gICAgICBjb25maXJtVGV4dDogXCJVcGRhdGUgTm93XCIsXG4gICAgICBjYW5jZWxUZXh0OiBcIk1heWJlIExhdGVyXCIsXG4gICAgICBvbkNvbmZpcm06IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgb25VcGRhdGVGYWlsZWQgPSAoKSA9PiB7XG4gICAgICAgICAgVXRpbHMuYWxlcnQoXCJDb3VsZCBOb3QgVXBkYXRlXCIsIGBVbmFibGUgdG8gdXBkYXRlIGF1dG9tYXRpY2FsbHksIHBsZWFzZSBkb3dubG9hZCB0aGUgaW5zdGFsbGVyIGFuZCByZWluc3RhbGwgbm9ybWFsbHkuPGJyIC8+PGJyIC8+PGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5Eb3dubG9hZCBJbnN0YWxsZXI8L2E+YCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XG4gICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xuXG4gICAgICAgICAgY29uc3QgYXBwID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XG5cbiAgICAgICAgICBhcHAucmVsYXVuY2goKTtcbiAgICAgICAgICBhcHAuZXhpdCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBvblVwZGF0ZUZhaWxlZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xuICB0aGlzLmluaXRTZXR0aW5ncygpO1xuICBhd2FpdCB0aGlzLmNoZWNrRm9yR3VpbGRzKCk7XG4gIEJEVjIuaW5pdGlhbGl6ZSgpO1xuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiVXBkYXRpbmcgU2V0dGluZ3NcIik7XG4gIHNldHRpbmdzUGFuZWwuaW5pdGlhbGl6ZVNldHRpbmdzKCk7XG4gIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XG4gIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2lucygpO1xuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XG4gIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZXMoKTtcbiAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIGF0b2IoRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpKSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZGMtMFwiXSkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idG4uYnRuLWRpc2Nvbm5lY3RcIikuY2xpY2soKTtcbiAgfSk7XG4gIFBsdWdpbkNlcnRpZmllci5zdGFydCgpO1xuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpLmxlbmd0aCkgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xuICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XG4gIHRoaXMuaW5pdE9ic2VydmVyKCk7IC8vIFNob3cgbG9hZGluZyBlcnJvcnNcblxuICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIHtcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcbiAgICBVdGlscy5zaG93Q29udGVudEVycm9ycyh7XG4gICAgICBwbHVnaW5zOiBiZHBsdWdpbkVycm9ycyxcbiAgICAgIHRoZW1lczogYmR0aGVtZUVycm9yc1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XG5cbiAgaWYgKGJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcbiAgICBpZiAoYmJkQ2hhbmdlbG9nKSB0aGlzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO1xuICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJ2ZXJzaW9uXCIsIGJiZFZlcnNpb24pO1xuICB9XG5cbiAgY29uc3QgZW1vamlNb2R1bGUgPSBFbW9qaU1vZHVsZTtcbiAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xuICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRQaWxscy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFBpbGxzIFBhdGNoXCIpKCk7XG4gIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcbiAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XG4gIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZXNzYWdlSGVhZGVyLmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgQ2hhdCBQYXRjaFwiKSgpO1xuICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVtYmVyTGlzdC5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIE1lbWJlciBMaXN0IFBhdGNoXCIpKCk7XG4gIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRhY2htZW50LmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xuXG4gIGlmIChiZENvbmZpZy5oYXZlSW5zdGFsbGVkRGVmYXVsdCkge1xuICAgIGxldCBhbGVydCA9IFV0aWxzLmFsZXJ0KFwiRmlyc3QgSW5zdGFsbGF0aW9uXCIsIFwiQXMgaXQgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGluc3RhbGwgTGlnaHRjb3JkLCBXZSBhZGRlZCB0d28gZGVmYXVsdCB0aGVtZXMgYW5kIG9uZSBkZWZhdWx0IHBsdWdpbiBpbiB5b3VyIHBsdWdpbi90aGVtZSBmb2xkZXIuIENoZWNrIGl0IGluIHRoZSBQbHVnaW4vVGhlbWUgc2V0dGluZ3MuXCIpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgYWxlcnQub25DbG9zZShyZXNvbHZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGxvZ28gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudCA+IGRpdi50eXBlV2luZG93cy0xemEtbjcud2l0aEZyYW1lLWhhWWx0SS50aXRsZUJhci1BQzRwR1YuaG9yaXpvbnRhbFJldmVyc2UtM3RSalk3LmZsZXgtMU8xR0tZLmRpcmVjdGlvblJvd1JldmVyc2UtbThJaklxLmp1c3RpZnlTdGFydC0yTkRGemkuYWxpZ25TdHJldGNoLURwR1BmMy5kYS10eXBlV2luZG93cy5kYS13aXRoRnJhbWUuZGEtdGl0bGVCYXIuZGEtaG9yaXpvbnRhbFJldmVyc2UuZGEtZmxleC5kYS1kaXJlY3Rpb25Sb3dSZXZlcnNlLmRhLWp1c3RpZnlTdGFydC5kYS1hbGlnblN0cmV0Y2ggPiBkaXYud29yZG1hcmtXaW5kb3dzLTF2MGxZRC53b3JkbWFyay0yaUREZm0uZGEtd29yZG1hcmtXaW5kb3dzLmRhLXdvcmRtYXJrXCIpO1xuXG4gIGlmIChsb2dvKSB7XG4gICAgbG9nby5pbm5lckhUTUwgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMTBcIiB3aWR0aD1cIjcwXCIgdmlld0JveD1cIjAgMCA3Mi41NCAxMFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC01cHgsIG1hcmdpbi10b3A6IDEwcHhcIj5cbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIzNS45MSAwLjA2IDM4LjQzIDAuMDYgMzguNDMgMS44NCAzNS45MiAxLjgxIDM1Ljk3IDEwIDMzLjU1IDEwIDMzLjQ5IDEuNzUgMzAuOTggMS43NCAzMC45OCAwLjA2IDMzLjQ5IDAuMDYgMzUuOTEgMC4wNlwiLz5cbiAgICA8cG9seWdvbiBmaWxsPVwiY3VycmVudENvbG9yXCIgcG9pbnRzPVwiMCA5Ljk3IDYuNSAxMCA2LjUgNy42MyAyLjQxIDcuNjMgMi40MSAwLjI2IDAgMi4yNiAwIDkuOTdcIi8+XG48L3N2Zz5gO1xuICB9XG59O1xuXG5Db3JlLnByb3RvdHlwZS5jaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBjaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBCRFYyLmd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfWApLmxlbmd0aCA+IDApIHRpbWVzQ2hlY2tlZCsrO1xuICAgICAgY29uc3QgZ3VpbGQgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XG4gICAgICBjb25zdCBibG9iID0gQkRWMi5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XG4gICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtlbHNlIGlmICh0aW1lc0NoZWNrZWQgPj0gNTApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xuICAgIH07XG5cbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPSBcImxvYWRpbmdcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLmluamVjdEV4dGVybmFscyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgYXdhaXQgRE9NLmFkZFNjcmlwdChcImFjZS1zY3JpcHRcIiwgXCJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9hY2UvMS4yLjkvYWNlLmpzXCIpO1xuICBpZiAod2luZG93LnJlcXVpcmUub3JpZ2luYWwpIHdpbmRvdy5yZXF1aXJlID0gd2luZG93LnJlcXVpcmUub3JpZ2luYWw7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5pbml0U2V0dGluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XG5cbiAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikgJiYgIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpIHtcbiAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgZGVmYXVsdENvb2tpZSk7XG4gICAgfVxuXG4gICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBkZWZhdWx0UlBDKTtcbiAgICB9XG5cbiAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xuICB9IGVsc2Uge1xuICAgIHNldHRpbmdzUGFuZWwubG9hZFNldHRpbmdzKCk7XG5cbiAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gZGVmYXVsdENvb2tpZSkge1xuICAgICAgaWYgKHNldHRpbmdzQ29va2llW3NldHRpbmddID09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9IGRlZmF1bHRDb29raWVbc2V0dGluZ107XG4gICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG1haW5PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDAsIG1sZW4gPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgbWxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgcGx1Z2luTW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSBwbHVnaW5Nb2R1bGUucmF3T2JzZXJ2ZXIobXV0YXRpb24pOyAvLyBpZiB0aGVyZSB3YXMgbm90aGluZyBhZGRlZCwgc2tpcFxuXG4gICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xuICAgICAgbGV0IFtjbGFzc05hbWVMYXllciwgY2xhc3NOYW1lU29jaWFsTGlua3NdID0gW0JETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuYW5pbWF0aW5nKVswXS5sYXllciwgQkRNb2R1bGVzLmdldChlID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXTtcblxuICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyKSkge1xuICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZ3VpbGQtc2V0dGluZ3MtYmFzZS1zZWN0aW9uXCIpLmxlbmd0aCkgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcblxuICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZVNvY2lhbExpbmtzKS5sZW5ndGgpIHtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcbiAgICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmQtc2V0dGluZ3Mtc2lkZWJhclwiKSkgc2V0dGluZ3NQYW5lbC5yZW5kZXJTaWRlYmFyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiOyAvLyBFbW9qaSBQaWNrZXJcbiAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcbiAgICAgIC8vaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyMikgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZUVtb2ppUGlja2VyKS5sZW5ndGggICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrY2xhc3NOYW1lRW1vamlQaWNrZXIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUFuaW1hdG9yTGVmdCkpIHF1aWNrRW1vdGVNZW51Lm9ic0NhbGxiYWNrKG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XG4gICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgIHN1YnRyZWU6IHRydWVcbiAgfSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5zaG93Q2hhbmdlbG9nTW9kYWwgPSBmdW5jdGlvbiAob3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwob3B0aW9ucyk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xuICByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hTb2NpYWwgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnNvY2lhbFBhdGNoKSByZXR1cm47XG4gIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiVGFiQmFyXCIpO1xuICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgaWYgKCFUYWJCYXIpIHJldHVybjtcbiAgdGhpcy5zb2NpYWxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICBhZnRlcjogZGF0YSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW47XG4gICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xuICAgICAgaWYgKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDNdLnR5cGUuZGlzcGxheU5hbWUgIT09IFwiU2VwYXJhdG9yXCIpIHJldHVybjtcbiAgICAgIGlmICghY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZS50b1N0cmluZygpLmluY2x1ZGVzKFwic29jaWFsTGlua3NcIikpIHJldHVybjtcblxuICAgICAgaWYgKEFuY2hvcikge1xuICAgICAgICBsZXQgc29jaWFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNvY2lhbExpbmtzKVswXTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlO1xuXG4gICAgICAgIGNvbnN0IG5ld09uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge1xuICAgICAgICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgICAgICAgIHNpZGU6IFwidG9wXCIsXG4gICAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZFwiXG4gICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiICsgc29jaWFsTW9kdWxlMS5saW5rLFxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLFxuICAgICAgICAgICAgdGl0bGU6IFwiTGlnaHRjb3JkXCIsXG4gICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge1xuICAgICAgICAgICAgc2l6ZTogXCIxNnB4XCIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIlxuICAgICAgICAgIH0pKSkpO1xuICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge1xuICAgICAgICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgICAgICAgIHNpZGU6IFwidG9wXCIsXG4gICAgICAgICAgICB0ZXh0OiBcIkJhbmRhZ2VkQkRcIlxuICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIiArIHNvY2lhbE1vZHVsZTEubGluayxcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLFxuICAgICAgICAgICAgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLFxuICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXG4gICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge1xuICAgICAgICAgICAgc2l6ZTogXCIxNnB4XCIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIlxuICAgICAgICAgIH0pKSkpO1xuICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZSA9IG5ld09uZTtcbiAgICAgIH1cblxuICAgICAgbGV0IFtjbGFzc05hbWVDb2xvck11dGVkLCBzaXplcywgY2xhc3NOYW1lVmVyc2lvbkhhc2hdID0gW0JETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yTXV0ZWQpWzBdLmNvbG9yTXV0ZWQsIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnNpb25IYXNoKVswXS52ZXJzaW9uSGFzaF07XG4gICAgICBjb25zdCBpbmplY3RvciA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YFxuICAgICAgfSwgYEluamVjdG9yICR7YmRDb25maWcudmVyc2lvbn1gKTtcbiAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke2JkQ29uZmlnLmhhc2ggPyBiZENvbmZpZy5oYXNoLnN1YnN0cmluZygwLCA3KSA6IGJkQ29uZmlnLmJyYW5jaH0pYDtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWBcbiAgICAgIH0sIGBCQkQgJHtiYmRWZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCArIFwiIGRhLXZlcnNpb25IYXNoXCJcbiAgICAgIH0sIHZlcnNpb25IYXNoKSk7XG4gICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcblxuICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWxWZXJzaW9ucyguLi5hcmd1bWVudHMpO1xuICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4uc3BsaWNlKHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5sZW5ndGggLSAxLCAwLCBpbmplY3Rvcik7XG4gICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5zcGxpY2UoMSwgMCwgYWRkaXRpb25hbCk7XG4gICAgICAgIHJldHVybiByZXR1cm5WYWw7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBnZXRHdWlsZENsYXNzZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIndyYXBwZXJcIiwgXCJ1bnJlYWRNZW50aW9uc0JhclwiKTtcbiAgY29uc3QgZ3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJndWlsZHNFcnJvclwiLCBcInNlbGVjdGVkXCIpO1xuICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRMaXN0SXRlbXMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2gpIHJldHVybjtcbiAgY29uc3QgR3VpbGRDbGFzc2VzID0gZ2V0R3VpbGRDbGFzc2VzKCk7XG4gIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xuICBjb25zdCBibG9iQ2xhc3MgPSBHdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XG4gIGNvbnN0IHJlYWN0SW5zdGFuY2UgPSBCRFYyLmdldEludGVybmFsSW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGlzdEl0ZW1DbGFzc30gLiR7YmxvYkNsYXNzfWApLnBhcmVudEVsZW1lbnQpO1xuICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XG4gIGlmICghR3VpbGRDb21wb25lbnQpIHJldHVybjtcbiAgdGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XG4gICAgYWZ0ZXI6IGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEucmV0dXJuVmFsdWUgJiYgZGF0YS50aGlzT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgY29uc3QgZ3VpbGREYXRhID0gZGF0YS50aGlzT2JqZWN0LnByb3BzO1xuICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcbiAgICAgICAgaWYgKGd1aWxkRGF0YS51bnJlYWQpIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcbiAgICAgICAgaWYgKGd1aWxkRGF0YS5zZWxlY3RlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XG4gICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xuICAgICAgICBpZiAoZ3VpbGREYXRhLnZpZGVvKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdmlkZW9cIjtcbiAgICAgICAgaWYgKGd1aWxkRGF0YS5iYWRnZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWJhZGdlXCI7XG4gICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkUGlsbHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmd1aWxkUGlsbFBhdGNoKSByZXR1cm47XG4gIGNvbnN0IGd1aWxkUGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgIW0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQudG9TdHJpbmcgJiYgbS5kZWZhdWx0LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJ0cmFuc2xhdGUzZFwiKSk7XG4gIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XG4gIHRoaXMuZ3VpbGRQaWxsUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChndWlsZFBpbGwsIFwiZGVmYXVsdFwiLCB7XG4gICAgYWZ0ZXI6IGRhdGEgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcbiAgICAgIGlmIChwcm9wcy51bnJlYWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xuICAgICAgaWYgKHByb3BzLnNlbGVjdGVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xuICAgICAgaWYgKHByb3BzLmhvdmVyZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWhvdmVyZWRcIjtcbiAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XG4gIGNvbnN0IEd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiR3VpbGRzXCIpO1xuICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xuICBpZiAoIWd1aWxkQ29tcG9uZW50cyB8fCAhR3VpbGRzKSByZXR1cm47XG5cbiAgY29uc3QgR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmV0dXJuVmFsdWUgPSBndWlsZENvbXBvbmVudHMuU2VwYXJhdG9yKC4uLmFyZ3VtZW50cyk7XG4gICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkLXNlcGFyYXRvclwiO1xuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfTtcblxuICB0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZHMucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XG4gICAgYWZ0ZXI6IGRhdGEgPT4ge1xuICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jaGlsZHJlblszXS50eXBlID0gR3VpbGRTZXBhcmF0b3I7XG4gICAgfVxuICB9KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0YWNobWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuQXR0YWNobWVudFBhdGNoKSByZXR1cm47XG4gIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdOyAvLyB0ZW1wb3JhcnlcblxuICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgaWYgKCFBbmNob3IgfHwgIUF0dGFjaG1lbnQgfHwgIUF0dGFjaG1lbnQuZGVmYXVsdCkgcmV0dXJuO1xuICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7XG4gICAgYWZ0ZXI6IGRhdGEgPT4ge1xuICAgICAgY29uc3QgYXR0YWNobWVudCA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdIHx8IG51bGw7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcbiAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF0dGFjaG1lbnQgfHwgIWF0dGFjaG1lbnQudXJsKSByZXR1cm47XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XG4gICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBpZDogXCJjZXJ0aWZpZWQtXCIgKyBpZFxuICAgICAgfSkpO1xuICAgICAgUGx1Z2luQ2VydGlmaWVyLnBhdGNoKGF0dGFjaG1lbnQsIFwiY2VydGlmaWVkLVwiICsgaWQpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCkgcmV0dXJuO1xuICBjb25zdCBNZXNzYWdlSGVhZGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJNZXNzYWdlVGltZXN0YW1wXCIpO1xuICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgaWYgKCFBbmNob3IgfHwgIU1lc3NhZ2VIZWFkZXIgfHwgIU1lc3NhZ2VIZWFkZXIuZGVmYXVsdCkgcmV0dXJuO1xuICB0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lc3NhZ2VIZWFkZXIsIFwiZGVmYXVsdFwiLCB7XG4gICAgYWZ0ZXI6IGRhdGEgPT4ge1xuICAgICAgY29uc3QgYXV0aG9yID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJtZXNzYWdlLmF1dGhvclwiKTsgLy8gY29uc3QgaGVhZGVyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHNcIik7XG5cbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlblwiKTtcbiAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF1dGhvciB8fCAhYXV0aG9yLmlkKSByZXR1cm47IC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XG5cbiAgICAgIGlmIChhdXRob3IuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHtcbiAgICAgICAgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtcbiAgICAgICAgICBjb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIHNpZGU6IFwidG9wXCIsXG4gICAgICAgICAgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwiXG4gICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLFxuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLFxuICAgICAgICAgIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge1xuICAgICAgICAgIHNpemU6IFwiMTZweFwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJcbiAgICAgICAgfSkpKSk7XG4gICAgICB9IGVsc2UgaWYgKGF1dGhvci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBhdXRob3IuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpIHtcbiAgICAgICAgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxuICAgICAgICBjaGlsZHJlbi5wdXNoKEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge1xuICAgICAgICAgIGNvbG9yOiBcImJsYWNrXCIsXG4gICAgICAgICAgc2lkZTogXCJ0b3BcIixcbiAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIlxuICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIixcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsXG4gICAgICAgICAgdGl0bGU6IFwiTGlnaHRjb3JkXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXG4gICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7XG4gICAgICAgICAgc2l6ZTogXCIxNnB4XCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIlxuICAgICAgICB9KSkpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiICsgaWQsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIlxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBhcHBseUJhZGdlcyhpZCwgYXV0aG9yLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gYXBwbHlCYWRnZXMoaWQsIHVzZXIsIGNoYXQpIHtcbiAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiYWRnZXMtXCIgKyBpZCk7XG4gICAgaWYgKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgcmV0dXJuO1xuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgIGRpc3RhbnQuZ2V0QmFkZ2VzKHVzZXIuaWQpLnRoZW4oYmFkZ2VzID0+IHtcbiAgICAgIGJhZGdlcy5mb3JFYWNoKGJhZGdlID0+IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgc3ZnOiB7XG4gICAgICAgICAgICBzaXplOiBcIjE2cHhcIixcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxNnB4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGJhZGdlLnNjb3Blcy5mb3JFYWNoKHNjb3BlID0+IHtcbiAgICAgICAgICBpZiAoc2NvcGUgPT09IFwidXNlclwiKSB7XG4gICAgICAgICAgICAvLyByZXF1aXJlIHVzZXJcbiAgICAgICAgICAgIHByb3BzLnVzZXIgPSB1c2VyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFiYWRnZS5ocmVmKSB7XG4gICAgICAgICAgcHJvcHMuQW5jaG9yID0gQW5jaG9yO1xuICAgICAgICAgIHByb3BzLmhyZWYgPSB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsXG4gICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSxcbiAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7XG4gICAgICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgICAgICBzaWRlOiBcInRvcFwiLFxuICAgICAgICAgIHRleHQ6IGJhZGdlLm5hbWVcbiAgICAgICAgfSwgYmFkZ2UuaHJlZiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcbiAgICAgICAgICBocmVmOiBiYWRnZS5ocmVmLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIixcbiAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSxcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKSk7XG4gICAgICAgIGNvbnN0IGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihlbGVtZW50LCBkaXYyKTtcbiAgICAgICAgZGl2Mi5jaGlsZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZW1iZXJMaXN0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5tZW1iZXJMaXN0UGF0Y2gpIHJldHVybjtcbiAgY29uc3QgTWVtYmVyTGlzdEl0ZW0gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1lbWJlckxpc3RJdGVtXCIpO1xuICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgaWYgKCFBbmNob3IgfHwgIU1lbWJlckxpc3RJdGVtIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUgfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZS5yZW5kZXJEZWNvcmF0b3JzKSByZXR1cm47XG4gIHRoaXMubWVtYmVyTGlzdFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLCBcInJlbmRlckRlY29yYXRvcnNcIiwge1xuICAgIGFmdGVyOiBkYXRhID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEudGhpc09iamVjdCwgXCJwcm9wcy51c2VyXCIpO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XG4gICAgICBpZiAoIWNoaWxkcmVuIHx8ICF1c2VyIHx8ICF1c2VyLmlkKSByZXR1cm47IC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XG5cbiAgICAgIGlmICh1c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7XG4gICAgICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgICAgICBzaWRlOiBcInRvcFwiLFxuICAgICAgICAgIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIlxuICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLFxuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLFxuICAgICAgICAgIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge1xuICAgICAgICAgIHNpemU6IFwiMTZweFwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJcbiAgICAgICAgfSkpKSk7XG4gICAgICB9IGVsc2UgaWYgKHVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgdXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIikge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge1xuICAgICAgICAgIGNvbG9yOiBcImJsYWNrXCIsXG4gICAgICAgICAgc2lkZTogXCJ0b3BcIixcbiAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIlxuICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLFxuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIixcbiAgICAgICAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtcbiAgICAgICAgICBzaXplOiBcIjMycHhcIixcbiAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtbG9nb1wiXG4gICAgICAgIH0pKSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBpZDogXCJiYWRnZXMtXCIgKyBpZFxuICAgICAgfSkpO1xuICAgICAgYXBwbHlCYWRnZXMoaWQsIHVzZXIsIGZhbHNlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUudXBkYXRlSW5qZWN0b3IgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGluamVjdGlvblBhdGggPSBEYXRhU3RvcmUuaW5qZWN0aW9uUGF0aDtcbiAgaWYgKCFpbmplY3Rpb25QYXRoKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5cbiAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuXG4gIGNvbnN0IHJtcmYgPSByZXF1aXJlKFwicmltcmFmXCIpO1xuXG4gIGNvbnN0IHlhdXpsID0gcmVxdWlyZShcInlhdXpsXCIpO1xuXG4gIGNvbnN0IG1rZGlycCA9IHJlcXVpcmUoXCJta2RpcnBcIik7XG5cbiAgY29uc3QgcmVxdWVzdCA9XG4gIC8qcmVxdWlyZShcInJlcXVlc3RcIik7Ki9cbiAgbnVsbDtcbiAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGgucmVzb2x2ZShpbmplY3Rpb25QYXRoLCBcIi4uXCIpO1xuICBjb25zdCBmb2xkZXJOYW1lID0gcGF0aC5iYXNlbmFtZShpbmplY3Rpb25QYXRoKTtcbiAgY29uc3QgemlwTGluayA9IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9hcmNoaXZlL2luamVjdG9yLnppcFwiO1xuICBjb25zdCBzYXZlZFppcCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcImluamVjdG9yLnppcFwiKTtcbiAgY29uc3QgZXh0cmFjdGVkRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiQmV0dGVyRGlzY29yZEFwcC1pbmplY3RvclwiKTsgLy8gRG93bmxvYWQgdGhlIGluamVjdG9yIHppcCBmaWxlXG5cbiAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xuICBsZXQgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJlcXVlc3QuZ2V0KHtcbiAgICAgIHVybDogemlwTGluayxcbiAgICAgIGVuY29kaW5nOiBudWxsXG4gICAgfSwgYXN5bmMgKGVycm9yLCByZXNwb25zZSwgYm9keSkgPT4ge1xuICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpOyAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcblxuICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xuICAgICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoc2F2ZWRaaXAsIGAke3NhdmVkWmlwfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xuICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xuICAgICAgZnMud3JpdGVGaWxlKHNhdmVkWmlwLCBib2R5LCBlcnIgPT4gcmVzb2x2ZSghZXJyKSk7XG4gICAgfSk7XG4gIH0pO1xuICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBzdWNjZXNzOyAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXG5cbiAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoZXh0cmFjdGVkRm9sZGVyLCByZXMpKTtcbiAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7IC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXG5cbiAgY29uc3QgemlwZmlsZSA9IGF3YWl0IG5ldyBQcm9taXNlKHIgPT4geWF1emwub3BlbihzYXZlZFppcCwge1xuICAgIGxhenlFbnRyaWVzOiB0cnVlXG4gIH0sIChlcnIsIHppcCkgPT4gcih6aXApKSk7XG4gIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAvLyBTa2lwIGRpcmVjdG9yaWVzLCB0aGV5IGFyZSBoYW5kbGVkIHdpdGggbWtkaXJwXG4gICAgaWYgKGVudHJ5LmZpbGVOYW1lLmVuZHNXaXRoKFwiL1wiKSkgcmV0dXJuIHppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJFeHRyYWN0aW5nIFwiICsgZW50cnkuZmlsZU5hbWUpOyAvLyBNYWtlIGFueSBuZWVkZWQgcGFyZW50IGRpcmVjdG9yaWVzXG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBlbnRyeS5maWxlTmFtZSk7XG4gICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZ1bGxQYXRoKSk7XG4gICAgemlwZmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgZnVuY3Rpb24gKGVyciwgcmVhZFN0cmVhbSkge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIHJlYWRTdHJlYW0ub24oXCJlbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICB6aXBmaWxlLnJlYWRFbnRyeSgpO1xuICAgICAgfSk7IC8vIEdvIHRvIG5leHQgZmlsZSBhZnRlciB0aGlzXG5cbiAgICAgIHJlYWRTdHJlYW0ucGlwZShmcy5jcmVhdGVXcml0ZVN0cmVhbShmdWxsUGF0aCkpO1xuICAgIH0pO1xuICB9KTtcbiAgemlwZmlsZS5yZWFkRW50cnkoKTsgLy8gU3RhcnQgcmVhZGluZ1xuICAvLyBXYWl0IGZvciB0aGUgZmluYWwgZmlsZSB0byBmaW5pc2hcblxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHppcGZpbGUub25jZShcImVuZFwiLCByZXNvbHZlKSk7IC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZmluYWwgc3RlcFxuXG4gIGNvbnN0IGJhY2t1cEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBgJHtmb2xkZXJOYW1lfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWApO1xuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShpbmplY3Rpb25QYXRoLCBiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTsgLy8gUmVuYW1lIHRoZSBleHRyYWN0ZWQgZm9sZGVyIHRvIHdoYXQgaXQgc2hvdWxkIGJlXG5cbiAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgYFJlbmFtaW5nICR7cGF0aC5iYXNlbmFtZShleHRyYWN0ZWRGb2xkZXIpfSB0byAke2ZvbGRlck5hbWV9YCk7XG4gIHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGluamVjdGlvblBhdGgsIGVyciA9PiByZXNvbHZlKCFlcnIpKSk7XG5cbiAgaWYgKCFzdWNjZXNzKSB7XG4gICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJGYWlsZWQgdG8gcmVuYW1lIHRoZSBmaW5hbCBkaXJlY3RvcnlcIik7XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH0gLy8gSWYgcmVuYW1lIGhhZCBpc3N1ZXMsIGRlbGV0ZSB3aGF0IHdlIHRyaWVkIHRvIHJlbmFtZSBhbmQgcmVzdG9yZSBiYWNrdXBcblxuXG4gIGlmICghc3VjY2Vzcykge1xuICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4gcmVzdG9yaW5nIGJhY2t1cHMuXCIpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihleHRyYWN0ZWRGb2xkZXIsIHJlc29sdmUpKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShiYWNrdXBGb2xkZXIsIGluamVjdGlvblBhdGgsIHJlc29sdmUpKTtcbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfSAvLyBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgZXZlcnl0aGluZyBzaG91bGQgaGF2ZSBnb25lIHNtb290aGx5LlxuICAvLyBDbGVhbnVwIHRoZSBiYWNrdXAgZm9sZGVyIHRoZW4gcmVtb3ZlIHRoZSB6aXBcblxuXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy51bmxpbmsoc2F2ZWRaaXAsIHJlc29sdmUpKTtcbiAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJJbmplY3RvciBVcGRhdGVkIVwiKTtcbiAgcmV0dXJuIHN1Y2Nlc3M7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); /***/ }), @@ -311,7 +311,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n\n\n\n\nconst Constants = {\n EmojiRegex: //g\n};\nlet CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0];\nlet EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0];\nlet AutocompleteModule = BDModules.get(e => e.default && e.default.displayName === \"Autocomplete\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmojiModule {\n constructor() {}\n\n async init() {\n while (!_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MessageComponent) await new Promise(resolve => setTimeout(resolve, 100));\n\n if (this.cancelEmojiRender) return;\n this.cancelEmoteRender = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].monkeyPatch(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MessageComponent, \"default\", {\n before: data => {\n const message = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(data.methodArguments[0], \"childrenMessageContent.props.message\");\n if (!message) return;\n const content = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(data.methodArguments[0], \"childrenMessageContent.props.content\");\n if (!content || !content.length) return;\n /**\r\n * @type {{\r\n * raw: string,\r\n * name: string,\r\n * id: string,\r\n * animated: boolean\r\n * }[]}\r\n */\n\n let emojis = [];\n const newContent = [];\n\n for (let node of content) {\n if (typeof node !== \"string\") {\n newContent.push(node);\n continue;\n }\n\n ;\n let parsed;\n let hasParsed = false;\n\n do {\n parsed = Constants.EmojiRegex.exec(node);\n\n if (parsed) {\n hasParsed = true;\n if (!EmojiModuleApi) EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0];\n const emoji = EmojiModuleApi.default.getCustomEmojiById(parsed[2]);\n\n if (emoji) {\n emojis.push({\n animated: emoji.animated,\n name: emoji.name,\n id: emoji.id,\n raw: parsed[0]\n });\n } else {\n emojis.push({\n animated: parsed[0].startsWith(\" {\n if (!word) return \"\";\n const emoji = emojis.find(e => e.raw == word);\n if (!emoji) return word;\n if (!CustomEmojiModule) CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0];\n return React.createElement(CustomEmojiModule.CustomEmoji, {\n emoji: {\n name: `.${emoji.name}.`,\n emojiId: emoji.id,\n animated: emoji.animated,\n jumboable: arr.length === 1 && content.length === 1\n }\n });\n }).reduce((previous, current) => {\n if (previous.length === 0) return [current];\n\n if (typeof current === \"string\") {\n if (typeof previous[previous.length - 1] === \"string\") {\n previous[previous.length - 1] += ` ${current}`;\n return previous;\n }\n\n previous.push(\" \" + current);\n return previous;\n }\n\n previous.push(\" \", current);\n return previous;\n }, []);\n newContent.push(...words);\n } else {\n newContent.push(node);\n }\n }\n\n while (data.methodArguments[0].childrenMessageContent.props.content[0]) {\n data.methodArguments[0].childrenMessageContent.props.content.shift();\n }\n\n while (newContent[0]) {\n data.methodArguments[0].childrenMessageContent.props.content.push(newContent.shift());\n }\n }\n });\n if (!AutocompleteModule) AutocompleteModule = BDModules.get(e => e.default && e.default.displayName === \"Autocomplete\");\n }\n\n disable() {\n if (this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n this.cancelEmoteRender = null;\n }\n\n}());\n/*\r\nlet loadImageModule = BDModules.get(e => e.loadImage)[0]\r\nlet getEmojiModule = BDModules.get(e => e.default && e.default.getEmojiURL)[0]\r\n\r\nclass Emoji extends React.PureComponent {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n hover: false\r\n }\r\n this.key = undefined\r\n this.cancelLoadImage = null\r\n this.onError = function() {\r\n }\r\n }\r\n\r\n onError() {\r\n var src = this.getSrc();\r\n if(src !== null){\r\n if(!loadImageModule)loadImageModule = BDModules.get(e => e.loadImage)[0] // lazy load\r\n this.cancelLoadImage = loadImageModule.loadImage(src, (e) => {\r\n if(!e){\r\n this.key = Date.now()\r\n this.forceUpdate()\r\n }\r\n })\r\n }\r\n }\r\n\r\n onMouseEnter(ev) {\r\n this.setState({\r\n hover: true\r\n });\r\n var onMouseEnter = this.props.onMouseEnter;\r\n if(onMouseEnter)onMouseEnter(ev)\r\n }\r\n\r\n onMouseLeave(ev) {\r\n this.setState({\r\n hover: false\r\n });\r\n var onMouseLeave = t.props.onMouseLeave;\r\n if(onMouseLeave)onMouseLeave(ev)\r\n }\r\n\r\n\r\n componentWillUnmount() {\r\n if(this.cancelLoadImage)this.cancelLoadImage()\r\n }\r\n\r\n getSrc(defaultProps) {\r\n if(!defaultProps)defaultProps = this.props\r\n const props = defaultProps\r\n const src = props.src\r\n const emojiId = props.emojiId\r\n const emojiName = props.emojiName\r\n const animated = props.animated\r\n const shouldAnimate = props.shouldAnimate\r\n const isFocused = props.isFocused\r\n const hover = this.state.hover\r\n\r\n if(src)return src\r\n if(emojiId){\r\n if(!getEmojiModule)getEmojiModule = BDModules.get(e => e.default && e.default.getEmojiURL)[0]\r\n return getEmojiModule.default.getEmojiURL({\r\n id: emojiId,\r\n animated: isFocused && animated && (shouldAnimate || hover)\r\n })\r\n }\r\n return undefined\r\n }\r\n\r\n render() {\r\n var props = this.props,\r\n emojiName = props.emojiName,\r\n animated = props.animated,\r\n jumboable = props.jumboable,\r\n imgProps = {\r\n\r\n }(props.shouldAnimate, props.isFocused, props.emojiId, props.autoplay, y(props, [\"emojiName\", \"animated\", \"className\", \"jumboable\", \"shouldAnimate\", \"isFocused\", \"emojiId\", \"autoplay\"])),\r\n src = this.getSrc();\r\n if(src){\r\n return React.createElement(\"img\", Object.assign({}, imgProps, {\r\n key: this.key,\r\n src,\r\n alt: emojiName || undefined,\r\n draggable: false\r\n }, animated ? {\r\n onMouseEnter: this.onMouseEnter,\r\n onMouseLeave: this.onMouseLeave\r\n } : {}, {\r\n className: `emoji${jumboable ? \" jumboable\" : \"\"}`,\r\n onError: this.onError\r\n }))\r\n }\r\n return React.createElement(\"span\", {\r\n className: \"emoji emoji-text\"\r\n }, undefined, emojiName)\r\n }\r\n}\r\nEmoji.displayName = \"Emoji\";\r\n\r\nfunction createEmojiComponent(){\r\n return React.createElement(Emoji, Object.assign({}, t, {\r\n shouldAnimate: t.animated\r\n }))\r\n}*///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcz8wODg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJkQ29uZmlnLCBzZXR0aW5nc0Nvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmNvbnN0IENvbnN0YW50cyA9IHtcbiAgRW1vamlSZWdleDogLzxhP1xcLihcXHcrKVxcLihcXGQrKT4vZ1xufTtcbmxldCBDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXTtcbmxldCBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF07XG5sZXQgQXV0b2NvbXBsZXRlTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpO1xuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb2ppTW9kdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgd2hpbGUgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcblxuICAgIGlmICh0aGlzLmNhbmNlbEVtb2ppUmVuZGVyKSByZXR1cm47XG4gICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHtcbiAgICAgIGJlZm9yZTogZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKTtcbiAgICAgICAgaWYgKCFtZXNzYWdlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFwiKTtcbiAgICAgICAgaWYgKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7e1xyXG4gICAgICAgICAqICByYXc6IHN0cmluZyxcclxuICAgICAgICAgKiAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAqICBpZDogc3RyaW5nLFxyXG4gICAgICAgICAqICBhbmltYXRlZDogYm9vbGVhblxyXG4gICAgICAgICAqIH1bXX1cclxuICAgICAgICAgKi9cblxuICAgICAgICBsZXQgZW1vamlzID0gW107XG4gICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBub2RlIG9mIGNvbnRlbnQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIDtcbiAgICAgICAgICBsZXQgcGFyc2VkO1xuICAgICAgICAgIGxldCBoYXNQYXJzZWQgPSBmYWxzZTtcblxuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IENvbnN0YW50cy5FbW9qaVJlZ2V4LmV4ZWMobm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgaGFzUGFyc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaWYgKCFFbW9qaU1vZHVsZUFwaSkgRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdO1xuICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IEVtb2ppTW9kdWxlQXBpLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKHBhcnNlZFsyXSk7XG5cbiAgICAgICAgICAgICAgaWYgKGVtb2ppKSB7XG4gICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogZW1vamkubmFtZSxcbiAgICAgICAgICAgICAgICAgIGlkOiBlbW9qaS5pZCxcbiAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXG4gICAgICAgICAgICAgICAgICBuYW1lOiBwYXJzZWRbMV0sXG4gICAgICAgICAgICAgICAgICBpZDogcGFyc2VkWzJdLFxuICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gd2hpbGUgKHBhcnNlZCk7XG5cbiAgICAgICAgICBpZiAoaGFzUGFyc2VkKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoXCIgXCIpLm1hcCgod29yZCwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXdvcmQpIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IGVtb2ppcy5maW5kKGUgPT4gZS5yYXcgPT0gd29yZCk7XG4gICAgICAgICAgICAgIGlmICghZW1vamkpIHJldHVybiB3b3JkO1xuICAgICAgICAgICAgICBpZiAoIUN1c3RvbUVtb2ppTW9kdWxlKSBDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXTtcbiAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tRW1vamlNb2R1bGUuQ3VzdG9tRW1vamksIHtcbiAgICAgICAgICAgICAgICBlbW9qaToge1xuICAgICAgICAgICAgICAgICAgbmFtZTogYC4ke2Vtb2ppLm5hbWV9LmAsXG4gICAgICAgICAgICAgICAgICBlbW9qaUlkOiBlbW9qaS5pZCxcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgICAgICAgIGp1bWJvYWJsZTogYXJyLmxlbmd0aCA9PT0gMSAmJiBjb250ZW50Lmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwcmV2aW91cy5sZW5ndGggPT09IDApIHJldHVybiBbY3VycmVudF07XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gKz0gYCAke2N1cnJlbnR9YDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiICsgY3VycmVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIiwgY3VycmVudCk7XG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaCguLi53b3Jkcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50WzBdKSB7XG4gICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAobmV3Q29udGVudFswXSkge1xuICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5wdXNoKG5ld0NvbnRlbnQuc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUF1dG9jb21wbGV0ZU1vZHVsZSkgQXV0b2NvbXBsZXRlTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xuICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcbiAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gbnVsbDtcbiAgfVxuXG59KCk7XG4vKlxyXG5sZXQgbG9hZEltYWdlTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubG9hZEltYWdlKVswXVxyXG5sZXQgZ2V0RW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRFbW9qaVVSTClbMF1cclxuXHJcbmNsYXNzIEVtb2ppIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgaG92ZXI6IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua2V5ID0gdW5kZWZpbmVkXHJcbiAgICAgICAgdGhpcy5jYW5jZWxMb2FkSW1hZ2UgPSBudWxsXHJcbiAgICAgICAgdGhpcy5vbkVycm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRXJyb3IoKSB7XHJcbiAgICAgICAgdmFyIHNyYyA9IHRoaXMuZ2V0U3JjKCk7XHJcbiAgICAgICAgaWYoc3JjICE9PSBudWxsKXtcclxuICAgICAgICAgICAgaWYoIWxvYWRJbWFnZU1vZHVsZSlsb2FkSW1hZ2VNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sb2FkSW1hZ2UpWzBdIC8vIGxhenkgbG9hZFxyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbExvYWRJbWFnZSA9IGxvYWRJbWFnZU1vZHVsZS5sb2FkSW1hZ2Uoc3JjLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoIWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2V5ID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlRW50ZXIoZXYpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgaG92ZXI6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgb25Nb3VzZUVudGVyID0gdGhpcy5wcm9wcy5vbk1vdXNlRW50ZXI7XHJcbiAgICAgICAgaWYob25Nb3VzZUVudGVyKW9uTW91c2VFbnRlcihldilcclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlTGVhdmUoZXYpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgaG92ZXI6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIG9uTW91c2VMZWF2ZSA9IHQucHJvcHMub25Nb3VzZUxlYXZlO1xyXG4gICAgICAgIGlmKG9uTW91c2VMZWF2ZSlvbk1vdXNlTGVhdmUoZXYpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIGlmKHRoaXMuY2FuY2VsTG9hZEltYWdlKXRoaXMuY2FuY2VsTG9hZEltYWdlKClcclxuICAgIH1cclxuXHJcbiAgICBnZXRTcmMoZGVmYXVsdFByb3BzKSB7XHJcbiAgICAgICAgaWYoIWRlZmF1bHRQcm9wcylkZWZhdWx0UHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkZWZhdWx0UHJvcHNcclxuICAgICAgICBjb25zdCBzcmMgPSBwcm9wcy5zcmNcclxuICAgICAgICBjb25zdCBlbW9qaUlkID0gcHJvcHMuZW1vamlJZFxyXG4gICAgICAgIGNvbnN0IGVtb2ppTmFtZSA9IHByb3BzLmVtb2ppTmFtZVxyXG4gICAgICAgIGNvbnN0IGFuaW1hdGVkID0gcHJvcHMuYW5pbWF0ZWRcclxuICAgICAgICBjb25zdCBzaG91bGRBbmltYXRlID0gcHJvcHMuc2hvdWxkQW5pbWF0ZVxyXG4gICAgICAgIGNvbnN0IGlzRm9jdXNlZCA9IHByb3BzLmlzRm9jdXNlZFxyXG4gICAgICAgIGNvbnN0IGhvdmVyID0gdGhpcy5zdGF0ZS5ob3ZlclxyXG5cclxuICAgICAgICBpZihzcmMpcmV0dXJuIHNyY1xyXG4gICAgICAgIGlmKGVtb2ppSWQpe1xyXG4gICAgICAgICAgICBpZighZ2V0RW1vamlNb2R1bGUpZ2V0RW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRFbW9qaVVSTClbMF1cclxuICAgICAgICAgICAgcmV0dXJuIGdldEVtb2ppTW9kdWxlLmRlZmF1bHQuZ2V0RW1vamlVUkwoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGVtb2ppSWQsXHJcbiAgICAgICAgICAgICAgICBhbmltYXRlZDogaXNGb2N1c2VkICYmIGFuaW1hdGVkICYmIChzaG91bGRBbmltYXRlIHx8IGhvdmVyKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHMsXHJcbiAgICAgICAgICAgIGVtb2ppTmFtZSA9IHByb3BzLmVtb2ppTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0ZWQgPSBwcm9wcy5hbmltYXRlZCxcclxuICAgICAgICAgICAganVtYm9hYmxlID0gcHJvcHMuanVtYm9hYmxlLFxyXG4gICAgICAgICAgICBpbWdQcm9wcyA9IHtcclxuXHJcbiAgICAgICAgICAgIH0ocHJvcHMuc2hvdWxkQW5pbWF0ZSwgcHJvcHMuaXNGb2N1c2VkLCBwcm9wcy5lbW9qaUlkLCBwcm9wcy5hdXRvcGxheSwgeShwcm9wcywgW1wiZW1vamlOYW1lXCIsIFwiYW5pbWF0ZWRcIiwgXCJjbGFzc05hbWVcIiwgXCJqdW1ib2FibGVcIiwgXCJzaG91bGRBbmltYXRlXCIsIFwiaXNGb2N1c2VkXCIsIFwiZW1vamlJZFwiLCBcImF1dG9wbGF5XCJdKSksXHJcbiAgICAgICAgICAgIHNyYyA9IHRoaXMuZ2V0U3JjKCk7XHJcbiAgICAgICAgaWYoc3JjKXtcclxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgT2JqZWN0LmFzc2lnbih7fSwgaW1nUHJvcHMsIHtcclxuICAgICAgICAgICAgICAgIGtleTogdGhpcy5rZXksXHJcbiAgICAgICAgICAgICAgICBzcmMsXHJcbiAgICAgICAgICAgICAgICBhbHQ6IGVtb2ppTmFtZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sIGFuaW1hdGVkID8ge1xyXG4gICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyOiB0aGlzLm9uTW91c2VFbnRlcixcclxuICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZTogdGhpcy5vbk1vdXNlTGVhdmVcclxuICAgICAgICAgICAgfSA6IHt9LCB7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGBlbW9qaSR7anVtYm9hYmxlID8gXCIganVtYm9hYmxlXCIgOiBcIlwifWAsXHJcbiAgICAgICAgICAgICAgICBvbkVycm9yOiB0aGlzLm9uRXJyb3JcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJlbW9qaSBlbW9qaS10ZXh0XCJcclxuICAgICAgICB9LCB1bmRlZmluZWQsIGVtb2ppTmFtZSlcclxuICAgIH1cclxufVxyXG5FbW9qaS5kaXNwbGF5TmFtZSA9IFwiRW1vamlcIjtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUVtb2ppQ29tcG9uZW50KCl7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChFbW9qaSwgT2JqZWN0LmFzc2lnbih7fSwgdCwge1xyXG4gICAgICAgIHNob3VsZEFuaW1hdGU6IHQuYW5pbWF0ZWRcclxuICAgIH0pKVxyXG59Ki8iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/emojiModule.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n\n\n\n //import DiscordCrypt from \"./DiscordCrypt\";\n\nconst Constants = {\n EmojiRegex: //g\n};\nlet CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0];\nlet EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0];\nlet AutocompleteModule = BDModules.get(e => e.default && e.default.displayName === \"Autocomplete\")[0];\nlet AutoCompletionTemplates = BDModules.get(e => e.getAutocompleteOptions)[0];\nlet EmojiModuleQuery = BDModules.get(e => e.default && e.default.queryEmojiResults)[0];\nlet Messages = BDModules.get(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING)[0];\nlet guildModule = BDModules.get(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching)[0];\nlet emojiSearch = BDModules.get(e => e.default && e.default.getDisambiguatedEmojiContext);\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmojiModule {\n constructor() {\n this.init();\n }\n\n async init() {\n if (!AutocompleteModule) AutocompleteModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.displayName === \"Autocomplete\");\n if (!AutoCompletionTemplates) AutoCompletionTemplates = await window.Lightcord.Api.ensureExported(e => e.getAutocompleteOptions);\n if (!EmojiModuleQuery) EmojiModuleQuery = await window.Lightcord.Api.ensureExported(e => e.default && e.default.queryEmojiResults);\n if (!Messages) Messages = await window.Lightcord.Api.ensureExported(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING);\n if (!guildModule) guildModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching);\n if (!emojiSearch) emojiSearch = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getDisambiguatedEmojiContext);\n\n if (true\n /** AutocompleteModule && AutoCompletionTemplates && EmojiModuleQuery && Messages && guildModule && emojiSearch */\n ) {\n /*\r\n if(!this.cancelAutocompleteRender){\r\n this.cancelAutocompleteRender = Utils.monkeyPatch(AutocompleteModule, \"default\", {\r\n })\r\n }*/\n console.log(`Patching getAutocompleteOptions of AutoCompletionTemplates`, AutoCompletionTemplates);\n const getAutocompleteOptions = AutoCompletionTemplates.getAutocompleteOptions;\n\n AutoCompletionTemplates.getAutocompleteOptions = function (e, t, n, r, a) {\n const value = getAutocompleteOptions.call(this, ...arguments);\n value.LIGHTCORD_EMOJIS = {\n matches(arg1, arg2) {\n let condition = arg2.length > 1 && \".\" === arg1;\n setEmojiUsable(condition);\n return condition;\n },\n\n queryResults(t) {\n let results = EmojiModuleQuery.default.queryEmojiResults(t, e);\n return results;\n },\n\n renderResults(e, t, n, r, a) {\n return D(e, t, a.emojis, n, r, Messages.default.Messages.EMOJI_MATCHING, Messages.default.Messages.EMOJI, AutocompleteModule.default.Emoji, function (e) {\n return {\n emoji: e,\n key: e.id || e.uniqueName || e.name,\n sentinel: \".\",\n guild: null != e.guildId ? guildModule.default.getGuild(e.guildId) : null\n };\n }, function (e) {\n return \".\" + e + \".\";\n });\n },\n\n getPlainText(id, emojis) {\n var emojis = emojis.emojis;\n return null == emojis || null == emojis[id] ? \"\" : \".\" + emojis[id].name + \".\";\n },\n\n getRawText(id, guild) {\n var emojis = guild.emojis;\n if (null == emojis || null == emojis[id]) return \"\";\n var emoji = emojis[id],\n isAnimated = emoji.animated ? \"a\" : \"\";\n return emoji.managed || null == emoji.id ? \".\" + emoji.name + \".\" : \"<\" + isAnimated + \".\" + (emoji.originalName || emoji.name) + \".\" + emoji.id + \">\";\n }\n\n };\n return value;\n };\n } else {}\n\n while (!_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MessageComponent) await new Promise(resolve => setTimeout(resolve, 100));\n\n if (!this.cancelEmojiRender) {\n this.cancelEmoteRender = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].monkeyPatch(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MessageComponent, \"default\", {\n before: data => {\n const message = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(data.methodArguments[0], \"childrenMessageContent.props.message\");\n if (!message) return;\n const content = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(data.methodArguments[0], \"childrenMessageContent.props.content\");\n if (!content || !content.length) return; // content = DiscordCrypt.decryptContent(content)\n\n /**\r\n * @type {{\r\n * raw: string,\r\n * name: string,\r\n * id: string,\r\n * animated: boolean\r\n * }[]}\r\n */\n\n let emojis = [];\n const newContent = [];\n\n for (let node of content) {\n if (typeof node !== \"string\") {\n newContent.push(node);\n continue;\n }\n\n ;\n let parsed;\n let hasParsed = false;\n\n do {\n parsed = Constants.EmojiRegex.exec(node);\n\n if (parsed) {\n hasParsed = true;\n if (!EmojiModuleApi) EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0];\n const emoji = EmojiModuleApi.default.getCustomEmojiById(parsed[2]);\n\n if (emoji) {\n emojis.push({\n animated: emoji.animated,\n name: emoji.name,\n id: emoji.id,\n raw: parsed[0]\n });\n } else {\n emojis.push({\n animated: parsed[0].startsWith(\" {\n if (!word) return \"\";\n const emoji = emojis.find(e => e.raw == word);\n if (!emoji) return word;\n if (!CustomEmojiModule) CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0];\n return React.createElement(CustomEmojiModule.CustomEmoji, {\n emoji: {\n name: `.${emoji.name}.`,\n emojiId: emoji.id,\n animated: emoji.animated,\n jumboable: arr.length === 1 && content.length === 1\n }\n });\n }).reduce((previous, current) => {\n if (previous.length === 0) return [current];\n\n if (typeof current === \"string\") {\n if (typeof previous[previous.length - 1] === \"string\") {\n previous[previous.length - 1] += ` ${current}`;\n return previous;\n }\n\n previous.push(\" \" + current);\n return previous;\n }\n\n previous.push(\" \", current);\n return previous;\n }, []);\n newContent.push(...words);\n } else {\n newContent.push(node);\n }\n }\n\n while (data.methodArguments[0].childrenMessageContent.props.content[0]) {\n data.methodArguments[0].childrenMessageContent.props.content.shift();\n }\n\n while (newContent[0]) {\n data.methodArguments[0].childrenMessageContent.props.content.push(newContent.shift());\n }\n }\n });\n }\n }\n\n disable() {\n if (!this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n this.cancelEmoteRender = null;\n }\n\n}());\n\nfunction D(e, t, n, r, o, i, s, u, l, c) {\n if (null == n || 0 === n.length) return null;\n var d = n.map(function (e, n) {\n return React.createElement(u, Object.assign({\n onClick: o,\n onHover: r,\n selected: t === n,\n index: n\n }, l(e, n)));\n });\n return [R(i, s, e, c), d];\n}\n\nfunction R(e, t, n, r) {\n var a = n.length > 0 ? e.format({\n prefix: r(n)\n }) : t;\n\n if (Array.isArray(a)) {\n a.unshift(React.createElement(\"strong\", {}, \"[Lightcord] \"));\n } else {\n a = \"[LIGHTCORD] \" + a;\n }\n\n return React.createElement(AutocompleteModule.default.Title, {\n title: a\n }, a);\n}\n\nR.displayName = \"renderHeader\";\nlet EmojiFilterModule = BDModules.get(e => e.default && e.default.isEmojiDisabled)[0];\nlet isEmojiDisabled = EmojiFilterModule && EmojiFilterModule.default.isEmojiDisabled;\nlet isUsable = false;\nlet hasPatched = false;\n\nfunction setEmojiUsable(usable) {\n isUsable = usable;\n if (hasPatched) return;\n if (!EmojiFilterModule) EmojiFilterModule = BDModules.get(e => e.default && e.default.isEmojiDisabled)[0];\n if (!EmojiFilterModule) return;\n if (!isEmojiDisabled) isEmojiDisabled = EmojiFilterModule.default.isEmojiDisabled;\n hasPatched = true;\n\n EmojiFilterModule.default.isEmojiDisabled = function () {\n if (isUsable) return false;\n return isEmojiDisabled.call(this, ...arguments);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcz8wODg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJkQ29uZmlnLCBzZXR0aW5nc0Nvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjsgLy9pbXBvcnQgRGlzY29yZENyeXB0IGZyb20gXCIuL0Rpc2NvcmRDcnlwdFwiO1xuXG5jb25zdCBDb25zdGFudHMgPSB7XG4gIEVtb2ppUmVnZXg6IC88YT9cXC4oXFx3KylcXC4oXFxkKyk+L2dcbn07XG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF07XG5sZXQgRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdO1xubGV0IEF1dG9jb21wbGV0ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVswXTtcbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdO1xubGV0IEVtb2ppTW9kdWxlUXVlcnkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylbMF07XG5sZXQgTWVzc2FnZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpWzBdO1xubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdO1xubGV0IGVtb2ppU2VhcmNoID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCk7XG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgaWYgKCFBdXRvY29tcGxldGVNb2R1bGUpIEF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIik7XG4gICAgaWYgKCFBdXRvQ29tcGxldGlvblRlbXBsYXRlcykgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyk7XG4gICAgaWYgKCFFbW9qaU1vZHVsZVF1ZXJ5KSBFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKTtcbiAgICBpZiAoIU1lc3NhZ2VzKSBNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpO1xuICAgIGlmICghZ3VpbGRNb2R1bGUpIGd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKTtcbiAgICBpZiAoIWVtb2ppU2VhcmNoKSBlbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KTtcblxuICAgIGlmICh0cnVlXG4gICAgLyoqIEF1dG9jb21wbGV0ZU1vZHVsZSAmJiBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyAmJiBFbW9qaU1vZHVsZVF1ZXJ5ICYmIE1lc3NhZ2VzICYmIGd1aWxkTW9kdWxlICYmIGVtb2ppU2VhcmNoICovXG4gICAgKSB7XG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYoIXRoaXMuY2FuY2VsQXV0b2NvbXBsZXRlUmVuZGVyKXtcclxuICAgICAgICB0aGlzLmNhbmNlbEF1dG9jb21wbGV0ZVJlbmRlciA9IFV0aWxzLm1vbmtleVBhdGNoKEF1dG9jb21wbGV0ZU1vZHVsZSwgXCJkZWZhdWx0XCIsIHtcclxuICAgICAgICB9KVxyXG4gICAgICAgIH0qL1xuICAgICAgICBjb25zb2xlLmxvZyhgUGF0Y2hpbmcgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyBvZiBBdXRvQ29tcGxldGlvblRlbXBsYXRlc2AsIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKTtcbiAgICAgICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnM7XG5cbiAgICAgICAgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IGZ1bmN0aW9uIChlLCB0LCBuLCByLCBhKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRBdXRvY29tcGxldGVPcHRpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xuICAgICAgICAgICAgbWF0Y2hlcyhhcmcxLCBhcmcyKSB7XG4gICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBhcmcyLmxlbmd0aCA+IDEgJiYgXCIuXCIgPT09IGFyZzE7XG4gICAgICAgICAgICAgIHNldEVtb2ppVXNhYmxlKGNvbmRpdGlvbik7XG4gICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBxdWVyeVJlc3VsdHModCkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IEVtb2ppTW9kdWxlUXVlcnkuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cyh0LCBlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZW5kZXJSZXN1bHRzKGUsIHQsIG4sIHIsIGEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEQoZSwgdCwgYS5lbW9qaXMsIG4sIHIsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSkksIEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LkVtb2ppLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBlbW9qaTogZSxcbiAgICAgICAgICAgICAgICAgIGtleTogZS5pZCB8fCBlLnVuaXF1ZU5hbWUgfHwgZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgc2VudGluZWw6IFwiLlwiLFxuICAgICAgICAgICAgICAgICAgZ3VpbGQ6IG51bGwgIT0gZS5ndWlsZElkID8gZ3VpbGRNb2R1bGUuZGVmYXVsdC5nZXRHdWlsZChlLmd1aWxkSWQpIDogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLlwiICsgZSArIFwiLlwiO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldFBsYWluVGV4dChpZCwgZW1vamlzKSB7XG4gICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBlbW9qaXMuZW1vamlzO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdID8gXCJcIiA6IFwiLlwiICsgZW1vamlzW2lkXS5uYW1lICsgXCIuXCI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRSYXdUZXh0KGlkLCBndWlsZCkge1xuICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcbiAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBzdGFydCBhdXRvY29tcGxldGlvbiBvZiBMaWdodGNvcmQncyBlbW9qaXMuXCIpKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuXG4gICAgaWYgKCF0aGlzLmNhbmNlbEVtb2ppUmVuZGVyKSB7XG4gICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge1xuICAgICAgICBiZWZvcmU6IGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKTtcbiAgICAgICAgICBpZiAoIW1lc3NhZ2UpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIik7XG4gICAgICAgICAgaWYgKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aCkgcmV0dXJuOyAvLyBjb250ZW50ID0gRGlzY29yZENyeXB0LmRlY3J5cHRDb250ZW50KGNvbnRlbnQpXG5cbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEB0eXBlIHt7XHJcbiAgICAgICAgICAgKiAgcmF3OiBzdHJpbmcsXHJcbiAgICAgICAgICAgKiAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAgICogIGlkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgKiAgYW5pbWF0ZWQ6IGJvb2xlYW5cclxuICAgICAgICAgICAqIH1bXX1cclxuICAgICAgICAgICAqL1xuXG4gICAgICAgICAgbGV0IGVtb2ppcyA9IFtdO1xuICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IG5vZGUgb2YgY29udGVudCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGxldCBwYXJzZWQ7XG4gICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcGFyc2VkID0gQ29uc3RhbnRzLkVtb2ppUmVnZXguZXhlYyhub2RlKTtcblxuICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgaGFzUGFyc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIUVtb2ppTW9kdWxlQXBpKSBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBFbW9qaU1vZHVsZUFwaS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZChwYXJzZWRbMl0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVtb2ppKSB7XG4gICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZW1vamkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGVtb2ppLmlkLFxuICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcbiAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcblxuICAgICAgICAgICAgaWYgKGhhc1BhcnNlZCkge1xuICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoXCIgXCIpLm1hcCgod29yZCwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghd29yZCkgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpO1xuICAgICAgICAgICAgICAgIGlmICghZW1vamkpIHJldHVybiB3b3JkO1xuICAgICAgICAgICAgICAgIGlmICghQ3VzdG9tRW1vamlNb2R1bGUpIEN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEN1c3RvbUVtb2ppTW9kdWxlLkN1c3RvbUVtb2ppLCB7XG4gICAgICAgICAgICAgICAgICBlbW9qaToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcbiAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMubGVuZ3RoID09PSAwKSByZXR1cm4gW2N1cnJlbnRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdICs9IGAgJHtjdXJyZW50fWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIiArIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRbMF0pIHtcbiAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5zaGlmdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChuZXdDb250ZW50WzBdKSB7XG4gICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQucHVzaChuZXdDb250ZW50LnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcbiAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKCk7XG4gICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IG51bGw7XG4gIH1cblxufSgpO1xuXG5mdW5jdGlvbiBEKGUsIHQsIG4sIHIsIG8sIGksIHMsIHUsIGwsIGMpIHtcbiAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIHZhciBkID0gbi5tYXAoZnVuY3Rpb24gKGUsIG4pIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh1LCBPYmplY3QuYXNzaWduKHtcbiAgICAgIG9uQ2xpY2s6IG8sXG4gICAgICBvbkhvdmVyOiByLFxuICAgICAgc2VsZWN0ZWQ6IHQgPT09IG4sXG4gICAgICBpbmRleDogblxuICAgIH0sIGwoZSwgbikpKTtcbiAgfSk7XG4gIHJldHVybiBbUihpLCBzLCBlLCBjKSwgZF07XG59XG5cbmZ1bmN0aW9uIFIoZSwgdCwgbiwgcikge1xuICB2YXIgYSA9IG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcbiAgICBwcmVmaXg6IHIobilcbiAgfSkgOiB0O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgYS51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwge30sIFwiW0xpZ2h0Y29yZF0gXCIpKTtcbiAgfSBlbHNlIHtcbiAgICBhID0gXCJbTElHSFRDT1JEXSBcIiArIGE7XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5UaXRsZSwge1xuICAgIHRpdGxlOiBhXG4gIH0sIGEpO1xufVxuXG5SLmRpc3BsYXlOYW1lID0gXCJyZW5kZXJIZWFkZXJcIjtcbmxldCBFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF07XG5sZXQgaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUgJiYgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQ7XG5sZXQgaXNVc2FibGUgPSBmYWxzZTtcbmxldCBoYXNQYXRjaGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNldEVtb2ppVXNhYmxlKHVzYWJsZSkge1xuICBpc1VzYWJsZSA9IHVzYWJsZTtcbiAgaWYgKGhhc1BhdGNoZWQpIHJldHVybjtcbiAgaWYgKCFFbW9qaUZpbHRlck1vZHVsZSkgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdO1xuICBpZiAoIUVtb2ppRmlsdGVyTW9kdWxlKSByZXR1cm47XG4gIGlmICghaXNFbW9qaURpc2FibGVkKSBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZDtcbiAgaGFzUGF0Y2hlZCA9IHRydWU7XG5cbiAgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzVXNhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGlzRW1vamlEaXNhYmxlZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cyk7XG4gIH07XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/emojiModule.js\n"); /***/ }), @@ -371,7 +371,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uti /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _settingsPanelSidebar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsPanelSidebar */ \"./src/modules/settingsPanelSidebar.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _contentManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contentManager */ \"./src/modules/contentManager.js\");\n/* harmony import */ var _bdEvents__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./bdEvents */ \"./src/modules/bdEvents.js\");\n/* harmony import */ var _coloredText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./coloredText */ \"./src/modules/coloredText.js\");\n/* harmony import */ var _24hour__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./24hour */ \"./src/modules/24hour.js\");\n/* harmony import */ var _reactDevTools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactDevTools */ \"./src/modules/reactDevTools.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _publicServers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./publicServers */ \"./src/modules/publicServers.js\");\n/* harmony import */ var _voiceMode__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./voiceMode */ \"./src/modules/voiceMode.js\");\n/* harmony import */ var _classNormalizer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./classNormalizer */ \"./src/modules/classNormalizer.js\");\n/* harmony import */ var _devMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./devMode */ \"./src/modules/devMode.js\");\n/* harmony import */ var _ui_tools__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../ui/tools */ \"./src/ui/tools.js\");\n/* harmony import */ var _ui_scroller__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../ui/scroller */ \"./src/ui/scroller.js\");\n/* harmony import */ var _ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../ui/sectionedSettingsPanel */ \"./src/ui/sectionedSettingsPanel.js\");\n/* harmony import */ var _ui_settingsPanel__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../ui/settingsPanel */ \"./src/ui/settingsPanel.js\");\n/* harmony import */ var _ui_cssEditor__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../ui/cssEditor */ \"./src/ui/cssEditor.js\");\n/* harmony import */ var _ui_addonlist__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../ui/addonlist */ \"./src/ui/addonlist.jsx\");\n/* harmony import */ var _ui_presenceSettings__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../ui/presenceSettings */ \"./src/ui/presenceSettings.jsx\");\n/* harmony import */ var _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./CustomRichPresence */ \"./src/modules/CustomRichPresence.js\");\n/* harmony import */ var _ui_AccountInfos__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../ui/AccountInfos */ \"./src/ui/AccountInfos.jsx\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_24__);\n/* harmony import */ var _AntiAdDM__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./AntiAdDM */ \"./src/modules/AntiAdDM.js\");\n/* harmony import */ var _blurPrivate__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./blurPrivate */ \"./src/modules/blurPrivate.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class V2_SettingsPanel {\n constructor() {\n this.sideBarOnClick = this.sideBarOnClick.bind(this);\n this.onChange = this.onChange.bind(this);\n this.updateSettings = this.updateSettings.bind(this);\n this.sidebar = new _settingsPanelSidebar__WEBPACK_IMPORTED_MODULE_2__[\"default\"](this.sideBarOnClick); // this.buildPluginProps = this.buildPluginProps.bind(this);\n // this.buildThemeProps = this.buildThemeProps.bind(this);\n\n this.showOriginal = this.showOriginal.bind(this);\n }\n\n get root() {\n const _root = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#bd-settingspane-container\");\n\n if (!_root) {\n if (!this.injectRoot()) return null;\n return this.root;\n }\n\n return _root;\n }\n\n injectRoot() {\n let [classNameLayer, classSidebar] = [BDModules.get(e => e.layer && e.animating)[0].layer.split(\" \")[0], BDModules.get(e => e.standardSidebarView)[0]];\n const sidebar = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".\" + classNameLayer + \" .\" + classSidebar.standardSidebarView.split(\" \")[0] + \", .\" + classNameLayer + \" .ui-standard-sidebar-view\");\n if (!sidebar) return false;\n const root = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createElement(`
`);\n sidebar.append(root);\n _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].onRemoved(root, () => {\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.unmountComponentAtNode(root);\n });\n return true;\n }\n\n get coreSettings() {\n const settings = this.getSettings(\"core\");\n const categories = [...new Set(settings.map(s => s.category))];\n const sections = categories.map(c => {\n return {\n title: c,\n settings: settings.filter(s => s.category == c)\n };\n });\n return sections;\n }\n\n get lightcordSettings() {\n const settings = this.getSettings(\"lightcord\");\n const categories = [...new Set(settings.map(s => s.category))];\n const sections = categories.map(c => {\n return {\n title: c,\n settings: settings.filter(s => s.category == c)\n };\n });\n return sections;\n }\n\n get PresenceSettings() {\n return this.getSettings(\"status\");\n }\n\n get MsgLogSettings() {\n return this.getSettings(\"msglog\");\n }\n\n getSettings(category) {\n return Object.keys(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]).reduce((arr, key) => {\n const setting = _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settings\"][key];\n\n if (setting.cat === category && setting.implemented && !setting.hidden) {\n setting.text = key;\n arr.push(setting);\n }\n\n return arr;\n }, []);\n }\n\n sideBarOnClick(id) {\n const contentRegion = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".contentRegion-3nDuYy, .content-region\");\n contentRegion.style.display = \"none\";\n this.root.style.display = \"\";\n\n switch (id) {\n case \"core\":\n this.renderCoreSettings();\n break;\n\n case \"customcss\":\n this.renderCustomCssEditor();\n break;\n\n case \"plugins\":\n case \"themes\":\n this.renderAddonPane(id);\n break;\n\n case \"lightcord\":\n this.renderLightCordSettings();\n break;\n\n case \"status\":\n this.renderPresenceSettings();\n break;\n\n case \"accountinfo\":\n this.renderAccountInfos();\n break;\n }\n }\n\n onClick() {}\n\n onChange(id, checked) {\n this.updateSettings(id, checked);\n }\n\n updateSettings(id, enabled) {\n _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][id] = enabled;\n\n if (id == \"bda-gs-2\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(document.body, \"bd-minimal\");\n }\n\n if (id == \"bda-gs-3\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal-chan\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(document.body, \"bd-minimal-chan\");\n }\n\n if (id == \"bda-gs-1\") {\n if (enabled) _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].addButton();else _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].removeButton();\n }\n\n if (id == \"bda-gs-4\") {\n if (enabled) _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();else _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].stop();\n }\n\n if (id == \"bda-gs-5\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");\n }\n\n if (enabled && id == \"bda-gs-6\") _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"].inject24Hour();\n\n if (id == \"bda-gs-7\") {\n if (enabled) _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].injectColoredText();else _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].removeColoredText();\n }\n\n if (id == \"fork-ps-4\") {\n if (enabled) _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].start();else _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].stop();\n }\n\n if (id == \"fork-ps-5\") {\n if (enabled) {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"theme\");\n } else {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].unwatchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].unwatchContent(\"theme\");\n }\n }\n\n if (id == \"fork-wp-1\") {\n _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"transparent\", enabled);\n if (enabled) _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"backgroundColor\", null);else _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"backgroundColor\", \"#2f3136\");\n }\n\n if (id == \"bda-gs-8\") {\n if (enabled) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startDebugListener();else _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].stopDebugListener();\n }\n\n if (id == \"fork-dm-1\") {\n if (enabled) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startCopySelector();else _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].stopCopySelector();\n }\n\n if (id === \"reactDevTools\") {\n if (enabled) _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].start();else _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].stop();\n }\n\n if (id === \"lightcord-1\") {\n if (enabled) window.Lightcord.Settings.devMode = true;else window.Lightcord.Settings.devMode = false;\n }\n\n if (id === \"lightcord-2\") {\n if (enabled) window.Lightcord.Settings.callRingingBeat = true;else window.Lightcord.Settings.callRingingBeat = false;\n }\n\n if (id === \"lightcord-presence-1\") {\n if (enabled) {\n _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].enable();\n const settingsStore = BDModules.get(e => e.default && typeof e.default === \"object\" && \"showCurrentGame\" in e.default)[0];\n\n if (settingsStore && !settingsStore.default.showCurrentGame) {\n BDModules.get(e => e.default && e.default.updateRemoteSettings)[0].default.updateRemoteSettings({\n showCurrentGame: true\n });\n }\n } else _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].disable();\n }\n\n if (id === \"lightcord-3\") {\n if (enabled) electron__WEBPACK_IMPORTED_MODULE_24__[\"remote\"].getCurrentWindow().setAlwaysOnTop(true);else electron__WEBPACK_IMPORTED_MODULE_24__[\"remote\"].getCurrentWindow().setAlwaysOnTop(false);\n }\n\n if (id === \"lightcord-4\") {\n if (enabled) {\n _AntiAdDM__WEBPACK_IMPORTED_MODULE_25__[\"default\"].enable();\n } else {\n _AntiAdDM__WEBPACK_IMPORTED_MODULE_25__[\"default\"].disable();\n }\n }\n\n if (id === \"lightcord-6\") {\n if (enabled) {\n _blurPrivate__WEBPACK_IMPORTED_MODULE_26__[\"default\"].enable();\n } else {\n _blurPrivate__WEBPACK_IMPORTED_MODULE_26__[\"default\"].disable();\n }\n }\n\n this.saveSettings();\n }\n\n async initializeSettings() {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"].reactDevTools) _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-2\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-3\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal-chan\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-1\"]) _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].addButton();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-4\"]) _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-5\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-6\"]) _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"].inject24Hour();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-7\"]) _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].injectColoredText();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-4\"]) _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-1\"]) window.Lightcord.Settings.devMode = true;\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-2\"]) window.Lightcord.Settings.callRingingBeat = true;\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-presence-1\"]) _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].enable();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-3\"]) electron__WEBPACK_IMPORTED_MODULE_24__[\"remote\"].getCurrentWindow().setAlwaysOnTop(true);\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-4\"]) _AntiAdDM__WEBPACK_IMPORTED_MODULE_25__[\"default\"].enable();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-6\"]) _blurPrivate__WEBPACK_IMPORTED_MODULE_26__[\"default\"].enable();\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-5\"]) {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"theme\");\n }\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-8\"]) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startDebugListener();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-dm-1\"]) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startCopySelector();\n this.saveSettings();\n }\n\n saveSettings() {\n _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingGroup(\"settings\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"]);\n _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingGroup(\"rpc\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"]);\n }\n\n loadSettings() {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"], _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSettingGroup(\"settings\"));\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"], _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSettingGroup(\"rpc\"));\n }\n\n showOriginal() {\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.unmountComponentAtNode(this.root);\n this.root.style.display = \"none\";\n _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".\" + BDModules.get(e => e.contentRegion)[0].contentRegion.split(\" \")[0] + \", .content-region\").style.display = \"\";\n }\n\n renderSidebar() {\n const tabs = document.querySelectorAll(\"[class*='side-'] > [class*='item-']\");\n\n for (const element of tabs) {\n element.removeEventListener(\"click\", this.showOriginal);\n element.addEventListener(\"click\", this.showOriginal);\n }\n\n this.sidebar.render();\n }\n\n get coreComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"cspanel\",\n onChange: this.onChange,\n sections: this.coreSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get lightcordComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"lspannel\",\n onChange: this.onChange,\n sections: this.lightcordSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get PresenceComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_presenceSettings__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: \"lppannel\",\n onChange: this.onChange,\n settings: this.PresenceSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get AccountInfosComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_AccountInfos__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: \"lapannel\"\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get customCssComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_cssEditor__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n key: \"csseditor\"\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n renderCoreSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.coreComponent, root);\n }\n\n renderLightCordSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.lightcordComponent, root);\n }\n\n renderPresenceSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.PresenceComponent, root);\n }\n\n renderAccountInfos() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.AccountInfosComponent, root);\n }\n\n renderCustomCssEditor() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.customCssComponent, root);\n } // renderAddonPane(type) {\n // const root = this.root;\n // if (!root) return Utils.err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n // BDV2.reactDom.render(this.contentComponent(type), root);\n // }\n\n\n renderAddonPane(type) {\n if (!this.root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\"); // I know this shouldn't be here, but when it isn't,\n // React refuses to change the button when going\n // between plugins and themes page... something\n // to debug later.\n\n class ContentList extends _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.Component {\n constructor(props) {\n super(props);\n this.prefix = this.props.type.replace(\"s\", \"\");\n this.onChange = this.onChange.bind(this);\n }\n\n componentDidMount() {\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-reloaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-loaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-unloaded`, this.onChange);\n }\n\n componentWillUnmount() {\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-reloaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-loaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-unloaded`, this.onChange);\n }\n\n onChange() {\n this.props.onChange(this.props.type);\n }\n\n render() {\n return this.props.children;\n }\n\n }\n\n const originalRender = ContentList.prototype.render;\n Object.defineProperty(ContentList.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function () {\n console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");\n },\n get: () => originalRender\n });\n const list = type === \"plugins\" ? Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdplugins\"]) : Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdthemes\"]);\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(ContentList, {\n type,\n onChange: this.sideBarOnClick\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_addonlist__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n type,\n list\n })), this.root);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9zZXR0aW5nc1BhbmVsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanM/NTdiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXR0aW5ncywgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsU2lkZWJhclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xuaW1wb3J0IHRmSG91ciBmcm9tIFwiLi8yNGhvdXJcIjtcbmltcG9ydCByZWFjdERldlRvb2xzIGZyb20gXCIuL3JlYWN0RGV2VG9vbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcbmltcG9ydCB2b2ljZU1vZGUgZnJvbSBcIi4vdm9pY2VNb2RlXCI7XG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL2NsYXNzTm9ybWFsaXplclwiO1xuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vdWkvdG9vbHNcIjtcbmltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi4vdWkvc2Nyb2xsZXJcIjtcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IENzc0VkaXRvciBmcm9tIFwiLi4vdWkvY3NzRWRpdG9yXCI7XG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgQW50aUFkRE0gZnJvbSBcIi4vQW50aUFkRE1cIjtcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1NldHRpbmdzUGFuZWwge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNpZGVCYXJPbkNsaWNrID0gdGhpcy5zaWRlQmFyT25DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNpZGViYXIgPSBuZXcgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyKHRoaXMuc2lkZUJhck9uQ2xpY2spOyAvLyB0aGlzLmJ1aWxkUGx1Z2luUHJvcHMgPSB0aGlzLmJ1aWxkUGx1Z2luUHJvcHMuYmluZCh0aGlzKTtcbiAgICAvLyB0aGlzLmJ1aWxkVGhlbWVQcm9wcyA9IHRoaXMuYnVpbGRUaGVtZVByb3BzLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNob3dPcmlnaW5hbCA9IHRoaXMuc2hvd09yaWdpbmFsLmJpbmQodGhpcyk7XG4gIH1cblxuICBnZXQgcm9vdCgpIHtcbiAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIpO1xuXG4gICAgaWYgKCFfcm9vdCkge1xuICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cblxuICAgIHJldHVybiBfcm9vdDtcbiAgfVxuXG4gIGluamVjdFJvb3QoKSB7XG4gICAgbGV0IFtjbGFzc05hbWVMYXllciwgY2xhc3NTaWRlYmFyXSA9IFtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIuc3BsaXQoXCIgXCIpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXV07XG4gICAgY29uc3Qgc2lkZWJhciA9IERPTS5xdWVyeShcIi5cIiArIGNsYXNzTmFtZUxheWVyICsgXCIgLlwiICsgY2xhc3NTaWRlYmFyLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdICsgXCIsIC5cIiArIGNsYXNzTmFtZUxheWVyICsgXCIgLnVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wiKTtcbiAgICBpZiAoIXNpZGViYXIpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCByb290ID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIgY2xhc3M9XCIke2NsYXNzU2lkZWJhci5jb250ZW50UmVnaW9ufSBjb250ZW50LXJlZ2lvblwiPmApO1xuICAgIHNpZGViYXIuYXBwZW5kKHJvb3QpO1xuICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XG4gICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgY29yZVNldHRpbmdzKCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjLFxuICAgICAgICBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VjdGlvbnM7XG4gIH1cblxuICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogYyxcbiAgICAgICAgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYylcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlY3Rpb25zO1xuICB9XG5cbiAgZ2V0IFByZXNlbmNlU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJzdGF0dXNcIik7XG4gIH1cblxuICBnZXQgTXNnTG9nU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJtc2dsb2dcIik7XG4gIH1cblxuICBnZXRTZXR0aW5ncyhjYXRlZ29yeSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XG5cbiAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcbiAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBzaWRlQmFyT25DbGljayhpZCkge1xuICAgIGNvbnN0IGNvbnRlbnRSZWdpb24gPSBET00ucXVlcnkoXCIuY29udGVudFJlZ2lvbi0zbkR1WXksIC5jb250ZW50LXJlZ2lvblwiKTtcbiAgICBjb250ZW50UmVnaW9uLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cbiAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICBjYXNlIFwiY29yZVwiOlxuICAgICAgICB0aGlzLnJlbmRlckNvcmVTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImN1c3RvbWNzc1wiOlxuICAgICAgICB0aGlzLnJlbmRlckN1c3RvbUNzc0VkaXRvcigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInBsdWdpbnNcIjpcbiAgICAgIGNhc2UgXCJ0aGVtZXNcIjpcbiAgICAgICAgdGhpcy5yZW5kZXJBZGRvblBhbmUoaWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImxpZ2h0Y29yZFwiOlxuICAgICAgICB0aGlzLnJlbmRlckxpZ2h0Q29yZFNldHRpbmdzKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwic3RhdHVzXCI6XG4gICAgICAgIHRoaXMucmVuZGVyUHJlc2VuY2VTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImFjY291bnRpbmZvXCI6XG4gICAgICAgIHRoaXMucmVuZGVyQWNjb3VudEluZm9zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2soKSB7fVxuXG4gIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5ncyhpZCwgZW5hYmxlZCkge1xuICAgIHNldHRpbmdzQ29va2llW2lkXSA9IGVuYWJsZWQ7XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYmRhLWdzLTNcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMVwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtlbHNlIHB1YmxpY1NlcnZlcnNNb2R1bGUucmVtb3ZlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO2Vsc2Ugdm9pY2VNb2RlLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNVwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7ZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZCAmJiBpZCA9PSBcImJkYS1ncy02XCIpIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcblxuICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO2Vsc2UgY29sb3JlZFRleHQucmVtb3ZlQ29sb3JlZFRleHQoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTRcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIENsYXNzTm9ybWFsaXplci5zdGFydCgpO2Vsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTVcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInRoZW1lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XG4gICAgICBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XG4gICAgICBpZiAoZW5hYmxlZCkgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBudWxsKTtlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PSBcImJkYS1ncy04XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiZm9yay1kbS0xXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO2Vsc2UgZE1vZGUuc3RvcENvcHlTZWxlY3RvcigpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PT0gXCJyZWFjdERldlRvb2xzXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7ZWxzZSByZWFjdERldlRvb2xzLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTFcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWU7ZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTJcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZTtlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3NTdG9yZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgdHlwZW9mIGUuZGVmYXVsdCA9PT0gXCJvYmplY3RcIiAmJiBcInNob3dDdXJyZW50R2FtZVwiIGluIGUuZGVmYXVsdClbMF07XG5cbiAgICAgICAgaWYgKHNldHRpbmdzU3RvcmUgJiYgIXNldHRpbmdzU3RvcmUuZGVmYXVsdC5zaG93Q3VycmVudEdhbWUpIHtcbiAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncylbMF0uZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncyh7XG4gICAgICAgICAgICBzaG93Q3VycmVudEdhbWU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIEN1c3RvbVJpY2hQcmVzZW5jZS5kaXNhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0zXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpO2Vsc2UgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcChmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC00XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIEFudGlBZERNLmVuYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNlwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBibHVyUHJpdmF0ZS5lbmFibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJsdXJQcml2YXRlLmRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVNldHRpbmdzKCkge1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZS5yZWFjdERldlRvb2xzKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTNcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTVcIl0pIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy00XCJdKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMVwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMlwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCJdKSBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTNcIl0pIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKTtcblxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkge1xuICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLThcIl0pIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICB9XG5cbiAgc2F2ZVNldHRpbmdzKCkge1xuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XG4gIH1cblxuICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKTtcbiAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKTtcbiAgfVxuXG4gIHNob3dPcmlnaW5hbCgpIHtcbiAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yb290KTtcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIERPTS5xdWVyeShcIi5cIiArIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRSZWdpb24pWzBdLmNvbnRlbnRSZWdpb24uc3BsaXQoXCIgXCIpWzBdICsgXCIsIC5jb250ZW50LXJlZ2lvblwiKS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgfVxuXG4gIHJlbmRlclNpZGViYXIoKSB7XG4gICAgY29uc3QgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbY2xhc3MqPSdzaWRlLSddID4gW2NsYXNzKj0naXRlbS0nXVwiKTtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0YWJzKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaWRlYmFyLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IGNvcmVDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtcbiAgICAgIGtleTogXCJjc3BhbmVsXCIsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIHNlY3Rpb25zOiB0aGlzLmNvcmVTZXR0aW5nc1xuICAgIH0pLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtcbiAgICAgIGtleTogXCJ0b29sc1wiXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IGxpZ2h0Y29yZENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7XG4gICAgICBjb250ZW50Q29sdW1uOiB0cnVlLFxuICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgIGRhcms6IHRydWVcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCwge1xuICAgICAga2V5OiBcImxzcGFubmVsXCIsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIHNlY3Rpb25zOiB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzXG4gICAgfSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge1xuICAgICAga2V5OiBcInRvb2xzXCJcbiAgICB9KSk7XG4gIH1cblxuICBnZXQgUHJlc2VuY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XG4gICAgICBrZXk6IFwibHBwYW5uZWxcIixcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuUHJlc2VuY2VTZXR0aW5nc1xuICAgIH0pLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtcbiAgICAgIGtleTogXCJ0b29sc1wiXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IEFjY291bnRJbmZvc0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7XG4gICAgICBjb250ZW50Q29sdW1uOiB0cnVlLFxuICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgIGRhcms6IHRydWVcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xuICAgICAga2V5OiBcImxhcGFubmVsXCJcbiAgICB9KSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7XG4gICAgICBrZXk6IFwidG9vbHNcIlxuICAgIH0pKTtcbiAgfVxuXG4gIGdldCBjdXN0b21Dc3NDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge1xuICAgICAga2V5OiBcImNzc2VkaXRvclwiXG4gICAgfSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge1xuICAgICAga2V5OiBcInRvb2xzXCJcbiAgICB9KSk7XG4gIH1cblxuICByZW5kZXJDb3JlU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvcmVDb21wb25lbnQsIHJvb3QpO1xuICB9XG5cbiAgcmVuZGVyTGlnaHRDb3JkU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmxpZ2h0Y29yZENvbXBvbmVudCwgcm9vdCk7XG4gIH1cblxuICByZW5kZXJQcmVzZW5jZVNldHRpbmdzKCkge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XG4gICAgaWYgKCFyb290KSByZXR1cm4gVXRpbHMuZXJyKFwiU2V0dGluZ3NQYW5lbFwiLCBcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogLmxheWVyLTNRclVlRyAuc3RhbmRhcmRTaWRlYmFyVmlldy0zRjFJN2lcIik7XG4gICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5QcmVzZW5jZUNvbXBvbmVudCwgcm9vdCk7XG4gIH1cblxuICByZW5kZXJBY2NvdW50SW5mb3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudCwgcm9vdCk7XG4gIH1cblxuICByZW5kZXJDdXN0b21Dc3NFZGl0b3IoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmN1c3RvbUNzc0NvbXBvbmVudCwgcm9vdCk7XG4gIH0gLy8gcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcbiAgLy8gICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XG4gIC8vICAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgLy8gICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29udGVudENvbXBvbmVudCh0eXBlKSwgcm9vdCk7XG4gIC8vIH1cblxuXG4gIHJlbmRlckFkZG9uUGFuZSh0eXBlKSB7XG4gICAgaWYgKCF0aGlzLnJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTsgLy8gSSBrbm93IHRoaXMgc2hvdWxkbid0IGJlIGhlcmUsIGJ1dCB3aGVuIGl0IGlzbid0LFxuICAgIC8vIFJlYWN0IHJlZnVzZXMgdG8gY2hhbmdlIHRoZSBidXR0b24gd2hlbiBnb2luZ1xuICAgIC8vIGJldHdlZW4gcGx1Z2lucyBhbmQgdGhlbWVzIHBhZ2UuLi4gc29tZXRoaW5nXG4gICAgLy8gdG8gZGVidWcgbGF0ZXIuXG5cbiAgICBjbGFzcyBDb250ZW50TGlzdCBleHRlbmRzIEJEVjIucmVhY3QuQ29tcG9uZW50IHtcbiAgICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBCREV2ZW50cy5vbihgJHt0aGlzLnByZWZpeH0tcmVsb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgICAgQkRFdmVudHMub24oYCR7dGhpcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgICBCREV2ZW50cy5vbihgJHt0aGlzLnByZWZpeH0tdW5sb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIEJERXZlbnRzLm9mZihgJHt0aGlzLnByZWZpeH0tcmVsb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgICAgQkRFdmVudHMub2ZmKGAke3RoaXMucHJlZml4fS1sb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgICAgQkRFdmVudHMub2ZmKGAke3RoaXMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDb250ZW50TGlzdC5wcm90b3R5cGUucmVuZGVyO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb250ZW50TGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxuICAgIH0pO1xuICAgIGNvbnN0IGxpc3QgPSB0eXBlID09PSBcInBsdWdpbnNcIiA/IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKSA6IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpO1xuICAgIHJldHVybiBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudExpc3QsIHtcbiAgICAgIHR5cGUsXG4gICAgICBvbkNoYW5nZTogdGhpcy5zaWRlQmFyT25DbGlja1xuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDYXJkTGlzdCwge1xuICAgICAgdHlwZSxcbiAgICAgIGxpc3RcbiAgICB9KSksIHRoaXMucm9vdCk7XG4gIH1cblxufSgpOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/settingsPanel.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _settingsPanelSidebar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsPanelSidebar */ \"./src/modules/settingsPanelSidebar.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _contentManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contentManager */ \"./src/modules/contentManager.js\");\n/* harmony import */ var _bdEvents__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./bdEvents */ \"./src/modules/bdEvents.js\");\n/* harmony import */ var _coloredText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./coloredText */ \"./src/modules/coloredText.js\");\n/* harmony import */ var _24hour__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./24hour */ \"./src/modules/24hour.js\");\n/* harmony import */ var _reactDevTools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactDevTools */ \"./src/modules/reactDevTools.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _publicServers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./publicServers */ \"./src/modules/publicServers.js\");\n/* harmony import */ var _voiceMode__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./voiceMode */ \"./src/modules/voiceMode.js\");\n/* harmony import */ var _classNormalizer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./classNormalizer */ \"./src/modules/classNormalizer.js\");\n/* harmony import */ var _devMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./devMode */ \"./src/modules/devMode.js\");\n/* harmony import */ var _ui_tools__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../ui/tools */ \"./src/ui/tools.js\");\n/* harmony import */ var _ui_scroller__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../ui/scroller */ \"./src/ui/scroller.js\");\n/* harmony import */ var _ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../ui/sectionedSettingsPanel */ \"./src/ui/sectionedSettingsPanel.js\");\n/* harmony import */ var _ui_settingsPanel__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../ui/settingsPanel */ \"./src/ui/settingsPanel.js\");\n/* harmony import */ var _ui_cssEditor__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../ui/cssEditor */ \"./src/ui/cssEditor.js\");\n/* harmony import */ var _ui_addonlist__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../ui/addonlist */ \"./src/ui/addonlist.jsx\");\n/* harmony import */ var _ui_presenceSettings__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../ui/presenceSettings */ \"./src/ui/presenceSettings.jsx\");\n/* harmony import */ var _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./CustomRichPresence */ \"./src/modules/CustomRichPresence.js\");\n/* harmony import */ var _ui_AccountInfos__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../ui/AccountInfos */ \"./src/ui/AccountInfos.jsx\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_24__);\n/* harmony import */ var _AntiAdDM__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./AntiAdDM */ \"./src/modules/AntiAdDM.js\");\n/* harmony import */ var _blurPrivate__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./blurPrivate */ \"./src/modules/blurPrivate.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class V2_SettingsPanel {\n constructor() {\n this.sideBarOnClick = this.sideBarOnClick.bind(this);\n this.onChange = this.onChange.bind(this);\n this.updateSettings = this.updateSettings.bind(this);\n this.sidebar = new _settingsPanelSidebar__WEBPACK_IMPORTED_MODULE_2__[\"default\"](this.sideBarOnClick); // this.buildPluginProps = this.buildPluginProps.bind(this);\n // this.buildThemeProps = this.buildThemeProps.bind(this);\n\n this.showOriginal = this.showOriginal.bind(this);\n }\n\n get root() {\n const _root = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#bd-settingspane-container\");\n\n if (!_root) {\n if (!this.injectRoot()) return null;\n return this.root;\n }\n\n return _root;\n }\n\n injectRoot() {\n let [classNameLayer, classSidebar] = [BDModules.get(e => e.layer && e.animating)[0].layer.split(\" \")[0], BDModules.get(e => e.standardSidebarView)[0]];\n const sidebar = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".\" + classNameLayer + \" .\" + classSidebar.standardSidebarView.split(\" \")[0] + \", .\" + classNameLayer + \" .ui-standard-sidebar-view\");\n if (!sidebar) return false;\n const root = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createElement(`
`);\n sidebar.append(root);\n _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].onRemoved(root, () => {\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.unmountComponentAtNode(root);\n });\n return true;\n }\n\n get coreSettings() {\n const settings = this.getSettings(\"core\");\n const categories = [...new Set(settings.map(s => s.category))];\n const sections = categories.map(c => {\n return {\n title: c,\n settings: settings.filter(s => s.category == c)\n };\n });\n return sections;\n }\n\n get lightcordSettings() {\n const settings = this.getSettings(\"lightcord\");\n const categories = [...new Set(settings.map(s => s.category))];\n const sections = categories.map(c => {\n return {\n title: c,\n settings: settings.filter(s => s.category == c)\n };\n });\n return sections;\n }\n\n get PresenceSettings() {\n return this.getSettings(\"status\");\n }\n\n get MsgLogSettings() {\n return this.getSettings(\"msglog\");\n }\n\n getSettings(category) {\n return Object.keys(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]).reduce((arr, key) => {\n const setting = _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settings\"][key];\n\n if (setting.cat === category && setting.implemented && !setting.hidden) {\n setting.text = key;\n arr.push(setting);\n }\n\n return arr;\n }, []);\n }\n\n sideBarOnClick(id) {\n const contentRegion = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".contentRegion-3nDuYy, .content-region\");\n contentRegion.style.display = \"none\";\n this.root.style.display = \"\";\n\n switch (id) {\n case \"core\":\n this.renderCoreSettings();\n break;\n\n case \"customcss\":\n this.renderCustomCssEditor();\n break;\n\n case \"plugins\":\n case \"themes\":\n this.renderAddonPane(id);\n break;\n\n case \"lightcord\":\n this.renderLightCordSettings();\n break;\n\n case \"status\":\n this.renderPresenceSettings();\n break;\n\n case \"accountinfo\":\n this.renderAccountInfos();\n break;\n }\n }\n\n onClick() {}\n\n onChange(id, checked) {\n this.updateSettings(id, checked);\n }\n\n updateSettings(id, enabled) {\n _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][id] = enabled;\n\n if (id == \"bda-gs-2\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(document.body, \"bd-minimal\");\n }\n\n if (id == \"bda-gs-3\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal-chan\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(document.body, \"bd-minimal-chan\");\n }\n\n if (id == \"bda-gs-1\") {\n if (enabled) _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].addButton();else _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].removeButton();\n }\n\n if (id == \"bda-gs-4\") {\n if (enabled) _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();else _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].stop();\n }\n\n if (id == \"bda-gs-5\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");\n }\n\n if (enabled && id == \"bda-gs-6\") _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"].inject24Hour();\n\n if (id == \"bda-gs-7\") {\n if (enabled) _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].injectColoredText();else _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].removeColoredText();\n }\n\n if (id == \"fork-ps-4\") {\n if (enabled) _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].start();else _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].stop();\n }\n\n if (id == \"fork-ps-5\") {\n if (enabled) {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"theme\");\n } else {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].unwatchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].unwatchContent(\"theme\");\n }\n }\n\n if (id == \"fork-wp-1\") {\n _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"transparent\", enabled);\n if (enabled) _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"backgroundColor\", null);else _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"backgroundColor\", \"#2f3136\");\n }\n\n if (id == \"bda-gs-8\") {\n if (enabled) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startDebugListener();else _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].stopDebugListener();\n }\n\n if (id == \"fork-dm-1\") {\n if (enabled) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startCopySelector();else _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].stopCopySelector();\n }\n\n if (id === \"reactDevTools\") {\n if (enabled) _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].start();else _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].stop();\n }\n\n if (id === \"lightcord-1\") {\n if (enabled) window.Lightcord.Settings.devMode = true;else window.Lightcord.Settings.devMode = false;\n }\n\n if (id === \"lightcord-2\") {\n if (enabled) window.Lightcord.Settings.callRingingBeat = true;else window.Lightcord.Settings.callRingingBeat = false;\n }\n\n if (id === \"lightcord-presence-1\") {\n if (enabled) {\n _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].enable();\n const settingsStore = BDModules.get(e => e.default && typeof e.default === \"object\" && \"showCurrentGame\" in e.default)[0];\n\n if (settingsStore && !settingsStore.default.showCurrentGame) {\n BDModules.get(e => e.default && e.default.updateRemoteSettings)[0].default.updateRemoteSettings({\n showCurrentGame: true\n });\n }\n } else _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].disable();\n }\n\n if (id === \"lightcord-3\") {\n if (enabled) electron__WEBPACK_IMPORTED_MODULE_24__[\"remote\"].getCurrentWindow().setAlwaysOnTop(true);else electron__WEBPACK_IMPORTED_MODULE_24__[\"remote\"].getCurrentWindow().setAlwaysOnTop(false);\n }\n\n if (id === \"lightcord-4\") {\n if (enabled) {\n _AntiAdDM__WEBPACK_IMPORTED_MODULE_25__[\"default\"].enable();\n } else {\n _AntiAdDM__WEBPACK_IMPORTED_MODULE_25__[\"default\"].disable();\n }\n }\n\n if (id === \"lightcord-6\") {\n if (enabled) {\n _blurPrivate__WEBPACK_IMPORTED_MODULE_26__[\"default\"].enable();\n } else {\n _blurPrivate__WEBPACK_IMPORTED_MODULE_26__[\"default\"].disable();\n }\n }\n\n this.saveSettings();\n }\n\n async initializeSettings() {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"].reactDevTools) _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-2\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-3\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal-chan\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-1\"]) _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].addButton();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-4\"]) _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-5\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-6\"]) _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"].inject24Hour();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-7\"]) _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].injectColoredText();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-4\"]) _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-1\"]) window.Lightcord.Settings.devMode = true;\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-2\"]) window.Lightcord.Settings.callRingingBeat = true;\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-presence-1\"]) _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].enable();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-3\"]) electron__WEBPACK_IMPORTED_MODULE_24__[\"remote\"].getCurrentWindow().setAlwaysOnTop(true);\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-4\"]) _AntiAdDM__WEBPACK_IMPORTED_MODULE_25__[\"default\"].enable();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-6\"]) _blurPrivate__WEBPACK_IMPORTED_MODULE_26__[\"default\"].enable();\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-5\"]) {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"theme\");\n }\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-8\"]) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startDebugListener();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-dm-1\"]) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startCopySelector();\n this.saveSettings();\n }\n\n saveSettings() {\n _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingGroup(\"settings\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"]);\n _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingGroup(\"rpc\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"]);\n }\n\n loadSettings() {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"], _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSettingGroup(\"settings\"));\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"], _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSettingGroup(\"rpc\"));\n }\n\n showOriginal() {\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.unmountComponentAtNode(this.root);\n this.root.style.display = \"none\";\n _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".\" + BDModules.get(e => e.contentRegion)[0].contentRegion.split(\" \")[0] + \", .content-region\").style.display = \"\";\n }\n\n renderSidebar() {\n const tabs = document.querySelectorAll(\"[class*='side-'] > [class*='item-']\");\n\n for (const element of tabs) {\n element.removeEventListener(\"click\", this.showOriginal);\n element.addEventListener(\"click\", this.showOriginal);\n }\n\n this.sidebar.render();\n }\n\n get coreComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"cspanel\",\n onChange: this.onChange,\n sections: this.coreSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get lightcordComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"lspannel\",\n onChange: this.onChange,\n sections: this.lightcordSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get PresenceComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_presenceSettings__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: \"lppannel\",\n onChange: this.onChange,\n settings: this.PresenceSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get AccountInfosComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_AccountInfos__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: \"lapannel\"\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get customCssComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_cssEditor__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n key: \"csseditor\"\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n renderCoreSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.coreComponent, root);\n }\n\n renderLightordSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.lightcordComponent, root);\n }\n\n renderPresenceSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.PresenceComponent, root);\n }\n\n renderAccountInfos() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.AccountInfosComponent, root);\n }\n\n renderCustomCssEditor() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.customCssComponent, root);\n } // renderAddonPane(type) {\n // const root = this.root;\n // if (!root) return Utils.err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n // BDV2.reactDom.render(this.contentComponent(type), root);\n // }\n\n\n renderAddonPane(type) {\n if (!this.root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\"); // I know this shouldn't be here, but when it isn't,\n // React refuses to change the button when going\n // between plugins and themes page... something\n // to debug later.\n\n class ContentList extends _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.Component {\n constructor(props) {\n super(props);\n this.prefix = this.props.type.replace(\"s\", \"\");\n this.onChange = this.onChange.bind(this);\n }\n\n componentDidMount() {\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-reloaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-loaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-unloaded`, this.onChange);\n }\n\n componentWillUnmount() {\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-reloaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-loaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-unloaded`, this.onChange);\n }\n\n onChange() {\n this.props.onChange(this.props.type);\n }\n\n render() {\n return this.props.children;\n }\n\n }\n\n const originalRender = ContentList.prototype.render;\n Object.defineProperty(ContentList.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function () {\n console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");\n },\n get: () => originalRender\n });\n const list = type === \"plugins\" ? Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdplugins\"]) : Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdthemes\"]);\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(ContentList, {\n type,\n onChange: this.sideBarOnClick\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_addonlist__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n type,\n list\n })), this.root);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9zZXR0aW5nc1BhbmVsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanM/NTdiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXR0aW5ncywgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsU2lkZWJhclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xuaW1wb3J0IHRmSG91ciBmcm9tIFwiLi8yNGhvdXJcIjtcbmltcG9ydCByZWFjdERldlRvb2xzIGZyb20gXCIuL3JlYWN0RGV2VG9vbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcbmltcG9ydCB2b2ljZU1vZGUgZnJvbSBcIi4vdm9pY2VNb2RlXCI7XG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL2NsYXNzTm9ybWFsaXplclwiO1xuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vdWkvdG9vbHNcIjtcbmltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi4vdWkvc2Nyb2xsZXJcIjtcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IENzc0VkaXRvciBmcm9tIFwiLi4vdWkvY3NzRWRpdG9yXCI7XG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgQW50aUFkRE0gZnJvbSBcIi4vQW50aUFkRE1cIjtcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1NldHRpbmdzUGFuZWwge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNpZGVCYXJPbkNsaWNrID0gdGhpcy5zaWRlQmFyT25DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNpZGViYXIgPSBuZXcgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyKHRoaXMuc2lkZUJhck9uQ2xpY2spOyAvLyB0aGlzLmJ1aWxkUGx1Z2luUHJvcHMgPSB0aGlzLmJ1aWxkUGx1Z2luUHJvcHMuYmluZCh0aGlzKTtcbiAgICAvLyB0aGlzLmJ1aWxkVGhlbWVQcm9wcyA9IHRoaXMuYnVpbGRUaGVtZVByb3BzLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNob3dPcmlnaW5hbCA9IHRoaXMuc2hvd09yaWdpbmFsLmJpbmQodGhpcyk7XG4gIH1cblxuICBnZXQgcm9vdCgpIHtcbiAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIpO1xuXG4gICAgaWYgKCFfcm9vdCkge1xuICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cblxuICAgIHJldHVybiBfcm9vdDtcbiAgfVxuXG4gIGluamVjdFJvb3QoKSB7XG4gICAgbGV0IFtjbGFzc05hbWVMYXllciwgY2xhc3NTaWRlYmFyXSA9IFtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIuc3BsaXQoXCIgXCIpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXV07XG4gICAgY29uc3Qgc2lkZWJhciA9IERPTS5xdWVyeShcIi5cIiArIGNsYXNzTmFtZUxheWVyICsgXCIgLlwiICsgY2xhc3NTaWRlYmFyLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdICsgXCIsIC5cIiArIGNsYXNzTmFtZUxheWVyICsgXCIgLnVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wiKTtcbiAgICBpZiAoIXNpZGViYXIpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCByb290ID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIgY2xhc3M9XCIke2NsYXNzU2lkZWJhci5jb250ZW50UmVnaW9ufSBjb250ZW50LXJlZ2lvblwiPmApO1xuICAgIHNpZGViYXIuYXBwZW5kKHJvb3QpO1xuICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XG4gICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgY29yZVNldHRpbmdzKCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjLFxuICAgICAgICBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VjdGlvbnM7XG4gIH1cblxuICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogYyxcbiAgICAgICAgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYylcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlY3Rpb25zO1xuICB9XG5cbiAgZ2V0IFByZXNlbmNlU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJzdGF0dXNcIik7XG4gIH1cblxuICBnZXQgTXNnTG9nU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJtc2dsb2dcIik7XG4gIH1cblxuICBnZXRTZXR0aW5ncyhjYXRlZ29yeSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XG5cbiAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcbiAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBzaWRlQmFyT25DbGljayhpZCkge1xuICAgIGNvbnN0IGNvbnRlbnRSZWdpb24gPSBET00ucXVlcnkoXCIuY29udGVudFJlZ2lvbi0zbkR1WXksIC5jb250ZW50LXJlZ2lvblwiKTtcbiAgICBjb250ZW50UmVnaW9uLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cbiAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICBjYXNlIFwiY29yZVwiOlxuICAgICAgICB0aGlzLnJlbmRlckNvcmVTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImN1c3RvbWNzc1wiOlxuICAgICAgICB0aGlzLnJlbmRlckN1c3RvbUNzc0VkaXRvcigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInBsdWdpbnNcIjpcbiAgICAgIGNhc2UgXCJ0aGVtZXNcIjpcbiAgICAgICAgdGhpcy5yZW5kZXJBZGRvblBhbmUoaWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImxpZ2h0Y29yZFwiOlxuICAgICAgICB0aGlzLnJlbmRlckxpZ2h0Q29yZFNldHRpbmdzKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwic3RhdHVzXCI6XG4gICAgICAgIHRoaXMucmVuZGVyUHJlc2VuY2VTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImFjY291bnRpbmZvXCI6XG4gICAgICAgIHRoaXMucmVuZGVyQWNjb3VudEluZm9zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2soKSB7fVxuXG4gIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5ncyhpZCwgZW5hYmxlZCkge1xuICAgIHNldHRpbmdzQ29va2llW2lkXSA9IGVuYWJsZWQ7XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYmRhLWdzLTNcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMVwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtlbHNlIHB1YmxpY1NlcnZlcnNNb2R1bGUucmVtb3ZlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO2Vsc2Ugdm9pY2VNb2RlLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNVwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7ZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZCAmJiBpZCA9PSBcImJkYS1ncy02XCIpIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcblxuICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO2Vsc2UgY29sb3JlZFRleHQucmVtb3ZlQ29sb3JlZFRleHQoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTRcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIENsYXNzTm9ybWFsaXplci5zdGFydCgpO2Vsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTVcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInRoZW1lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XG4gICAgICBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XG4gICAgICBpZiAoZW5hYmxlZCkgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBudWxsKTtlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PSBcImJkYS1ncy04XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiZm9yay1kbS0xXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO2Vsc2UgZE1vZGUuc3RvcENvcHlTZWxlY3RvcigpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PT0gXCJyZWFjdERldlRvb2xzXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7ZWxzZSByZWFjdERldlRvb2xzLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTFcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWU7ZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTJcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZTtlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3NTdG9yZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgdHlwZW9mIGUuZGVmYXVsdCA9PT0gXCJvYmplY3RcIiAmJiBcInNob3dDdXJyZW50R2FtZVwiIGluIGUuZGVmYXVsdClbMF07XG5cbiAgICAgICAgaWYgKHNldHRpbmdzU3RvcmUgJiYgIXNldHRpbmdzU3RvcmUuZGVmYXVsdC5zaG93Q3VycmVudEdhbWUpIHtcbiAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncylbMF0uZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncyh7XG4gICAgICAgICAgICBzaG93Q3VycmVudEdhbWU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIEN1c3RvbVJpY2hQcmVzZW5jZS5kaXNhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0zXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpO2Vsc2UgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcChmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC00XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIEFudGlBZERNLmVuYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNlwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBibHVyUHJpdmF0ZS5lbmFibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJsdXJQcml2YXRlLmRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVNldHRpbmdzKCkge1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZS5yZWFjdERldlRvb2xzKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTNcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTVcIl0pIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy00XCJdKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMVwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMlwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCJdKSBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTNcIl0pIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKTtcblxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkge1xuICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLThcIl0pIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICB9XG5cbiAgc2F2ZVNldHRpbmdzKCkge1xuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XG4gIH1cblxuICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKTtcbiAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKTtcbiAgfVxuXG4gIHNob3dPcmlnaW5hbCgpIHtcbiAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yb290KTtcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIERPTS5xdWVyeShcIi5cIiArIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRSZWdpb24pWzBdLmNvbnRlbnRSZWdpb24uc3BsaXQoXCIgXCIpWzBdICsgXCIsIC5jb250ZW50LXJlZ2lvblwiKS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgfVxuXG4gIHJlbmRlclNpZGViYXIoKSB7XG4gICAgY29uc3QgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbY2xhc3MqPSdzaWRlLSddID4gW2NsYXNzKj0naXRlbS0nXVwiKTtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0YWJzKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaWRlYmFyLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IGNvcmVDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtcbiAgICAgIGtleTogXCJjc3BhbmVsXCIsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIHNlY3Rpb25zOiB0aGlzLmNvcmVTZXR0aW5nc1xuICAgIH0pLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtcbiAgICAgIGtleTogXCJ0b29sc1wiXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IGxpZ2h0Y29yZENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7XG4gICAgICBjb250ZW50Q29sdW1uOiB0cnVlLFxuICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgIGRhcms6IHRydWVcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCwge1xuICAgICAga2V5OiBcImxzcGFubmVsXCIsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIHNlY3Rpb25zOiB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzXG4gICAgfSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge1xuICAgICAga2V5OiBcInRvb2xzXCJcbiAgICB9KSk7XG4gIH1cblxuICBnZXQgUHJlc2VuY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XG4gICAgICBrZXk6IFwibHBwYW5uZWxcIixcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuUHJlc2VuY2VTZXR0aW5nc1xuICAgIH0pLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtcbiAgICAgIGtleTogXCJ0b29sc1wiXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IEFjY291bnRJbmZvc0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7XG4gICAgICBjb250ZW50Q29sdW1uOiB0cnVlLFxuICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgIGRhcms6IHRydWVcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xuICAgICAga2V5OiBcImxhcGFubmVsXCJcbiAgICB9KSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7XG4gICAgICBrZXk6IFwidG9vbHNcIlxuICAgIH0pKTtcbiAgfVxuXG4gIGdldCBjdXN0b21Dc3NDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge1xuICAgICAga2V5OiBcImNzc2VkaXRvclwiXG4gICAgfSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge1xuICAgICAga2V5OiBcInRvb2xzXCJcbiAgICB9KSk7XG4gIH1cblxuICByZW5kZXJDb3JlU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvcmVDb21wb25lbnQsIHJvb3QpO1xuICB9XG5cbiAgcmVuZGVyTGlnaHRvcmRTZXR0aW5ncygpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMubGlnaHRjb3JkQ29tcG9uZW50LCByb290KTtcbiAgfVxuXG4gIHJlbmRlclByZXNlbmNlU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLlByZXNlbmNlQ29tcG9uZW50LCByb290KTtcbiAgfVxuXG4gIHJlbmRlckFjY291bnRJbmZvcygpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuQWNjb3VudEluZm9zQ29tcG9uZW50LCByb290KTtcbiAgfVxuXG4gIHJlbmRlckN1c3RvbUNzc0VkaXRvcigpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY3VzdG9tQ3NzQ29tcG9uZW50LCByb290KTtcbiAgfSAvLyByZW5kZXJBZGRvblBhbmUodHlwZSkge1xuICAvLyAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgLy8gICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xuICAvLyAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb250ZW50Q29tcG9uZW50KHR5cGUpLCByb290KTtcbiAgLy8gfVxuXG5cbiAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcbiAgICBpZiAoIXRoaXMucm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpOyAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXG4gICAgLy8gUmVhY3QgcmVmdXNlcyB0byBjaGFuZ2UgdGhlIGJ1dHRvbiB3aGVuIGdvaW5nXG4gICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcbiAgICAvLyB0byBkZWJ1ZyBsYXRlci5cblxuICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xuICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHRoaXMucHJvcHMudHlwZS5yZXBsYWNlKFwic1wiLCBcIlwiKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIEJERXZlbnRzLm9uKGAke3RoaXMucHJlZml4fS1yZWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgICBCREV2ZW50cy5vbihgJHt0aGlzLnByZWZpeH0tbG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XG4gICAgICAgIEJERXZlbnRzLm9uKGAke3RoaXMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgQkRFdmVudHMub2ZmKGAke3RoaXMucHJlZml4fS1yZWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgICBCREV2ZW50cy5vZmYoYCR7dGhpcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgICBCREV2ZW50cy5vZmYoYCR7dGhpcy5wcmVmaXh9LXVubG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIG9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFJlbmRlciA9IENvbnRlbnRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnRlbnRMaXN0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXG4gICAgfSk7XG4gICAgY29uc3QgbGlzdCA9IHR5cGUgPT09IFwicGx1Z2luc1wiID8gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpIDogT2JqZWN0LnZhbHVlcyhiZHRoZW1lcyk7XG4gICAgcmV0dXJuIEJEVjIucmVhY3REb20ucmVuZGVyKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwge1xuICAgICAgdHlwZSxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLnNpZGVCYXJPbkNsaWNrXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7XG4gICAgICB0eXBlLFxuICAgICAgbGlzdFxuICAgIH0pKSwgdGhpcy5yb290KTtcbiAgfVxuXG59KCk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/settingsPanel.js\n"); /***/ }), @@ -407,7 +407,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0gl /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Utils; });\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _webpackModules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackModules */ \"./src/modules/webpackModules.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n\n\n\n\nclass Utils {\n /** Document/window width */\n static get screenWidth() {\n return Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n /** Document/window height */\n\n\n static get screenHeight() {\n return Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n }\n\n static get WindowConfigFile() {\n return this._windowConfigFile = null;\n }\n\n static getAllWindowPreferences() {\n return {\n transparent: true,\n frame: false\n };\n }\n\n static getWindowPreference(key) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n\n static setWindowPreference(key, value) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n\n static stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n\n return content;\n }\n\n static getTextArea() {\n return _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].query(\".\" + BDModules.get(e => e.channelTextArea && e.titleWrapper)[0].channelTextArea.split(\" \")[0] + \" textarea\");\n }\n\n static insertText(textarea, text) {\n textarea.focus();\n textarea.selectionStart = 0;\n textarea.selectionEnd = textarea.value.length;\n document.execCommand(\"insertText\", false, text);\n }\n\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n\n static log(moduleName, message) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #3a71c1; font-weight: 700;\", \"color: #3a71c1;\", \"\");\n }\n\n static warn(moduleName, message) {\n console.warn(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #E8A400; font-weight: 700;\", \"color: #E8A400;\", \"\");\n }\n\n static err(moduleName, message, error) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: red; font-weight: 700;\", \"color: red;\", \"\");\n\n if (error) {\n console.groupCollapsed(\"%cError: \" + error.message, \"color: red;\");\n console.error(error.stack);\n console.groupEnd();\n }\n }\n\n static escape(s) {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n }\n\n static testJSON(data) {\n try {\n return JSON.parse(data);\n } catch (err) {\n return false;\n }\n }\n\n static isEmpty(obj) {\n if (obj == null || obj == undefined || obj == \"\") return true;\n if (typeof obj !== \"object\") return false;\n if (Array.isArray(obj)) return obj.length == 0;\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) return false;\n }\n\n return true;\n }\n\n static suppressErrors(method, message) {\n return (...params) => {\n try {\n return method(...params);\n } catch (e) {\n this.err(\"SuppressedError\", \"Error occurred in \" + message, e);\n }\n };\n }\n\n static monkeyPatch(what, methodName, options) {\n const {\n before,\n after,\n instead,\n once = false,\n silent = false,\n force = false\n } = options;\n const displayName = options.displayName || what.displayName || what[methodName].displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n if (!what[methodName]) {\n if (force) what[methodName] = function () {};else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n\n const origMethod = what[methodName];\n\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n what[methodName] = origMethod;\n };\n\n what[methodName] = function () {\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n\n if (instead) {\n const tempRet = Utils.suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n } else {\n if (before) Utils.suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) Utils.suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n\n if (once) cancel();\n return data.returnValue;\n };\n\n Object.assign(what[methodName], origMethod);\n what[methodName].__monkeyPatched = true;\n what[methodName].displayName = displayName;\n\n if (!what[methodName].__originalMethod) {\n what[methodName].__originalMethod = origMethod;\n\n what[methodName].toString = function () {\n return origMethod.toString();\n };\n }\n\n return cancel;\n }\n\n static onRemoved(node, callback) {\n const observer = new MutationObserver(mutations => {\n for (let m = 0; m < mutations.length; m++) {\n const mutation = mutations[m];\n const nodes = Array.from(mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n\n if (directMatch || parentMatch) {\n observer.disconnect();\n callback();\n }\n }\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true\n });\n }\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function (obj, prop) {\n return obj && obj[prop];\n }, obj);\n }\n /**\r\n * This shows a toast similar to android towards the bottom of the screen.\r\n *\r\n * @param {string} content The string to show in the toast.\r\n * @param {object} options Options object. Optional parameter.\r\n * @param {string} options.type Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\r\n * @param {boolean} options.icon Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\r\n * @param {number} options.timeout Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\r\n */\n\n\n static showToast(content, options = {}) {\n if (!document.querySelector(\".bd-toasts\")) {\n const container = document.querySelector(\".\" + BDModules.get(e => e.sidebar && e.hasNotice)[0].sidebar.split(\" \")[9] + \" + div\") || null;\n const memberlist = container ? container.querySelector(\".\" + BDModules.get(e => e.membersWrap)[0].membersWrap) : null;\n const form = container ? container.querySelector(\"form\") : null;\n const left = container ? container.getBoundingClientRect().left : 310;\n const right = memberlist ? memberlist.getBoundingClientRect().left : 0;\n const width = right ? right - container.getBoundingClientRect().left : Utils.screenWidth - left - 240;\n const bottom = form ? form.offsetHeight : 80;\n const toastWrapper = document.createElement(\"div\");\n toastWrapper.classList.add(\"bd-toasts\");\n toastWrapper.style.setProperty(\"left\", left + \"px\");\n toastWrapper.style.setProperty(\"width\", width + \"px\");\n toastWrapper.style.setProperty(\"bottom\", bottom + \"px\");\n document.querySelector(\"#app-mount\").appendChild(toastWrapper);\n }\n\n const {\n type = \"\",\n icon = true,\n timeout = 3000\n } = options;\n const toastElem = document.createElement(\"div\");\n toastElem.classList.add(\"bd-toast\");\n if (type) toastElem.classList.add(\"toast-\" + type);\n if (type && icon) toastElem.classList.add(\"icon\");\n toastElem.innerText = content;\n document.querySelector(\".bd-toasts\").appendChild(toastElem);\n setTimeout(() => {\n toastElem.classList.add(\"closing\");\n setTimeout(() => {\n toastElem.remove();\n if (!document.querySelectorAll(\".bd-toasts .bd-toast\").length) document.querySelector(\".bd-toasts\").remove();\n }, 300);\n }, timeout);\n }\n\n static alert(title, content) {\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0];\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0];\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0];\n const modal = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
\n
${title}
\n
\n
\n
\n
\n ${content}\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n closingListeners.forEach(listener => {\n try {\n listener();\n } catch (e) {\n console.error(e);\n }\n });\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n closingListeners.forEach(listener => {\n try {\n listener();\n } catch (e) {\n console.error(e);\n }\n });\n }, 300);\n });\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].query(\"#app-mount\").append(modal);\n const closingListeners = [];\n return {\n close: () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n closingListeners.forEach(listener => {\n try {\n listener();\n } catch (e) {\n console.error(e);\n }\n });\n }, 300);\n },\n onClose: listener => {\n closingListeners.push(listener);\n }\n };\n }\n\n static showContentErrors({\n plugins: pluginErrors = [],\n themes: themeErrors = []\n }) {\n if (!pluginErrors || !themeErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0];\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0];\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0];\n const modal = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
`);\n\n function generateTab(errors) {\n const container = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
`);\n\n for (const err of errors) {\n const error = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
\n
${err.name ? err.name : err.file}
\n
${err.message}
\n \n
`);\n container.append(error);\n\n if (err.error) {\n error.querySelectorAll(\"a\").forEach(el => el.addEventListener(\"click\", e => {\n e.preventDefault();\n Utils.err(\"ContentManager\", `Error details for ${err.name ? err.name : err.file}.`, err.error);\n }));\n }\n }\n\n return container;\n }\n\n const tabs = [generateTab(pluginErrors), generateTab(themeErrors)];\n modal.querySelectorAll(\".tab-bar-item\").forEach(el => el.addEventListener(\"click\", e => {\n e.preventDefault();\n const selected = modal.querySelector(\".tab-bar-item.selected\");\n if (selected) _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].removeClass(selected, \"selected\");\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(e.target, \"selected\");\n const scroller = modal.querySelector(\".scroller\");\n scroller.innerHTML = \"\";\n scroller.append(tabs[_domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].index(e.target)]);\n }));\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].query(\"#app-mount\").append(modal);\n if (pluginErrors.length) modal.querySelector(\".tab-bar-item\").click();else modal.querySelectorAll(\".tab-bar-item\")[1].click();\n }\n\n static showChangelogModal(options = {}) {\n const ModalStack = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const ChangelogClasses = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"fixed\", \"improved\");\n const TextElement = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByDisplayName(\"Text\");\n const FlexChild = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"Child\");\n const Titles = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"Tags\", \"default\");\n const Changelog = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].find(m => m.defaultProps && m.defaultProps.selectable == false);\n const MarkdownParser = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"defaultRules\", \"parse\");\n if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return;\n const {\n image = \"https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5\",\n description = \"\",\n changes = [],\n title = \"BandagedBD\",\n subtitle = `v${_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"]}`,\n footer\n } = options;\n const ce = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement;\n const changelogItems = [ce(\"img\", {\n src: image\n })];\n if (description) changelogItems.push(ce(\"p\", null, MarkdownParser.parse(description)));\n\n for (let c = 0; c < changes.length; c++) {\n const entry = changes[c];\n const type = ChangelogClasses[entry.type] ? ChangelogClasses[entry.type] : ChangelogClasses.added;\n const margin = c == 0 ? ChangelogClasses.marginTop : \"\";\n changelogItems.push(ce(\"h1\", {\n className: `${type} ${margin}`\n }, entry.title));\n const list = ce(\"ul\", null, entry.items.map(i => ce(\"li\", null, MarkdownParser.parse(i))));\n changelogItems.push(list);\n }\n\n const renderHeader = function () {\n return ce(FlexChild.Child, {\n grow: 1,\n shrink: 1\n }, ce(Titles.default, {\n tag: Titles.Tags.H4\n }, title), ce(TextElement, {\n size: TextElement.Sizes.SMALL,\n color: TextElement.Colors.STANDARD,\n className: ChangelogClasses.date\n }, subtitle));\n };\n\n const renderFooter = () => {\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].find(m => m.displayName == \"Anchor\");\n const AnchorClasses = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"anchorUnderlineOnHover\") || {\n anchor: \"anchor-3Z-8Bb\",\n anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"\n };\n\n const joinSupportServer = click => {\n click.preventDefault();\n click.stopPropagation();\n ModalStack.pop();\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].joinBD2();\n };\n\n const supportLink = Anchor ? ce(Anchor, {\n onClick: joinSupportServer\n }, \"Join our Discord Server.\") : ce(\"a\", {\n className: `${AnchorClasses.anchor} ${AnchorClasses.anchorUnderlineOnHover}`,\n onClick: joinSupportServer\n }, \"Join our Discord Server.\");\n const defaultFooter = ce(TextElement, {\n size: TextElement.Sizes.SMALL,\n color: TextElement.Colors.STANDARD\n }, \"Need support? \", supportLink);\n return ce(FlexChild.Child, {\n grow: 1,\n shrink: 1\n }, footer ? footer : defaultFooter);\n };\n\n return ModalStack.push(function (props) {\n return ce(Changelog, Object.assign({\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n }, props));\n });\n }\n /**\r\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\r\n * @param {string} title - title of the modal\r\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Every string is wrapped in Discord's `Markdown` component so strings will show and render properly.\r\n * @param {object} [options] - options to modify the modal\r\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\r\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\r\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\r\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\r\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\r\n * @param {string} [options.key] - key used to identify the modal. If not provided, one is generated and returned\r\n * @returns {string} - the key used for this modal\r\n */\n\n\n static showConfirmationModal(title, content, options = {}) {\n const ModalStack = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const Markdown = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByDisplayName(\"Markdown\");\n const ConfirmationModal = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].find(m => m.defaultProps && m.key && m.key() == \"confirm-modal\");\n if (!ModalStack || !ConfirmationModal || !Markdown) return Utils.alert(title, content);\n\n const emptyFunction = () => {};\n\n const {\n onConfirm = emptyFunction,\n onCancel = emptyFunction,\n confirmText = \"Okay\",\n cancelText = \"Cancel\",\n danger = false,\n key = undefined\n } = options;\n if (!Array.isArray(content)) content = [content];\n content = content.map(c => typeof c === \"string\" ? _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Markdown, null, c) : c);\n return ModalStack.push(ConfirmationModal, {\n header: title,\n children: content,\n red: danger,\n confirmText: confirmText,\n cancelText: cancelText,\n onConfirm: onConfirm,\n onCancel: onCancel\n }, key);\n }\n\n}\nUtils.showToast = Utils.suppressErrors(Utils.showToast, \"Could not show toast.\");\nwindow.Lightcord.BetterDiscord.Utils = Utils;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy91dGlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy91dGlscy5qcz9jMGY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlscyB7XG4gIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cbiAgc3RhdGljIGdldCBzY3JlZW5XaWR0aCgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgfVxuICAvKiogRG9jdW1lbnQvd2luZG93IGhlaWdodCAqL1xuXG5cbiAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgZnJhbWU6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xuICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZXh0QXJlYSgpIHtcbiAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiICsgQkRNb2R1bGVzLmdldChlID0+IGUuY2hhbm5lbFRleHRBcmVhICYmIGUudGl0bGVXcmFwcGVyKVswXS5jaGFubmVsVGV4dEFyZWEuc3BsaXQoXCIgXCIpWzBdICsgXCIgdGV4dGFyZWFcIik7XG4gIH1cblxuICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xuICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgdGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgPSAwO1xuICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydFRleHRcIiwgZmFsc2UsIHRleHQpO1xuICB9XG5cbiAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XG4gICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gIH1cblxuICBzdGF0aWMgbG9nKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogIzNhNzFjMTsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogIzNhNzFjMTtcIiwgXCJcIik7XG4gIH1cblxuICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgY29uc29sZS53YXJuKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjRThBNDAwOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjRThBNDAwO1wiLCBcIlwiKTtcbiAgfVxuXG4gIHN0YXRpYyBlcnIobW9kdWxlTmFtZSwgbWVzc2FnZSwgZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiJWNFcnJvcjogXCIgKyBlcnJvci5tZXNzYWdlLCBcImNvbG9yOiByZWQ7XCIpO1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvci5zdGFjayk7XG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGVzY2FwZShzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG4gIH1cblxuICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbXB0eShvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgb2JqID09IHVuZGVmaW5lZCB8fCBvYmogPT0gXCJcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBzdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmVycihcIlN1cHByZXNzZWRFcnJvclwiLCBcIkVycm9yIG9jY3VycmVkIGluIFwiICsgbWVzc2FnZSwgZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgYmVmb3JlLFxuICAgICAgYWZ0ZXIsXG4gICAgICBpbnN0ZWFkLFxuICAgICAgb25jZSA9IGZhbHNlLFxuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgICBmb3JjZSA9IGZhbHNlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuXG4gICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XG4gICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7fTtlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ01ldGhvZCA9IHdoYXRbbWV0aG9kTmFtZV07XG5cbiAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XG4gICAgfTtcblxuICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0aGlzT2JqZWN0OiB0aGlzLFxuICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcbiAgICAgICAgY2FuY2VsUGF0Y2g6IGNhbmNlbCxcbiAgICAgICAgb3JpZ2luYWxNZXRob2Q6IG9yaWdNZXRob2QsXG4gICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcbiAgICAgIH07XG5cbiAgICAgIGlmIChpbnN0ZWFkKSB7XG4gICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICBpZiAodGVtcFJldCAhPT0gdW5kZWZpbmVkKSBkYXRhLnJldHVyblZhbHVlID0gdGVtcFJldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChiZWZvcmUpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xuICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uY2UpIGNhbmNlbCgpO1xuICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XG4gICAgfTtcblxuICAgIE9iamVjdC5hc3NpZ24od2hhdFttZXRob2ROYW1lXSwgb3JpZ01ldGhvZCk7XG4gICAgd2hhdFttZXRob2ROYW1lXS5fX21vbmtleVBhdGNoZWQgPSB0cnVlO1xuICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcblxuICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB7XG4gICAgICB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xuXG4gICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC50b1N0cmluZygpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FuY2VsO1xuICB9XG5cbiAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcbiAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW21dO1xuICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcblxuICAgICAgICBpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcbiAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge1xuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldE5lc3RlZFByb3Aob2JqLCBwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uIChvYmosIHByb3ApIHtcbiAgICAgIHJldHVybiBvYmogJiYgb2JqW3Byb3BdO1xuICAgIH0sIG9iaik7XG4gIH1cbiAgLyoqXHJcbiAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXHJcbiAgICovXG5cblxuICBzdGF0aWMgc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIgKyBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyLnNwbGl0KFwiIFwiKVs5XSArIFwiICsgZGl2XCIpIHx8IG51bGw7XG4gICAgICBjb25zdCBtZW1iZXJsaXN0ID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuXCIgKyBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZW1iZXJzV3JhcClbMF0ubWVtYmVyc1dyYXApIDogbnVsbDtcbiAgICAgIGNvbnN0IGZvcm0gPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImZvcm1cIikgOiBudWxsO1xuICAgICAgY29uc3QgbGVmdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMzEwO1xuICAgICAgY29uc3QgcmlnaHQgPSBtZW1iZXJsaXN0ID8gbWVtYmVybGlzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMDtcbiAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgPyByaWdodCAtIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogVXRpbHMuc2NyZWVuV2lkdGggLSBsZWZ0IC0gMjQwO1xuICAgICAgY29uc3QgYm90dG9tID0gZm9ybSA/IGZvcm0ub2Zmc2V0SGVpZ2h0IDogODA7XG4gICAgICBjb25zdCB0b2FzdFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdG9hc3RXcmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdHNcIik7XG4gICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIGxlZnQgKyBcInB4XCIpO1xuICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwid2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xuICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwiYm90dG9tXCIsIGJvdHRvbSArIFwicHhcIik7XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmRDaGlsZCh0b2FzdFdyYXBwZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHR5cGUgPSBcIlwiLFxuICAgICAgaWNvbiA9IHRydWUsXG4gICAgICB0aW1lb3V0ID0gMzAwMFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHRvYXN0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcbiAgICBpZiAodHlwZSkgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJ0b2FzdC1cIiArIHR5cGUpO1xuICAgIGlmICh0eXBlICYmIGljb24pIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiaWNvblwiKTtcbiAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5hcHBlbmRDaGlsZCh0b2FzdEVsZW0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJjbG9zaW5nXCIpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJkLXRvYXN0cyAuYmQtdG9hc3RcIikubGVuZ3RoKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5yZW1vdmUoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSwgdGltZW91dCk7XG4gIH1cblxuICBzdGF0aWMgYWxlcnQodGl0bGUsIGNvbnRlbnQpIHtcbiAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdO1xuICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXTtcbiAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF07XG4gICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBtb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCAzMDApO1xuICAgIH0pO1xuICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSk7XG4gICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xuICAgIGNvbnN0IGNsb3NpbmdMaXN0ZW5lcnMgPSBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAzMDApO1xuICAgICAgfSxcbiAgICAgIG9uQ2xvc2U6IGxpc3RlbmVyID0+IHtcbiAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHNob3dDb250ZW50RXJyb3JzKHtcbiAgICBwbHVnaW5zOiBwbHVnaW5FcnJvcnMgPSBbXSxcbiAgICB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW11cbiAgfSkge1xuICAgIGlmICghcGx1Z2luRXJyb3JzIHx8ICF0aGVtZUVycm9ycykgcmV0dXJuO1xuICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XG4gICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXTtcbiAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF07XG4gICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdO1xuICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsIGJkLWNvbnRlbnQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+PGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGVudCBFcnJvcnM8L2Rpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyIFRPUFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+UGx1Z2luczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+VGhlbWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+TmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj5NZXNzYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj5FcnJvcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcblxuICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kKGVycm9yKTtcblxuICAgICAgICBpZiAoZXJyLmVycm9yKSB7XG4gICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xuICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcbiAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xuICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xuICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcbiAgICB9KSk7XG4gICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBtb2RhbC5yZW1vdmUoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSk7XG4gICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbW9kYWwucmVtb3ZlKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH0pO1xuICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW1cIikuY2xpY2soKTtlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XG4gIH1cblxuICBzdGF0aWMgc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xuICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XG4gICAgY29uc3QgVGV4dEVsZW1lbnQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRleHRcIik7XG4gICAgY29uc3QgRmxleENoaWxkID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJDaGlsZFwiKTtcbiAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xuICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5zZWxlY3RhYmxlID09IGZhbHNlKTtcbiAgICBjb25zdCBNYXJrZG93blBhcnNlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZGVmYXVsdFJ1bGVzXCIsIFwicGFyc2VcIik7XG4gICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICBpbWFnZSA9IFwiaHR0cHM6Ly9yZXBvc2l0b3J5LWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTA1NDczNTM3Lzk1N2I1NDgwLTdjMjYtMTFlOS04NDAxLTUwZmE4MjBjYmFlNVwiLFxuICAgICAgZGVzY3JpcHRpb24gPSBcIlwiLFxuICAgICAgY2hhbmdlcyA9IFtdLFxuICAgICAgdGl0bGUgPSBcIkJhbmRhZ2VkQkRcIixcbiAgICAgIHN1YnRpdGxlID0gYHYke2JiZFZlcnNpb259YCxcbiAgICAgIGZvb3RlclxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGNlID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50O1xuICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtcbiAgICAgIHNyYzogaW1hZ2VcbiAgICB9KV07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcblxuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbmdlcy5sZW5ndGg7IGMrKykge1xuICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xuICAgICAgY29uc3QgdHlwZSA9IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gPyBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdIDogQ2hhbmdlbG9nQ2xhc3Nlcy5hZGRlZDtcbiAgICAgIGNvbnN0IG1hcmdpbiA9IGMgPT0gMCA/IENoYW5nZWxvZ0NsYXNzZXMubWFyZ2luVG9wIDogXCJcIjtcbiAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YFxuICAgICAgfSwgZW50cnkudGl0bGUpKTtcbiAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XG4gICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGxpc3QpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtcbiAgICAgICAgZ3JvdzogMSxcbiAgICAgICAgc2hyaW5rOiAxXG4gICAgICB9LCBjZShUaXRsZXMuZGVmYXVsdCwge1xuICAgICAgICB0YWc6IFRpdGxlcy5UYWdzLkg0XG4gICAgICB9LCB0aXRsZSksIGNlKFRleHRFbGVtZW50LCB7XG4gICAgICAgIHNpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLFxuICAgICAgICBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELFxuICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZVxuICAgICAgfSwgc3VidGl0bGUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHtcbiAgICAgICAgYW5jaG9yOiBcImFuY2hvci0zWi04QmJcIixcbiAgICAgICAgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwiXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IGNsaWNrID0+IHtcbiAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY2xpY2suc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgIEJEVjIuam9pbkJEMigpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtcbiAgICAgICAgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJcbiAgICAgIH0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCxcbiAgICAgICAgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJcbiAgICAgIH0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LCB7XG4gICAgICAgIHNpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLFxuICAgICAgICBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEXG4gICAgICB9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcbiAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtcbiAgICAgICAgZ3JvdzogMSxcbiAgICAgICAgc2hyaW5rOiAxXG4gICAgICB9LCBmb290ZXIgPyBmb290ZXIgOiBkZWZhdWx0Rm9vdGVyKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuY29udGFpbmVyLFxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxuICAgICAgICBvbkNsb3NlOiBfID0+IF8sXG4gICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxuICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgY2hpbGRyZW46IGNoYW5nZWxvZ0l0ZW1zXG4gICAgICB9LCBwcm9wcykpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxyXG4gICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICAgKi9cblxuXG4gIHN0YXRpYyBzaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xuICAgIGNvbnN0IE1hcmtkb3duID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNYXJrZG93blwiKTtcbiAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmtleSAmJiBtLmtleSgpID09IFwiY29uZmlybS1tb2RhbFwiKTtcbiAgICBpZiAoIU1vZGFsU3RhY2sgfHwgIUNvbmZpcm1hdGlvbk1vZGFsIHx8ICFNYXJrZG93bikgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcblxuICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0IHtcbiAgICAgIG9uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sXG4gICAgICBvbkNhbmNlbCA9IGVtcHR5RnVuY3Rpb24sXG4gICAgICBjb25maXJtVGV4dCA9IFwiT2theVwiLFxuICAgICAgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsXG4gICAgICBkYW5nZXIgPSBmYWxzZSxcbiAgICAgIGtleSA9IHVuZGVmaW5lZFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgY29udGVudCA9IFtjb250ZW50XTtcbiAgICBjb250ZW50ID0gY29udGVudC5tYXAoYyA9PiB0eXBlb2YgYyA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcbiAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKENvbmZpcm1hdGlvbk1vZGFsLCB7XG4gICAgICBoZWFkZXI6IHRpdGxlLFxuICAgICAgY2hpbGRyZW46IGNvbnRlbnQsXG4gICAgICByZWQ6IGRhbmdlcixcbiAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcbiAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXG4gICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcbiAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbFxuICAgIH0sIGtleSk7XG4gIH1cblxufVxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5VdGlscyA9IFV0aWxzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/utils.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Utils; });\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _webpackModules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackModules */ \"./src/modules/webpackModules.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n\n\n\n\nclass Utils {\n /** Document/window width */\n static get screenWidth() {\n return Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n /** Document/window height */\n\n\n static get screenHeight() {\n return Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n }\n\n static get WindowConfigFile() {\n return this._windowConfigFile = null;\n }\n\n static getAllWindowPreferences() {\n return {\n transparent: true,\n frame: false\n };\n }\n\n static getWindowPreference(key) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n\n static setWindowPreference(key, value) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n\n static stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n\n return content;\n }\n\n static getTextArea() {\n return _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].query(\".\" + BDModules.get(e => e.channelTextArea && e.titleWrapper)[0].channelTextArea.split(\" \")[0] + \" textarea\");\n }\n\n static insertText(textarea, text) {\n textarea.focus();\n textarea.selectionStart = 0;\n textarea.selectionEnd = textarea.value.length;\n document.execCommand(\"insertText\", false, text);\n }\n\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n\n static log(moduleName, message) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #3a71c1; font-weight: 700;\", \"color: #3a71c1;\", \"\");\n }\n\n static warn(moduleName, message) {\n console.warn(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #E8A400; font-weight: 700;\", \"color: #E8A400;\", \"\");\n }\n\n static err(moduleName, message, error) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: red; font-weight: 700;\", \"color: red;\", \"\");\n\n if (error) {\n console.groupCollapsed(\"%cError: \" + error.message, \"color: red;\");\n console.error(error.stack);\n console.groupEnd();\n }\n }\n\n static escape(s) {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n }\n\n static testJSON(data) {\n try {\n return JSON.parse(data);\n } catch (err) {\n return false;\n }\n }\n\n static isEmpty(obj) {\n if (obj == null || obj == undefined || obj == \"\") return true;\n if (typeof obj !== \"object\") return false;\n if (Array.isArray(obj)) return obj.length == 0;\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) return false;\n }\n\n return true;\n }\n\n static suppressErrors(method, message) {\n return (...params) => {\n try {\n return method(...params);\n } catch (e) {\n this.err(\"SuppressedError\", \"Error occurred in \" + message, e);\n }\n };\n }\n\n static monkeyPatch(what, methodName, options) {\n const {\n before,\n after,\n instead,\n once = false,\n silent = false,\n force = false\n } = options;\n const displayName = options.displayName || what.displayName || what[methodName].displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n if (!what[methodName]) {\n if (force) what[methodName] = function () {};else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n\n const origMethod = what[methodName];\n\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n what[methodName] = origMethod;\n };\n\n what[methodName] = function () {\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n\n if (instead) {\n const tempRet = Utils.suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n } else {\n if (before) Utils.suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) Utils.suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n\n if (once) cancel();\n return data.returnValue;\n };\n\n Object.assign(what[methodName], origMethod);\n what[methodName].__monkeyPatched = true;\n what[methodName].displayName = displayName;\n\n if (!what[methodName].__originalMethod) {\n what[methodName].__originalMethod = origMethod;\n\n what[methodName].toString = function () {\n return origMethod.toString();\n };\n }\n\n return cancel;\n }\n\n static onRemoved(node, callback) {\n const observer = new MutationObserver(mutations => {\n for (let m = 0; m < mutations.length; m++) {\n const mutation = mutations[m];\n const nodes = Array.from(mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n\n if (directMatch || parentMatch) {\n observer.disconnect();\n callback();\n }\n }\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true\n });\n }\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function (obj, prop) {\n return obj && obj[prop];\n }, obj);\n }\n /**\r\n * This shows a toast similar to android towards the bottom of the screen.\r\n *\r\n * @param {string} content The string to show in the toast.\r\n * @param {object} options Options object. Optional parameter.\r\n * @param {string} options.type Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\r\n * @param {boolean} options.icon Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\r\n * @param {number} options.timeout Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\r\n */\n\n\n static showToast(content, options = {}) {\n if (!document.querySelector(\".bd-toasts\")) {\n const container = document.querySelector(\".\" + BDModules.get(e => e.sidebar && e.hasNotice)[0].sidebar.split(\" \")[9] + \" + div\") || null;\n const memberlist = container ? container.querySelector(\".\" + BDModules.get(e => e.membersWrap)[0].membersWrap) : null;\n const form = container ? container.querySelector(\"form\") : null;\n const left = container ? container.getBoundingClientRect().left : 310;\n const right = memberlist ? memberlist.getBoundingClientRect().left : 0;\n const width = right ? right - container.getBoundingClientRect().left : Utils.screenWidth - left - 240;\n const bottom = form ? form.offsetHeight : 80;\n const toastWrapper = document.createElement(\"div\");\n toastWrapper.classList.add(\"bd-toasts\");\n toastWrapper.style.setProperty(\"left\", left + \"px\");\n toastWrapper.style.setProperty(\"width\", width + \"px\");\n toastWrapper.style.setProperty(\"bottom\", bottom + \"px\");\n document.querySelector(\"#app-mount\").appendChild(toastWrapper);\n }\n\n const {\n type = \"\",\n icon = true,\n timeout = 3000\n } = options;\n const toastElem = document.createElement(\"div\");\n toastElem.classList.add(\"bd-toast\");\n if (type) toastElem.classList.add(\"toast-\" + type);\n if (type && icon) toastElem.classList.add(\"icon\");\n toastElem.innerText = content;\n document.querySelector(\".bd-toasts\").appendChild(toastElem);\n setTimeout(() => {\n toastElem.classList.add(\"closing\");\n setTimeout(() => {\n toastElem.remove();\n if (!document.querySelectorAll(\".bd-toasts .bd-toast\").length) document.querySelector(\".bd-toasts\").remove();\n }, 300);\n }, timeout);\n }\n\n static alert(title, content) {\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0];\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0];\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0];\n const modal = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
\n
${title}
\n
\n
\n
\n
\n ${content}\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n closingListeners.forEach(listener => {\n try {\n listener();\n } catch (e) {\n console.error(e);\n }\n });\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n closingListeners.forEach(listener => {\n try {\n listener();\n } catch (e) {\n console.error(e);\n }\n });\n }, 300);\n });\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].query(\"#app-mount\").append(modal);\n const closingListeners = [];\n return {\n close: () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n closingListeners.forEach(listener => {\n try {\n listener();\n } catch (e) {\n console.error(e);\n }\n });\n }, 300);\n },\n onClose: listener => {\n closingListeners.push(listener);\n }\n };\n }\n\n static showContentErrors({\n plugins: pluginErrors = [],\n themes: themeErrors = []\n }) {\n if (!pluginErrors || !themeErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0];\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0];\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0];\n const modal = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
`);\n\n function generateTab(errors) {\n const container = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
`);\n\n for (const err of errors) {\n const error = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
\n
${err.name ? err.name : err.file}
\n
${err.message}
\n \n
`);\n container.append(error);\n\n if (err.error) {\n error.querySelectorAll(\"a\").forEach(el => el.addEventListener(\"click\", e => {\n e.preventDefault();\n Utils.err(\"ContentManager\", `Error details for ${err.name ? err.name : err.file}.`, err.error);\n }));\n }\n }\n\n return container;\n }\n\n const tabs = [generateTab(pluginErrors), generateTab(themeErrors)];\n modal.querySelectorAll(\".tab-bar-item\").forEach(el => el.addEventListener(\"click\", e => {\n e.preventDefault();\n const selected = modal.querySelector(\".tab-bar-item.selected\");\n if (selected) _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].removeClass(selected, \"selected\");\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(e.target, \"selected\");\n const scroller = modal.querySelector(\".scroller\");\n scroller.innerHTML = \"\";\n scroller.append(tabs[_domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].index(e.target)]);\n }));\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].addClass(modal, \"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].query(\"#app-mount\").append(modal);\n if (pluginErrors.length) modal.querySelector(\".tab-bar-item\").click();else modal.querySelectorAll(\".tab-bar-item\")[1].click();\n }\n\n static showChangelogModal(options = {}) {\n const ModalStack = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const ChangelogClasses = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"fixed\", \"improved\");\n const TextElement = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByDisplayName(\"Text\");\n const FlexChild = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"Child\");\n const Titles = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"Tags\", \"default\");\n const Changelog = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].find(m => m.defaultProps && m.defaultProps.selectable == false);\n const MarkdownParser = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"defaultRules\", \"parse\");\n if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return;\n const {\n image = \"https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5\",\n description = \"\",\n changes = [],\n title = \"BandagedBD\",\n subtitle = `v${_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdVersion\"]}`,\n footer\n } = options;\n const ce = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement;\n const changelogItems = [ce(\"img\", {\n src: image\n })];\n if (description) changelogItems.push(ce(\"p\", null, MarkdownParser.parse(description)));\n\n for (let c = 0; c < changes.length; c++) {\n const entry = changes[c];\n const type = ChangelogClasses[entry.type] ? ChangelogClasses[entry.type] : ChangelogClasses.added;\n const margin = c == 0 ? ChangelogClasses.marginTop : \"\";\n changelogItems.push(ce(\"h1\", {\n className: `${type} ${margin}`\n }, entry.title));\n const list = ce(\"ul\", null, entry.items.map(i => ce(\"li\", null, MarkdownParser.parse(i))));\n changelogItems.push(list);\n }\n\n const renderHeader = function () {\n return ce(FlexChild.Child, {\n grow: 1,\n shrink: 1\n }, ce(Titles.default, {\n tag: Titles.Tags.H4\n }, title), ce(TextElement, {\n size: TextElement.Sizes.SMALL,\n color: TextElement.Colors.STANDARD,\n className: ChangelogClasses.date\n }, subtitle));\n };\n\n const renderFooter = () => {\n const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].find(m => m.displayName == \"Anchor\");\n const AnchorClasses = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"anchorUnderlineOnHover\") || {\n anchor: \"anchor-3Z-8Bb\",\n anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"\n };\n\n const joinSupportServer = click => {\n click.preventDefault();\n click.stopPropagation();\n ModalStack.pop();\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].joinBD2();\n };\n\n const supportLink = Anchor ? ce(Anchor, {\n onClick: joinSupportServer\n }, \"Join our Discord Server.\") : ce(\"a\", {\n className: `${AnchorClasses.anchor} ${AnchorClasses.anchorUnderlineOnHover}`,\n onClick: joinSupportServer\n }, \"Join our Discord Server.\");\n const defaultFooter = ce(TextElement, {\n size: TextElement.Sizes.SMALL,\n color: TextElement.Colors.STANDARD\n }, \"Need support? \", supportLink);\n return ce(FlexChild.Child, {\n grow: 1,\n shrink: 1\n }, footer ? footer : defaultFooter);\n };\n\n return ModalStack.push(function (props) {\n return ce(Changelog, Object.assign({\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n }, props));\n });\n }\n /**\r\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\r\n * @param {string} title - title of the modal\r\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Every string is wrapped in Discord's `Markdown` component so strings will show and render properly.\r\n * @param {object} [options] - options to modify the modal\r\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\r\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\r\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\r\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\r\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\r\n * @param {string} [options.key] - key used to identify the modal. If not provided, one is generated and returned\r\n * @returns {string} - the key used for this modal\r\n */\n\n\n static showConfirmationModal(title, content, options = {}) {\n const ModalStack = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const Markdown = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByDisplayName(\"Markdown\");\n const ConfirmationModal = _webpackModules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].find(m => m.defaultProps && m.key && m.key() == \"confirm-modal\");\n if (!ModalStack || !ConfirmationModal || !Markdown) return Utils.alert(title, content);\n\n const emptyFunction = () => {};\n\n const {\n onConfirm = emptyFunction,\n onCancel = emptyFunction,\n confirmText = \"Okay\",\n cancelText = \"Cancel\",\n danger = false,\n key = undefined\n } = options;\n if (!Array.isArray(content)) content = [content];\n content = content.map(c => typeof c === \"string\" ? _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Markdown, null, c) : c);\n return ModalStack.push(ConfirmationModal, {\n header: title,\n children: content,\n red: danger,\n confirmText: confirmText,\n cancelText: cancelText,\n onConfirm: onConfirm,\n onCancel: onCancel\n }, key);\n }\n\n static removeDa(className) {\n if (!className) return className;\n return className.split(\" \").filter(e => !e.startsWith(\"da-\")).join(\" \");\n }\n\n}\nUtils.showToast = Utils.suppressErrors(Utils.showToast, \"Could not show toast.\");\nwindow.Lightcord.BetterDiscord.Utils = Utils;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy91dGlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy91dGlscy5qcz9jMGY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlscyB7XG4gIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cbiAgc3RhdGljIGdldCBzY3JlZW5XaWR0aCgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgfVxuICAvKiogRG9jdW1lbnQvd2luZG93IGhlaWdodCAqL1xuXG5cbiAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgZnJhbWU6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xuICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZXh0QXJlYSgpIHtcbiAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiICsgQkRNb2R1bGVzLmdldChlID0+IGUuY2hhbm5lbFRleHRBcmVhICYmIGUudGl0bGVXcmFwcGVyKVswXS5jaGFubmVsVGV4dEFyZWEuc3BsaXQoXCIgXCIpWzBdICsgXCIgdGV4dGFyZWFcIik7XG4gIH1cblxuICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xuICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgdGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgPSAwO1xuICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydFRleHRcIiwgZmFsc2UsIHRleHQpO1xuICB9XG5cbiAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XG4gICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gIH1cblxuICBzdGF0aWMgbG9nKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogIzNhNzFjMTsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogIzNhNzFjMTtcIiwgXCJcIik7XG4gIH1cblxuICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgY29uc29sZS53YXJuKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjRThBNDAwOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjRThBNDAwO1wiLCBcIlwiKTtcbiAgfVxuXG4gIHN0YXRpYyBlcnIobW9kdWxlTmFtZSwgbWVzc2FnZSwgZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiJWNFcnJvcjogXCIgKyBlcnJvci5tZXNzYWdlLCBcImNvbG9yOiByZWQ7XCIpO1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvci5zdGFjayk7XG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGVzY2FwZShzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG4gIH1cblxuICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbXB0eShvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgb2JqID09IHVuZGVmaW5lZCB8fCBvYmogPT0gXCJcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBzdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmVycihcIlN1cHByZXNzZWRFcnJvclwiLCBcIkVycm9yIG9jY3VycmVkIGluIFwiICsgbWVzc2FnZSwgZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgYmVmb3JlLFxuICAgICAgYWZ0ZXIsXG4gICAgICBpbnN0ZWFkLFxuICAgICAgb25jZSA9IGZhbHNlLFxuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgICBmb3JjZSA9IGZhbHNlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuXG4gICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XG4gICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7fTtlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ01ldGhvZCA9IHdoYXRbbWV0aG9kTmFtZV07XG5cbiAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XG4gICAgfTtcblxuICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0aGlzT2JqZWN0OiB0aGlzLFxuICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcbiAgICAgICAgY2FuY2VsUGF0Y2g6IGNhbmNlbCxcbiAgICAgICAgb3JpZ2luYWxNZXRob2Q6IG9yaWdNZXRob2QsXG4gICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcbiAgICAgIH07XG5cbiAgICAgIGlmIChpbnN0ZWFkKSB7XG4gICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICBpZiAodGVtcFJldCAhPT0gdW5kZWZpbmVkKSBkYXRhLnJldHVyblZhbHVlID0gdGVtcFJldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChiZWZvcmUpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xuICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uY2UpIGNhbmNlbCgpO1xuICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XG4gICAgfTtcblxuICAgIE9iamVjdC5hc3NpZ24od2hhdFttZXRob2ROYW1lXSwgb3JpZ01ldGhvZCk7XG4gICAgd2hhdFttZXRob2ROYW1lXS5fX21vbmtleVBhdGNoZWQgPSB0cnVlO1xuICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcblxuICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB7XG4gICAgICB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xuXG4gICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC50b1N0cmluZygpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FuY2VsO1xuICB9XG5cbiAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcbiAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW21dO1xuICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcblxuICAgICAgICBpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcbiAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge1xuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldE5lc3RlZFByb3Aob2JqLCBwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uIChvYmosIHByb3ApIHtcbiAgICAgIHJldHVybiBvYmogJiYgb2JqW3Byb3BdO1xuICAgIH0sIG9iaik7XG4gIH1cbiAgLyoqXHJcbiAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXHJcbiAgICovXG5cblxuICBzdGF0aWMgc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIgKyBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyLnNwbGl0KFwiIFwiKVs5XSArIFwiICsgZGl2XCIpIHx8IG51bGw7XG4gICAgICBjb25zdCBtZW1iZXJsaXN0ID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuXCIgKyBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZW1iZXJzV3JhcClbMF0ubWVtYmVyc1dyYXApIDogbnVsbDtcbiAgICAgIGNvbnN0IGZvcm0gPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImZvcm1cIikgOiBudWxsO1xuICAgICAgY29uc3QgbGVmdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMzEwO1xuICAgICAgY29uc3QgcmlnaHQgPSBtZW1iZXJsaXN0ID8gbWVtYmVybGlzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMDtcbiAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgPyByaWdodCAtIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogVXRpbHMuc2NyZWVuV2lkdGggLSBsZWZ0IC0gMjQwO1xuICAgICAgY29uc3QgYm90dG9tID0gZm9ybSA/IGZvcm0ub2Zmc2V0SGVpZ2h0IDogODA7XG4gICAgICBjb25zdCB0b2FzdFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdG9hc3RXcmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdHNcIik7XG4gICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIGxlZnQgKyBcInB4XCIpO1xuICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwid2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xuICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwiYm90dG9tXCIsIGJvdHRvbSArIFwicHhcIik7XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmRDaGlsZCh0b2FzdFdyYXBwZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHR5cGUgPSBcIlwiLFxuICAgICAgaWNvbiA9IHRydWUsXG4gICAgICB0aW1lb3V0ID0gMzAwMFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHRvYXN0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcbiAgICBpZiAodHlwZSkgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJ0b2FzdC1cIiArIHR5cGUpO1xuICAgIGlmICh0eXBlICYmIGljb24pIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiaWNvblwiKTtcbiAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5hcHBlbmRDaGlsZCh0b2FzdEVsZW0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJjbG9zaW5nXCIpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJkLXRvYXN0cyAuYmQtdG9hc3RcIikubGVuZ3RoKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5yZW1vdmUoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSwgdGltZW91dCk7XG4gIH1cblxuICBzdGF0aWMgYWxlcnQodGl0bGUsIGNvbnRlbnQpIHtcbiAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdO1xuICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXTtcbiAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF07XG4gICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBtb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCAzMDApO1xuICAgIH0pO1xuICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSk7XG4gICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xuICAgIGNvbnN0IGNsb3NpbmdMaXN0ZW5lcnMgPSBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAzMDApO1xuICAgICAgfSxcbiAgICAgIG9uQ2xvc2U6IGxpc3RlbmVyID0+IHtcbiAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHNob3dDb250ZW50RXJyb3JzKHtcbiAgICBwbHVnaW5zOiBwbHVnaW5FcnJvcnMgPSBbXSxcbiAgICB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW11cbiAgfSkge1xuICAgIGlmICghcGx1Z2luRXJyb3JzIHx8ICF0aGVtZUVycm9ycykgcmV0dXJuO1xuICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XG4gICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXTtcbiAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF07XG4gICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdO1xuICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsIGJkLWNvbnRlbnQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+PGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGVudCBFcnJvcnM8L2Rpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyIFRPUFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+UGx1Z2luczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+VGhlbWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+TmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj5NZXNzYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj5FcnJvcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcblxuICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kKGVycm9yKTtcblxuICAgICAgICBpZiAoZXJyLmVycm9yKSB7XG4gICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xuICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcbiAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xuICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xuICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcbiAgICB9KSk7XG4gICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBtb2RhbC5yZW1vdmUoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSk7XG4gICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbW9kYWwucmVtb3ZlKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH0pO1xuICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW1cIikuY2xpY2soKTtlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XG4gIH1cblxuICBzdGF0aWMgc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xuICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XG4gICAgY29uc3QgVGV4dEVsZW1lbnQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRleHRcIik7XG4gICAgY29uc3QgRmxleENoaWxkID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJDaGlsZFwiKTtcbiAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xuICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5zZWxlY3RhYmxlID09IGZhbHNlKTtcbiAgICBjb25zdCBNYXJrZG93blBhcnNlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZGVmYXVsdFJ1bGVzXCIsIFwicGFyc2VcIik7XG4gICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICBpbWFnZSA9IFwiaHR0cHM6Ly9yZXBvc2l0b3J5LWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTA1NDczNTM3Lzk1N2I1NDgwLTdjMjYtMTFlOS04NDAxLTUwZmE4MjBjYmFlNVwiLFxuICAgICAgZGVzY3JpcHRpb24gPSBcIlwiLFxuICAgICAgY2hhbmdlcyA9IFtdLFxuICAgICAgdGl0bGUgPSBcIkJhbmRhZ2VkQkRcIixcbiAgICAgIHN1YnRpdGxlID0gYHYke2JiZFZlcnNpb259YCxcbiAgICAgIGZvb3RlclxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGNlID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50O1xuICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtcbiAgICAgIHNyYzogaW1hZ2VcbiAgICB9KV07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcblxuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbmdlcy5sZW5ndGg7IGMrKykge1xuICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xuICAgICAgY29uc3QgdHlwZSA9IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gPyBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdIDogQ2hhbmdlbG9nQ2xhc3Nlcy5hZGRlZDtcbiAgICAgIGNvbnN0IG1hcmdpbiA9IGMgPT0gMCA/IENoYW5nZWxvZ0NsYXNzZXMubWFyZ2luVG9wIDogXCJcIjtcbiAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YFxuICAgICAgfSwgZW50cnkudGl0bGUpKTtcbiAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XG4gICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGxpc3QpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtcbiAgICAgICAgZ3JvdzogMSxcbiAgICAgICAgc2hyaW5rOiAxXG4gICAgICB9LCBjZShUaXRsZXMuZGVmYXVsdCwge1xuICAgICAgICB0YWc6IFRpdGxlcy5UYWdzLkg0XG4gICAgICB9LCB0aXRsZSksIGNlKFRleHRFbGVtZW50LCB7XG4gICAgICAgIHNpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLFxuICAgICAgICBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELFxuICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZVxuICAgICAgfSwgc3VidGl0bGUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHtcbiAgICAgICAgYW5jaG9yOiBcImFuY2hvci0zWi04QmJcIixcbiAgICAgICAgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwiXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IGNsaWNrID0+IHtcbiAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY2xpY2suc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgIEJEVjIuam9pbkJEMigpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtcbiAgICAgICAgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJcbiAgICAgIH0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCxcbiAgICAgICAgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJcbiAgICAgIH0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LCB7XG4gICAgICAgIHNpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLFxuICAgICAgICBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEXG4gICAgICB9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcbiAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtcbiAgICAgICAgZ3JvdzogMSxcbiAgICAgICAgc2hyaW5rOiAxXG4gICAgICB9LCBmb290ZXIgPyBmb290ZXIgOiBkZWZhdWx0Rm9vdGVyKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuY29udGFpbmVyLFxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxuICAgICAgICBvbkNsb3NlOiBfID0+IF8sXG4gICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxuICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgY2hpbGRyZW46IGNoYW5nZWxvZ0l0ZW1zXG4gICAgICB9LCBwcm9wcykpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxyXG4gICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICAgKi9cblxuXG4gIHN0YXRpYyBzaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xuICAgIGNvbnN0IE1hcmtkb3duID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNYXJrZG93blwiKTtcbiAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmtleSAmJiBtLmtleSgpID09IFwiY29uZmlybS1tb2RhbFwiKTtcbiAgICBpZiAoIU1vZGFsU3RhY2sgfHwgIUNvbmZpcm1hdGlvbk1vZGFsIHx8ICFNYXJrZG93bikgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcblxuICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0IHtcbiAgICAgIG9uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sXG4gICAgICBvbkNhbmNlbCA9IGVtcHR5RnVuY3Rpb24sXG4gICAgICBjb25maXJtVGV4dCA9IFwiT2theVwiLFxuICAgICAgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsXG4gICAgICBkYW5nZXIgPSBmYWxzZSxcbiAgICAgIGtleSA9IHVuZGVmaW5lZFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgY29udGVudCA9IFtjb250ZW50XTtcbiAgICBjb250ZW50ID0gY29udGVudC5tYXAoYyA9PiB0eXBlb2YgYyA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcbiAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKENvbmZpcm1hdGlvbk1vZGFsLCB7XG4gICAgICBoZWFkZXI6IHRpdGxlLFxuICAgICAgY2hpbGRyZW46IGNvbnRlbnQsXG4gICAgICByZWQ6IGRhbmdlcixcbiAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcbiAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXG4gICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcbiAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbFxuICAgIH0sIGtleSk7XG4gIH1cblxuICBzdGF0aWMgcmVtb3ZlRGEoY2xhc3NOYW1lKSB7XG4gICAgaWYgKCFjbGFzc05hbWUpIHJldHVybiBjbGFzc05hbWU7XG4gICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIik7XG4gIH1cblxufVxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5VdGlscyA9IFV0aWxzOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/utils.js\n"); /***/ }), @@ -695,7 +695,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2C_PresenceSettings; });\n/* harmony import */ var _modules_v2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _settingsTitle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settingsTitle */ \"./src/ui/settingsTitle.js\");\n/* harmony import */ var _settingsGroup__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsGroup */ \"./src/ui/settingsGroup.js\");\n/* harmony import */ var _modules_dataStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modules/dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _modules_CustomRichPresence__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../modules/CustomRichPresence */ \"./src/modules/CustomRichPresence.js\");\n/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./select */ \"./src/ui/select.jsx\");\n/* harmony import */ var _timestampRender__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./timestampRender */ \"./src/ui/timestampRender.js\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_8__);\n\n\n\n\n\n\n\n\n\n/**\r\n * @type {typeof import(\"react\")}\r\n */\n\nconst React = _modules_v2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].React;\nclass V2C_PresenceSettings extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n data: _modules_dataStore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getSettingGroup(\"rpc\") || _0globals__WEBPACK_IMPORTED_MODULE_4__[\"defaultRPC\"],\n assets: []\n };\n this.preview = null;\n this.isfetching = false;\n\n if (this.state.data.application_id) {\n this.fetchAssets();\n }\n }\n /**\r\n * \r\n * @param {InputText} setting \r\n */\n\n\n onChange(setting, value) {\n let defaultSetting = RPCProps.find(e => e.id === setting.props.id);\n this.setState({\n data: Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_4__[\"settingsRPC\"], this.state.data, {\n [defaultSetting.id]: !!value ? value : null\n }),\n assets: this.state.assets\n });\n\n if (setting.props.id === \"application_id\") {\n this.fetchAssets();\n }\n\n _modules_dataStore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setSettingGroup(\"rpc\", _0globals__WEBPACK_IMPORTED_MODULE_4__[\"settingsRPC\"]);\n this.preview.forceUpdate();\n _modules_CustomRichPresence__WEBPACK_IMPORTED_MODULE_5__[\"default\"].set(_0globals__WEBPACK_IMPORTED_MODULE_4__[\"settingsRPC\"]);\n }\n\n fetchAssets() {\n if (this.isfetching === true) {\n let app = this.state.data.application_id;\n setTimeout(() => {\n if (this.state.data.application_id !== app) {\n return;\n }\n\n this.fetchAssets();\n }, 5000);\n }\n\n if (!this.state.data.application_id) {\n this.setState({\n data: this.state.data,\n assets: []\n });\n return;\n }\n\n this.isfetching = true;\n _modules_CustomRichPresence__WEBPACK_IMPORTED_MODULE_5__[\"default\"].fetchAssets(this.state.data.application_id).then(assets => {\n this.isfetching = false;\n this.setState({\n data: this.state.data,\n assets: Object.keys(assets).map(k => {\n let asset = assets[k];\n return {\n id: asset.id,\n name: asset.name,\n type: asset.type\n };\n })\n });\n this.forceUpdate();\n }).catch(() => {\n this.isfetching = false;\n this.setState({\n data: this.state.data,\n assets: []\n });\n this.forceUpdate();\n });\n }\n\n updatePreview(data) {\n this.setState({\n data\n });\n }\n\n render() {\n let contentModule = BDModules.get(e => e.contentColumn)[0];\n return React.createElement(\"div\", {\n className: contentModule.contentColumn + \" \" + contentModule.contentColumnDefault + \" content-column default\",\n style: {\n padding: \"60px 40px 0px\"\n }\n }, React.createElement(_settingsGroup__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n title: \"RichPresence Settings\",\n settings: this.props.settings,\n onChange: this.props.onChange\n }), React.createElement(_settingsTitle__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: \"RichPresence\"\n }), React.createElement(\"div\", null, RPCProps.map(e => {\n if (e.type === \"text\") {\n return React.createElement(InputText, {\n setting: e,\n manager: this,\n id: e.id\n });\n } else if (e.type === \"number\") {\n let array = [React.createElement(InputNumber, {\n setting: e,\n manager: this,\n id: e.id\n })];\n /*\r\n if(e.id === \"timestamps.start\"){\r\n array.unshift( {\r\n DiscordNative.clipboard.copy(Date.now()+\"\")\r\n }} />)\r\n }*/\n\n return array;\n } else if (e.type === \"choice\") {\n if ([\"assets.small\", \"assets.large\"].includes(e.id)) {\n return React.createElement(InputChoice, {\n setting: e,\n manager: this,\n id: e.id,\n choices: [{\n value: \"none\",\n label: \"No assets\"\n }].concat(this.state.assets.map(e => {\n return {\n value: \"asset-\" + e.id,\n label: e.name\n };\n }))\n });\n } else {\n return \"Unknown choice.\";\n }\n }\n })), React.createElement(\"div\", null, React.createElement(_settingsTitle__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: \"Preview\"\n }), React.createElement(RpcPreview, {\n settings: this\n })), React.createElement(\"div\", {\n className: BDModules.get(e => e.marginBottom20)[0].marginBottom20\n }), React.createElement(\"button\", {\n style: {\n opacity: 0.01\n },\n onClick: window.ohgodohfuck\n }, \"Oh god Oh fuck\"), React.createElement(\"button\", {\n style: {\n opacity: 0.01\n },\n onclick: () => {\n electron__WEBPACK_IMPORTED_MODULE_8__[\"remote\"].shell.openExternal(\"https://www.youtube.com/watch?v=LkYa7rps_g4\", {\n activate: false\n });\n }\n }, \"See ? I pulled a litle sneaky on ya\"));\n }\n\n}\nconst RPCProps = [{\n title: \"Application ID\",\n id: \"application_id\",\n type: \"number\"\n}, {\n title: \"Name\",\n id: \"name\",\n type: \"text\"\n}, {\n title: \"Details\",\n id: \"details\",\n type: \"text\"\n}, {\n title: \"State\",\n id: \"state\",\n type: \"text\"\n}, {\n title: \"Timestamp Start\",\n id: \"timestamps.start\",\n type: \"number\"\n}, {\n title: \"LargeAsset\",\n id: \"assets.large\",\n type: \"choice\"\n}, {\n title: \"SmallAsset\",\n id: \"assets.small\",\n type: \"choice\"\n}];\n\nclass InputText extends React.Component {\n render() {\n let setting = this.props.setting;\n let rowModule = BDModules.get(e => e.removeKeybind)[0];\n let marginModule = BDModules.get(e => e.marginBottom20)[0];\n let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0];\n let colorModule = BDModules.get(e => e.colorStandard)[0];\n let sizeModule = BDModules.get(e => e.size32)[0];\n let flexModule = BDModules.get(e => e._horizontal)[0];\n let inputModule = BDModules.get(e => e.inputMini)[0];\n let sizeModule2 = BDModules.get(e => e.size16 && e.size20)[0];\n return React.createElement(\"div\", {\n className: rowModule.row + \" \" + marginModule.marginBottom20\n }, React.createElement(\"div\", {\n className: `${rowModule.item} ${flexModule.flexChild}`\n }, React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, setting.title), React.createElement(\"div\", {\n className: inputModule.inputWrapper\n }, React.createElement(\"input\", {\n class: `${inputModule.inputDefault} ${sizeModule2.size16}`,\n name: \"state\",\n type: \"text\",\n placeholder: \"\",\n maxlength: \"999\",\n value: this.props.manager.state.data[setting.id],\n onChange: ev => {\n this.props.manager.onChange(this, ev.target.value);\n }\n }))), React.createElement(\"div\", {\n class: `${BDModules.get(e => e.divider && Object.keys(e).length === 1)[0].divider} ${BDModules.get(e => e.dividerDefault)[0].dividerDefault}`\n }));\n }\n\n}\n\nclass InputNumber extends React.Component {\n render() {\n let setting = this.props.setting;\n let rowModule = BDModules.get(e => e.removeKeybind)[0];\n let marginModule = BDModules.get(e => e.marginBottom20)[0];\n let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0];\n let colorModule = BDModules.get(e => e.colorStandard)[0];\n let sizeModule = BDModules.get(e => e.size32)[0];\n let flexModule = BDModules.get(e => e._horizontal)[0];\n let inputModule = BDModules.get(e => e.inputMini)[0];\n let sizeModule2 = BDModules.get(e => e.size16 && e.size20)[0];\n let euhModule1 = BDModules.get(e => e.colorTransparent)[0];\n return React.createElement(\"div\", {\n className: rowModule.row + \" \" + marginModule.marginBottom20\n }, React.createElement(\"div\", {\n className: `${rowModule.item} ${flexModule.flexChild}`\n }, React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, setting.title), React.createElement(\"div\", {\n className: inputModule.inputWrapper\n }, React.createElement(\"input\", {\n class: `${inputModule.inputDefault} ${sizeModule2.size16}`,\n name: \"state\",\n type: \"text\",\n placeholder: \"\",\n maxlength: \"999\",\n value: this.props.manager.state.data[setting.id],\n onChange: ev => {\n let newValue = ev.target.value.replace(/[^\\d]+/g, \"\");\n\n if (newValue !== ev.target.value) {\n ev.target.value = newValue;\n }\n\n this.props.manager.onChange(this, newValue);\n }\n })), setting.id === \"timestamps.start\" ? React.createElement(\"div\", {\n className: BDModules.get(e => e.buttonWrapper)[0].buttonWrapper\n }, React.createElement(\"button\", {\n type: \"button\",\n class: `${flexModule.flexChild} ${euhModule1.button} ${euhModule1.lookFilled} ${euhModule1.colorBrand} ${euhModule1.sizeSmall} ${euhModule1.grow}`,\n style: {\n flex: \"0 1 auto\"\n },\n onClick: () => {\n DiscordNative.clipboard.copy(Date.now() + \"\");\n }\n }, React.createElement(\"div\", {\n class: euhModule1.contents\n }, \"Copy current timestamp\"))) : null), React.createElement(\"div\", {\n class: `${BDModules.get(e => e.divider && Object.keys(e).length === 1)[0].divider} ${BDModules.get(e => e.dividerDefault)[0].dividerDefault}`\n }));\n }\n\n}\n\nclass InputChoice extends React.Component {\n onChange(data) {\n this.props.manager.onChange(this, data.value === \"none\" ? null : data.value.replace(\"asset-\", \"\"));\n }\n\n render() {\n let setting = this.props.setting;\n let rowModule = BDModules.get(e => e.removeKeybind)[0];\n let marginModule = BDModules.get(e => e.marginBottom20)[0];\n let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0];\n let colorModule = BDModules.get(e => e.colorStandard)[0];\n let sizeModule = BDModules.get(e => e.size32)[0];\n let flexModule = BDModules.get(e => e._horizontal)[0];\n let options = this.props.choices;\n return React.createElement(\"div\", {\n className: rowModule.row + \" \" + marginModule.marginBottom20\n }, React.createElement(\"div\", {\n className: `${rowModule.item} ${flexModule.flexChild}`\n }, React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, setting.title), React.createElement(_select__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"asset-\" + this.props.manager.state.data[setting.id] || false,\n onChange: this.onChange.bind(this),\n options: options\n })), React.createElement(\"div\", {\n class: `${BDModules.get(e => e.divider && Object.keys(e).length === 1)[0].divider} ${BDModules.get(e => e.dividerDefault)[0].dividerDefault}`\n }));\n }\n\n}\n\nclass DiscordButton extends React.Component {\n render() {\n let setting = this.props.setting;\n let rowModule = BDModules.get(e => e.removeKeybind)[0];\n let marginModule = BDModules.get(e => e.marginBottom20)[0];\n let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0];\n let colorModule = BDModules.get(e => e.colorStandard)[0];\n let sizeModule = BDModules.get(e => e.size32)[0];\n let flexModule = BDModules.get(e => e._horizontal)[0];\n let euhModule1 = BDModules.get(e => e.colorTransparent)[0];\n let options = this.props.choices;\n return React.createElement(\"div\", {\n className: rowModule.row + \" \" + marginModule.marginBottom20\n }, React.createElement(\"div\", {\n className: `${rowModule.item} ${flexModule.flexChild}`\n }, React.createElement(\"div\", {\n className: BDModules.get(e => e.buttonWrapper)[0].buttonWrapper\n }, React.createElement(\"button\", {\n type: \"button\",\n class: `${flexModule.flexChild} ${euhModule1.button} ${euhModule1.lookFilled} ${euhModule1.colorBrand} ${euhModule1.sizeSmall} ${euhModule1.grow}`,\n style: {\n flex: \"0 1 auto\"\n },\n onClick: this.onClick\n }, React.createElement(\"div\", {\n class: euhModule1.contents\n }, this.props.title)))));\n }\n\n}\n\nclass RpcPreview extends React.Component {\n constructor(props = {}) {\n super(props);\n this.state = {\n active: \"profile\"\n };\n this.tabs = [];\n this.props.settings.preview = this;\n }\n\n changeTab(tab) {\n let ancientTab = this.state.active;\n if (ancientTab === tab.props.id) return;\n this.tabs.forEach(e => {\n e.setActive(false);\n });\n tab.setActive(true);\n this.setState({\n active: tab.props.id\n });\n }\n\n render() {\n let preview = new this.preview({\n preview: this\n });\n preview.setState(this.state.rpc);\n return React.createElement(\"div\", {\n className: \"lc-tabWrapper\"\n }, React.createElement(\"div\", {\n className: \"lc-tabnav\",\n style: {\n flex: \"0 1 auto\"\n }\n }, React.createElement(Tab, {\n preview: this,\n title: \"Full Profile\",\n id: \"profile\"\n }), React.createElement(Tab, {\n preview: this,\n title: \"User Popout\",\n id: \"popout\"\n })), preview.render());\n }\n\n isActive(tab) {\n return this.state.active === tab;\n }\n\n get preview() {\n if (this.state.active === \"profile\") return Profile;\n return Popout;\n }\n\n}\n\nclass Tab extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n active: props.preview.isActive(props.id)\n };\n props.preview.tabs.push(this);\n }\n\n setActive(isActive) {\n this.setState({\n active: !!isActive\n });\n }\n\n render() {\n let className = `lc-navItem`;\n\n if (this.state.active) {\n className += ` lc-navItemActive`;\n } else {\n className += ` lc-navItemInactive`;\n }\n\n return React.createElement(\"div\", {\n className: className,\n onClick: () => {\n this.props.preview.changeTab(this);\n }\n }, this.props.title);\n }\n\n}\n\nclass Popout extends React.Component {\n render() {\n let user = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default.getCurrentUser();\n let avatarURL = user.getAvatarURL(user.avatar.startsWith(\"a_\") ? \"gif\" : \"png\");\n let [rootModule1, flexModule1, stylingModule1, nameTagModule1, activityModule1, textModule1, sizeModule1, scrollerModule1, noteModule1, protipModule1, colorModule1, Messages, avatarModule1] = [BDModules.get(e => e.userPopout)[0], BDModules.get(e => e._horizontal)[0], BDModules.get(e => e.vertical && e.alignStretch && !e.streamerModeEnabledBtn)[0], BDModules.get(e => e.bot)[0], BDModules.get(e => e.activityUserPopout)[0], BDModules.get(e => e.muted && e.wrapper && e.base)[0], BDModules.get(e => e.size32)[0], BDModules.get(e => e.themeGhostHairlineChannels)[0], BDModules.get(e => e.note && Object.keys(e).length === 1)[0], BDModules.get(e => e.pro && e.inline)[0], BDModules.get(e => e.colorStandard)[0], BDModules.get(e => e.default && e.default.Messages)[0].default.Messages, BDModules.get(e => e.pointerEvents)[0]];\n let data = Object.assign({}, _0globals__WEBPACK_IMPORTED_MODULE_4__[\"defaultRPC\"], this.props.preview.props.settings.state.data);\n timestampClass = timestampClass || activityModule1.timestamp;\n return React.createElement(\"div\", {\n className: \"lc-userPopout\"\n }, React.createElement(\"div\", {\n class: rootModule1.userPopout,\n role: \"dialog\",\n tabindex: \"-1\"\n }, React.createElement(\"div\", {\n class: rootModule1.headerPlaying\n }, React.createElement(\"div\", {\n class: `${flexModule1.flex} ${stylingModule1.vertical} ${stylingModule1.justifyCenter} ${stylingModule1.alignCenter} ${stylingModule1.noWrap} ${rootModule1.headerTop}`,\n style: {\n flex: \"1 1 auto\"\n }\n }, React.createElement(\"div\", {\n class: rootModule1.avatarWrapperNormal,\n role: \"button\",\n tabindex: \"0\"\n }, React.createElement(\"div\", {\n class: avatarModule1,\n role: \"img\",\n style: {\n width: \"80px\",\n height: \"80px\"\n }\n }, React.createElement(\"svg\", {\n width: \"92\",\n height: \"80\",\n viewBox: \"0 0 92 80\",\n class: `${avatarModule1.mask} ${avatarModule1.svg}`\n }, React.createElement(\"foreignObject\", {\n x: \"0\",\n y: \"0\",\n width: \"80\",\n height: \"80\",\n mask: \"url(#svg-mask-avatar-status-round-80)\"\n }, React.createElement(\"img\", {\n src: avatarURL,\n alt: \" \",\n class: avatarModule1.avatar\n })), React.createElement(Status, null))), React.createElement(\"svg\", {\n width: \"80\",\n height: \"80\",\n class: rootModule1.avatarHint,\n viewBox: \"0 0 80 80\"\n }, React.createElement(\"foreignObject\", {\n x: \"0\",\n y: \"0\",\n width: \"80\",\n height: \"80\",\n mask: \"url(#svg-mask-avatar-status-round-80)\"\n }, React.createElement(\"div\", {\n class: rootModule1.avatarHintInner\n }, Messages.VIEW_PROFILE)))), React.createElement(\"div\", {\n class: rootModule1.headerText\n }, React.createElement(\"div\", {\n class: `${flexModule1.flex} ${stylingModule1.horizontal} ${stylingModule1.justifyStart} ${stylingModule1.alignCenter} ${stylingModule1.noWrap}`,\n style: {\n flex: \"1 1 auto\"\n }\n }, React.createElement(\"div\", {\n class: `${rootModule1.headerTagNoNickname} ${nameTagModule1.nameTag}`\n }, React.createElement(\"span\", {\n class: `${nameTagModule1.username} ${rootModule1.headerTagUsernameNoNickname}`\n }, user.username), React.createElement(\"span\", null, \"#\", user.discriminator))))), React.createElement(\"div\", {\n class: `${activityModule1.activityUserPopout} ${rootModule1.activity}`\n }, React.createElement(\"h3\", {\n class: `${activityModule1.headerTextNormal} ${textModule1.base} ${sizeModule1.size12}`\n }, Messages.USER_ACTIVITY_HEADER_PLAYING), React.createElement(\"div\", {\n class: activityModule1.bodyNormal\n }, (() => {\n if (!data[\"assets.large\"]) return null;\n let images = [];\n\n if (data[\"assets.large\"]) {\n images.push(React.createElement(\"img\", {\n alt: \"\",\n src: `https://cdn.discordapp.com/app-assets/${data.application_id}/${data[\"assets.large\"]}.png`,\n class: `${activityModule1.assetsLargeImageUserPopout} ${data[\"assets.small\"] ? activityModule1.assetsLargeMaskUserPopout : \"\"}`\n }));\n }\n\n if (data[\"assets.small\"]) {\n images.push(React.createElement(\"img\", {\n alt: \"\",\n src: `https://cdn.discordapp.com/app-assets/${data.application_id}/${data[\"assets.small\"]}.png`,\n class: activityModule1.assetsSmallImageUserPopout\n }));\n }\n\n return React.createElement(\"div\", {\n class: activityModule1.assets\n }, images);\n })(), React.createElement(\"div\", {\n class: activityModule1.contentImagesUserPopout,\n style: {\n flex: \"1 1 auto\"\n }\n }, (() => {\n if (!data.name) return null;\n return React.createElement(\"h3\", {\n class: `${activityModule1.nameNormal} ${textModule1.base} ${sizeModule1.size14}`,\n title: data.name\n }, React.createElement(\"span\", {\n class: activityModule1.activityName\n }, data.name));\n })(), (() => {\n if (!data.details) return null;\n return React.createElement(\"div\", {\n title: data.title,\n class: activityModule1.details\n }, data.details);\n })(), (() => {\n if (!data.state) return null;\n return React.createElement(\"div\", {\n class: activityModule1.state\n }, React.createElement(\"span\", {\n title: data.state\n }, data.state));\n })(), (() => {\n if (!data[\"timestamps.start\"]) return null;\n let timeComponent = Object(_timestampRender__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(Timestamp, Messages);\n return React.createElement(\"div\", {\n class: activityModule1.timestamp\n }, React.createElement(timeComponent, {\n timestamps: {\n end: null,\n start: data[\"timestamps.start\"]\n }\n }));\n })())))), React.createElement(\"div\", {\n class: `${scrollerModule1.scrollerWrap} ${rootModule1.body} ${scrollerModule1.scrollerThemed} ${scrollerModule1.themeGhostHairline} ${scrollerModule1.scrollerFade}`\n }, React.createElement(\"div\", {\n class: `${scrollerModule1.scroller} ${rootModule1.bodyInner}`\n }, React.createElement(\"div\", {\n class: rootModule1.bodyTitle\n }, Messages.NOTE), React.createElement(\"div\", {\n class: `${noteModule1.note} ${rootModule1.note}`\n }, React.createElement(\"textarea\", {\n placeholder: Messages.NOTE_PLACEHOLDER,\n maxlength: \"256\",\n autocorrect: \"off\",\n class: BDModules.get(e => e.scrollbarGhostHairline)[0].scrollbarGhostHairline,\n style: {\n height: \"36px\"\n },\n disabled: true\n })))), React.createElement(\"div\", {\n class: rootModule1.footer\n }, React.createElement(\"div\", {\n class: `${rootModule1.protip} ${protipModule1.inline}`\n }, React.createElement(\"h3\", {\n class: `${protipModule1.pro} ${textModule1.base} ${sizeModule1.size12}`,\n style: {\n color: \"rgb(67, 181, 129)\"\n }\n }, Messages.PINNED_MESSAGES_PRO_TIP), React.createElement(\"div\", {\n class: `${colorModule1.colorStandard} ${sizeModule1.size14} ${protipModule1.tip}`\n }, Messages.CONTEXT_MENU_HINT)))));\n }\n\n}\n\nclass Status extends React.Component {\n render() {\n let status = BDModules.get(e => e.default && e.default.getPresence)[0].default.getPresence().status;\n if (status === \"invisible\") status = \"offline\";\n let className = BDModules.get(e => e.pointerEvents)[0].pointerEvents;\n return React.createElement(\"rect\", {\n width: \"16\",\n height: \"16\",\n x: \"60\",\n y: \"60\",\n fill: \"#ffffff\",\n mask: `url(#svg-mask-status-${status})`,\n className: className\n });\n }\n\n}\n\nlet timestampClass = \"\";\n\nclass Profile extends React.Component {\n render() {\n let user = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default.getCurrentUser();\n let avatarURL = user.getAvatarURL(user.avatar.startsWith(\"a_\") ? \"gif\" : \"png\");\n let [flexModule1, stylingModule1, rootModule1, avatarModule1, nameTagModule1, activityModule1, textModule1, sizeModule1, scrollerModule1, noteModule1, Messages] = [BDModules.get(e => e.flex && e._horizontal)[0], BDModules.get(e => e.vertical && e.alignStretch && !e.streamerModeEnabledBtn)[0], BDModules.get(e => e.topSectionStreaming)[0], BDModules.get(e => e.pointerEvents)[0], BDModules.get(e => e.bot)[0], BDModules.get(e => e.activityProfile)[0], BDModules.get(e => e.muted && e.wrapper && e.base)[0], BDModules.get(e => e.size32)[0], BDModules.get(e => e.scrollerFade)[0], BDModules.get(e => e.note && Object.keys(e).length === 1)[0], BDModules.get(e => e.default && e.default.Messages)[0].default.Messages];\n let data = Object.assign({}, _0globals__WEBPACK_IMPORTED_MODULE_4__[\"defaultRPC\"], this.props.preview.props.settings.state.data);\n timestampClass = timestampClass || activityModule1.timestamp;\n return [React.createElement(\"div\", {\n className: \"lc-tab\"\n }, React.createElement(\"div\", {\n class: `${flexModule1.flex} ${stylingModule1.vertical} ${stylingModule1.justifyStart} ${stylingModule1.alignStretch} ${stylingModule1.noWrap} ${rootModule1.root}`,\n style: {\n flex: \"1 1 auto\"\n }\n }, React.createElement(\"div\", {\n class: rootModule1.topSectionPlaying\n }, React.createElement(\"header\", {\n class: rootModule1.header\n }, React.createElement(\"div\", {\n class: `${rootModule1.avatar} ${avatarModule1.wrapper}`,\n role: \"img\",\n style: {\n width: \"80px\",\n height: \"80px\"\n }\n }, React.createElement(\"svg\", {\n width: \"92\",\n height: \"80\",\n viewBox: \"0 0 92 80\",\n class: `${avatarModule1.mask} ${avatarModule1.svg}`\n }, React.createElement(\"foreignObject\", {\n x: \"0\",\n y: \"0\",\n width: \"80\",\n height: \"80\",\n mask: \"url(#svg-mask-avatar-status-round-80)\"\n }, React.createElement(\"img\", {\n src: avatarURL,\n alt: \" \",\n class: avatarModule1.avatar\n })), React.createElement(Status, null))), React.createElement(\"div\", {\n class: `${rootModule1.headerInfo}`\n }, React.createElement(\"div\", {\n class: `${rootModule1.nameTag} ${nameTagModule1.nameTag}`\n }, React.createElement(\"span\", {\n class: `${rootModule1.username} ${rootModule1.username}`\n }, user.username), React.createElement(\"span\", {\n class: rootModule1.discriminator\n }, \"#\", user.discriminator)), React.createElement(\"div\", {\n class: `${flexModule1.flex} ${flexModule1.horizontal} ${stylingModule1.justifyStart} ${stylingModule1.alignStretch} ${stylingModule1.noWrap} ${rootModule1.profileBadges}`,\n style: {\n flex: \"1 1 auto\"\n }\n }, React.createElement(Badges, null)))), React.createElement(\"div\", {\n class: rootModule1.headerFill\n }, React.createElement(\"div\", {\n class: `${activityModule1.activityProfile} ${rootModule1.activity}`\n }, React.createElement(\"h3\", {\n class: `${activityModule1.headerTextNormal} ${textModule1.base} ${sizeModule1.size12}`\n }, Messages.USER_ACTIVITY_HEADER_PLAYING), React.createElement(\"div\", {\n class: activityModule1.bodyNormal\n }, (() => {\n if (!data[\"assets.large\"]) return null;\n let images = [];\n\n if (data[\"assets.large\"]) {\n images.push(React.createElement(\"img\", {\n alt: \"\",\n src: `https://cdn.discordapp.com/app-assets/${data.application_id}/${data[\"assets.large\"]}.png`,\n class: `${activityModule1.assetsLargeImageProfile} ${data[\"assets.small\"] ? activityModule1.assetsLargeMaskProfile : \"\"}`\n }));\n }\n\n if (data[\"assets.small\"]) {\n images.push(React.createElement(\"img\", {\n alt: \"\",\n src: `https://cdn.discordapp.com/app-assets/${data.application_id}/${data[\"assets.small\"]}.png`,\n class: activityModule1.assetsSmallImageProfile\n }));\n }\n\n return React.createElement(\"div\", {\n class: activityModule1.assets\n }, images);\n })(), React.createElement(\"div\", {\n class: activityModule1.contentImagesProfile,\n style: {\n flex: \"1 1 auto\"\n }\n }, (() => {\n if (!data.name) return null;\n return React.createElement(\"h3\", {\n class: `${activityModule1.nameNormal} ${textModule1.base} ${sizeModule1.size14}`,\n title: data.name\n }, React.createElement(\"span\", {\n class: activityModule1.activityName\n }, data.name));\n })(), (() => {\n if (!data.details) return null;\n return React.createElement(\"div\", {\n title: data.title,\n class: activityModule1.details\n }, data.details);\n })(), (() => {\n if (!data.state) return null;\n return React.createElement(\"div\", {\n class: activityModule1.state\n }, React.createElement(\"span\", {\n title: data.state\n }, data.state));\n })(), (() => {\n if (!data[\"timestamps.start\"]) return null;\n let timeComponent = Object(_timestampRender__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(Timestamp, Messages);\n return React.createElement(\"div\", {\n class: activityModule1.timestamp\n }, React.createElement(timeComponent, {\n timestamps: {\n end: null,\n start: data[\"timestamps.start\"]\n }\n }));\n })()))))), React.createElement(\"div\", {\n class: rootModule1.body\n }, React.createElement(\"div\", {\n class: `${scrollerModule1.scrollerWrap} ${scrollerModule1.scrollerFade}`\n }, React.createElement(\"div\", {\n class: scrollerModule1.scroller\n }, React.createElement(\"div\", {\n class: rootModule1.userInfoSection\n }, React.createElement(\"div\", {\n class: rootModule1.userInfoSectionHeader\n }, Messages.NOTE), React.createElement(\"div\", {\n class: `${rootModule1.note} ${noteModule1.note}`\n }, React.createElement(\"textarea\", {\n placeholder: Messages.NOTE_PLACEHOLDER,\n maxlength: \"256\",\n autocorrect: \"off\",\n class: BDModules.get(e => e.scrollbarGhostHairline)[0].scrollbarGhostHairline,\n style: {\n height: \"40px\"\n },\n disabled: true\n }))), React.createElement(ConnectedAccounts, null)))))), React.createElement(\"div\", {\n class: \"lc- \"\n })];\n }\n\n}\n\nclass ConnectedAccounts extends React.Component {\n render() {\n let accounts = [];\n let rootModule1 = BDModules.get(e => e.topSectionStreaming)[0];\n let AccountModule1 = BDModules.get(e => e.default && e.default.getAccounts)[0].default;\n let accs = AccountModule1.getAccounts().filter(e => e.visibility === 1);\n\n for (let acc of accs) {\n accounts.push(React.createElement(ConnectedAccount, {\n acc: acc\n }));\n }\n\n if (accounts.length > 0) {\n return React.createElement(\"div\", {\n class: rootModule1.userInfoSection\n }, React.createElement(\"div\", {\n class: rootModule1.connectedAccounts\n }, accounts));\n }\n\n return null;\n }\n\n}\n\nclass ConnectedAccount extends React.Component {\n render() {\n let [flexModule1, stylingModule1, rootModule1, flowerModule1, anchorModule1, SocialConstants] = [BDModules.get(e => e.flex && e._horizontal)[0], BDModules.get(e => e.vertical && e.alignStretch && !e.streamerModeEnabledBtn)[0], BDModules.get(e => e.topSectionStreaming)[0], BDModules.get(e => e.flowerStarContainer)[0], BDModules.get(e => e.anchor)[0], BDModules.get(e => e.default && e.default.get && e.default.map)[0].default];\n let acc = this.props.acc;\n let constantsSocial = SocialConstants.get(acc.type);\n return React.createElement(\"div\", {\n class: `${flexModule1.flex} ${flexModule1.horizontal} ${stylingModule1.justifyStart} ${stylingModule1.alignCenter} ${stylingModule1.noWrap} ${rootModule1.connectedAccount}`,\n style: {\n flex: \"0 1 auto\"\n }\n }, React.createElement(\"img\", {\n alt: `Logo ${constantsSocial.name}`,\n class: rootModule1.connectedAccountIcon,\n src: constantsSocial.icon.color || constantsSocial.icon.white || constantsSocial.icon.grey\n }), React.createElement(\"div\", {\n class: rootModule1.connectedAccountNameInner\n }, React.createElement(\"div\", {\n class: rootModule1.connectedAccountName\n }, acc.name), acc.verified ? React.createElement(\"span\", null, React.createElement(\"div\", {\n class: `${flowerModule1.flowerStarContainer} ${rootModule1.connectedAccountVerifiedIcon}`,\n style: {\n width: \"16px\",\n height: \"16px\"\n }\n }, React.createElement(\"svg\", {\n class: flowerModule1.flowerStar,\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 15.2\"\n }, React.createElement(\"path\", {\n fill: \"#4f545c\",\n \"fill-rule\": \"evenodd\",\n d: \"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"\n })), React.createElement(\"div\", {\n class: flowerModule1.childContainer\n }, React.createElement(\"svg\", {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 15.2\"\n }, React.createElement(\"path\", {\n d: \"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z\",\n fill: \"#ffffff\"\n }))))) : null), React.createElement(\"a\", {\n class: `${anchorModule1.anchor} ${anchorModule1.anchorUnderlineOnHover}`,\n rel: \"noreferrer noopener\",\n target: \"_blank\",\n role: \"button\",\n tabindex: \"0\"\n }, React.createElement(\"svg\", {\n class: rootModule1.connectedAccountOpenIcon,\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\"\n }, React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M10 5V3H5.375C4.06519 3 3 4.06519 3 5.375V18.625C3 19.936 4.06519 21 5.375 21H18.625C19.936 21 21 19.936 21 18.625V14H19V19H5V5H10Z\"\n }), React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M21 2.99902H14V4.99902H17.586L9.29297 13.292L10.707 14.706L19 6.41302V9.99902H21V2.99902Z\"\n }))));\n }\n\n}\n\nclass Badges extends React.Component {\n render() {\n let user = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default.getCurrentUser();\n let rootModule = BDModules.get(e => e.topSectionStreaming)[0];\n let UserFlags = BDModules.get(e => e.UserFlags)[0].UserFlags;\n let badges = [];\n let serialized = [];\n\n for (let flagName in UserFlags) {\n if (user.hasFlag(UserFlags[flagName])) serialized.push(flagName);\n }\n\n for (let flagName of serialized) {\n let searchable = `profileBadge${flagName.toLowerCase().replace(/_/g, \" \").split(\" \").map(e => e[0].toUpperCase() + e.slice(1)).join(\"\")}`;\n searchable = searchable.replace(\"HypesquadOnline\", \"HypeSquadOnline\");\n if (!rootModule[searchable]) continue;\n badges.push(React.createElement(Badge, {\n name: searchable\n }));\n }\n\n if (user.hasPremiumSubscription) {\n badges.push(React.createElement(Badge, {\n name: \"profileBadgePremium\"\n }));\n }\n\n return badges;\n }\n\n}\n\nclass Badge extends React.Component {\n render() {\n let rootModule1 = BDModules.get(e => e.topSectionStreaming)[0];\n return React.createElement(\"div\", {\n class: rootModule1.profileBadgeWrapper\n }, React.createElement(\"div\", null, React.createElement(\"div\", {\n class: \"\",\n role: \"button\",\n tabindex: \"0\"\n }, React.createElement(\"div\", {\n class: `${rootModule1.profileBadge} ${rootModule1[this.props.name]}`\n }))));\n }\n\n}\n\nclass Timestamp extends React.Component {\n render() {\n return React.createElement(\"div\", {\n className: timestampClass\n }, this.props.message);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdWkvcHJlc2VuY2VTZXR0aW5ncy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4P2NlZWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xuaW1wb3J0IGRhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcbmltcG9ydCB7IGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCI7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbi8qKlxyXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0XCIpfVxyXG4gKi9cblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGF0YTogZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSB8fCBkZWZhdWx0UlBDLFxuICAgICAgYXNzZXRzOiBbXVxuICAgIH07XG4gICAgdGhpcy5wcmV2aWV3ID0gbnVsbDtcbiAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpIHtcbiAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXHJcbiAgICovXG5cblxuICBvbkNoYW5nZShzZXR0aW5nLCB2YWx1ZSkge1xuICAgIGxldCBkZWZhdWx0U2V0dGluZyA9IFJQQ1Byb3BzLmZpbmQoZSA9PiBlLmlkID09PSBzZXR0aW5nLnByb3BzLmlkKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xuICAgICAgICBbZGVmYXVsdFNldHRpbmcuaWRdOiAhIXZhbHVlID8gdmFsdWUgOiBudWxsXG4gICAgICB9KSxcbiAgICAgIGFzc2V0czogdGhpcy5zdGF0ZS5hc3NldHNcbiAgICB9KTtcblxuICAgIGlmIChzZXR0aW5nLnByb3BzLmlkID09PSBcImFwcGxpY2F0aW9uX2lkXCIpIHtcbiAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKTtcbiAgICB9XG5cbiAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcbiAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKTtcbiAgICBDdXN0b21SaWNoUHJlc2VuY2Uuc2V0KHNldHRpbmdzUlBDKTtcbiAgfVxuXG4gIGZldGNoQXNzZXRzKCkge1xuICAgIGlmICh0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpIHtcbiAgICAgIGxldCBhcHAgPSB0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQ7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCAhPT0gYXBwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpO1xuICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgIGFzc2V0czogW11cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNmZXRjaGluZyA9IHRydWU7XG4gICAgQ3VzdG9tUmljaFByZXNlbmNlLmZldGNoQXNzZXRzKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCkudGhlbihhc3NldHMgPT4ge1xuICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICBhc3NldHM6IE9iamVjdC5rZXlzKGFzc2V0cykubWFwKGsgPT4ge1xuICAgICAgICAgIGxldCBhc3NldCA9IGFzc2V0c1trXTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGFzc2V0LmlkLFxuICAgICAgICAgICAgbmFtZTogYXNzZXQubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICBhc3NldHM6IFtdXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVByZXZpZXcoZGF0YSkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBjb250ZW50TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbilbMF07XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW4gKyBcIiBcIiArIGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQgKyBcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICBwYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIlxuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1NldHRpbmdzR3JvdXAsIHtcbiAgICAgIHRpdGxlOiBcIlJpY2hQcmVzZW5jZSBTZXR0aW5nc1wiLFxuICAgICAgc2V0dGluZ3M6IHRoaXMucHJvcHMuc2V0dGluZ3MsXG4gICAgICBvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZVxuICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19TZXR0aW5nc1RpdGxlLCB7XG4gICAgICB0ZXh0OiBcIlJpY2hQcmVzZW5jZVwiXG4gICAgfSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgbnVsbCwgUlBDUHJvcHMubWFwKGUgPT4ge1xuICAgICAgaWYgKGUudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXRUZXh0LCB7XG4gICAgICAgICAgc2V0dGluZzogZSxcbiAgICAgICAgICBtYW5hZ2VyOiB0aGlzLFxuICAgICAgICAgIGlkOiBlLmlkXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChlLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgbGV0IGFycmF5ID0gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXROdW1iZXIsIHtcbiAgICAgICAgICBzZXR0aW5nOiBlLFxuICAgICAgICAgIG1hbmFnZXI6IHRoaXMsXG4gICAgICAgICAgaWQ6IGUuaWRcbiAgICAgICAgfSldO1xuICAgICAgICAvKlxyXG4gICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcclxuICAgICAgICBhcnJheS51bnNoaWZ0KDxEaXNjb3JkQnV0dG9uIHRpdGxlPVwiQ29weSBDdXJyZW50IFRpbWVzdGFtcFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICB9fSAvPilcclxuICAgICAgICB9Ki9cblxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gXCJjaG9pY2VcIikge1xuICAgICAgICBpZiAoW1wiYXNzZXRzLnNtYWxsXCIsIFwiYXNzZXRzLmxhcmdlXCJdLmluY2x1ZGVzKGUuaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXRDaG9pY2UsIHtcbiAgICAgICAgICAgIHNldHRpbmc6IGUsXG4gICAgICAgICAgICBtYW5hZ2VyOiB0aGlzLFxuICAgICAgICAgICAgaWQ6IGUuaWQsXG4gICAgICAgICAgICBjaG9pY2VzOiBbe1xuICAgICAgICAgICAgICB2YWx1ZTogXCJub25lXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiBcIk5vIGFzc2V0c1wiXG4gICAgICAgICAgICB9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiICsgZS5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJVbmtub3duIGNob2ljZS5cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19TZXR0aW5nc1RpdGxlLCB7XG4gICAgICB0ZXh0OiBcIlByZXZpZXdcIlxuICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFJwY1ByZXZpZXcsIHtcbiAgICAgIHNldHRpbmdzOiB0aGlzXG4gICAgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwXG4gICAgfSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgb3BhY2l0eTogMC4wMVxuICAgICAgfSxcbiAgICAgIG9uQ2xpY2s6IHdpbmRvdy5vaGdvZG9oZnVja1xuICAgIH0sIFwiT2ggZ29kIE9oIGZ1Y2tcIiksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgb3BhY2l0eTogMC4wMVxuICAgICAgfSxcbiAgICAgIG9uY2xpY2s6ICgpID0+IHtcbiAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TGtZYTdycHNfZzRcIiwge1xuICAgICAgICAgIGFjdGl2YXRlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBcIlNlZSA/IEkgcHVsbGVkIGEgbGl0bGUgc25lYWt5IG9uIHlhXCIpKTtcbiAgfVxuXG59XG5jb25zdCBSUENQcm9wcyA9IFt7XG4gIHRpdGxlOiBcIkFwcGxpY2F0aW9uIElEXCIsXG4gIGlkOiBcImFwcGxpY2F0aW9uX2lkXCIsXG4gIHR5cGU6IFwibnVtYmVyXCJcbn0sIHtcbiAgdGl0bGU6IFwiTmFtZVwiLFxuICBpZDogXCJuYW1lXCIsXG4gIHR5cGU6IFwidGV4dFwiXG59LCB7XG4gIHRpdGxlOiBcIkRldGFpbHNcIixcbiAgaWQ6IFwiZGV0YWlsc1wiLFxuICB0eXBlOiBcInRleHRcIlxufSwge1xuICB0aXRsZTogXCJTdGF0ZVwiLFxuICBpZDogXCJzdGF0ZVwiLFxuICB0eXBlOiBcInRleHRcIlxufSwge1xuICB0aXRsZTogXCJUaW1lc3RhbXAgU3RhcnRcIixcbiAgaWQ6IFwidGltZXN0YW1wcy5zdGFydFwiLFxuICB0eXBlOiBcIm51bWJlclwiXG59LCB7XG4gIHRpdGxlOiBcIkxhcmdlQXNzZXRcIixcbiAgaWQ6IFwiYXNzZXRzLmxhcmdlXCIsXG4gIHR5cGU6IFwiY2hvaWNlXCJcbn0sIHtcbiAgdGl0bGU6IFwiU21hbGxBc3NldFwiLFxuICBpZDogXCJhc3NldHMuc21hbGxcIixcbiAgdHlwZTogXCJjaG9pY2VcIlxufV07XG5cbmNsYXNzIElucHV0VGV4dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZztcbiAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF07XG4gICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXTtcbiAgICBsZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF07XG4gICAgbGV0IGNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF07XG4gICAgbGV0IHNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdO1xuICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdO1xuICAgIGxldCBpbnB1dE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF07XG4gICAgbGV0IHNpemVNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IHJvd01vZHVsZS5yb3cgKyBcIiBcIiArIG1hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCArIFwiIFwiICsgc2l6ZU1vZHVsZS5zaXplMTQgKyBcIiBcIiArIG1hcmdpbk1vZHVsZTIuaDUgKyBcIiBcIiArIG1hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1XG4gICAgfSwgc2V0dGluZy50aXRsZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBpbnB1dE1vZHVsZS5pbnB1dFdyYXBwZXJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgY2xhc3M6IGAke2lucHV0TW9kdWxlLmlucHV0RGVmYXVsdH0gJHtzaXplTW9kdWxlMi5zaXplMTZ9YCxcbiAgICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXG4gICAgICBtYXhsZW5ndGg6IFwiOTk5XCIsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0sXG4gICAgICBvbkNoYW5nZTogZXYgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgZXYudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0uZGl2aWRlcn0gJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF0uZGl2aWRlckRlZmF1bHR9YFxuICAgIH0pKTtcbiAgfVxuXG59XG5cbmNsYXNzIElucHV0TnVtYmVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nO1xuICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXTtcbiAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdO1xuICAgIGxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXTtcbiAgICBsZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXTtcbiAgICBsZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF07XG4gICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF07XG4gICAgbGV0IGlucHV0TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXTtcbiAgICBsZXQgc2l6ZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdO1xuICAgIGxldCBldWhNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JUcmFuc3BhcmVudClbMF07XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiByb3dNb2R1bGUucm93ICsgXCIgXCIgKyBtYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogYCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNVwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQgKyBcIiBcIiArIHNpemVNb2R1bGUuc2l6ZTE0ICsgXCIgXCIgKyBtYXJnaW5Nb2R1bGUyLmg1ICsgXCIgXCIgKyBtYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNVxuICAgIH0sIHNldHRpbmcudGl0bGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogaW5wdXRNb2R1bGUuaW5wdXRXcmFwcGVyXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtpbnB1dE1vZHVsZS5pbnB1dERlZmF1bHR9ICR7c2l6ZU1vZHVsZTIuc2l6ZTE2fWAsXG4gICAgICBuYW1lOiBcInN0YXRlXCIsXG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIHBsYWNlaG9sZGVyOiBcIlwiLFxuICAgICAgbWF4bGVuZ3RoOiBcIjk5OVwiLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdLFxuICAgICAgb25DaGFuZ2U6IGV2ID0+IHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gZXYudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1teXFxkXSsvZywgXCJcIik7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBldi50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICBldi50YXJnZXQudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSkpLCBzZXR0aW5nLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIiA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5idXR0b25XcmFwcGVyKVswXS5idXR0b25XcmFwcGVyXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgY2xhc3M6IGAke2ZsZXhNb2R1bGUuZmxleENoaWxkfSAke2V1aE1vZHVsZTEuYnV0dG9ufSAke2V1aE1vZHVsZTEubG9va0ZpbGxlZH0gJHtldWhNb2R1bGUxLmNvbG9yQnJhbmR9ICR7ZXVoTW9kdWxlMS5zaXplU21hbGx9ICR7ZXVoTW9kdWxlMS5ncm93fWAsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4OiBcIjAgMSBhdXRvXCJcbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgIERpc2NvcmROYXRpdmUuY2xpcGJvYXJkLmNvcHkoRGF0ZS5ub3coKSArIFwiXCIpO1xuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGV1aE1vZHVsZTEuY29udGVudHNcbiAgICB9LCBcIkNvcHkgY3VycmVudCB0aW1lc3RhbXBcIikpKSA6IG51bGwpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0uZGl2aWRlcn0gJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF0uZGl2aWRlckRlZmF1bHR9YFxuICAgIH0pKTtcbiAgfVxuXG59XG5cbmNsYXNzIElucHV0Q2hvaWNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgb25DaGFuZ2UoZGF0YSkge1xuICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCBkYXRhLnZhbHVlID09PSBcIm5vbmVcIiA/IG51bGwgOiBkYXRhLnZhbHVlLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nO1xuICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXTtcbiAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdO1xuICAgIGxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXTtcbiAgICBsZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXTtcbiAgICBsZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF07XG4gICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF07XG4gICAgbGV0IG9wdGlvbnMgPSB0aGlzLnByb3BzLmNob2ljZXM7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiByb3dNb2R1bGUucm93ICsgXCIgXCIgKyBtYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogYCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNVwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQgKyBcIiBcIiArIHNpemVNb2R1bGUuc2l6ZTE0ICsgXCIgXCIgKyBtYXJnaW5Nb2R1bGUyLmg1ICsgXCIgXCIgKyBtYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNVxuICAgIH0sIHNldHRpbmcudGl0bGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdCwge1xuICAgICAgdmFsdWU6IFwiYXNzZXQtXCIgKyB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSB8fCBcIm5vbmVcIixcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyksXG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0uZGl2aWRlcn0gJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF0uZGl2aWRlckRlZmF1bHR9YFxuICAgIH0pKTtcbiAgfVxuXG59XG5cbmNsYXNzIERpc2NvcmRCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmc7XG4gICAgbGV0IHJvd01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdO1xuICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF07XG4gICAgbGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdO1xuICAgIGxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdO1xuICAgIGxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXTtcbiAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXTtcbiAgICBsZXQgZXVoTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdO1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5wcm9wcy5jaG9pY2VzO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogcm93TW9kdWxlLnJvdyArIFwiIFwiICsgbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGAke3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuYnV0dG9uV3JhcHBlcilbMF0uYnV0dG9uV3JhcHBlclxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIGNsYXNzOiBgJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH0gJHtldWhNb2R1bGUxLmJ1dHRvbn0gJHtldWhNb2R1bGUxLmxvb2tGaWxsZWR9ICR7ZXVoTW9kdWxlMS5jb2xvckJyYW5kfSAke2V1aE1vZHVsZTEuc2l6ZVNtYWxsfSAke2V1aE1vZHVsZTEuZ3Jvd31gLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmxleDogXCIwIDEgYXV0b1wiXG4gICAgICB9LFxuICAgICAgb25DbGljazogdGhpcy5vbkNsaWNrXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogZXVoTW9kdWxlMS5jb250ZW50c1xuICAgIH0sIHRoaXMucHJvcHMudGl0bGUpKSkpKTtcbiAgfVxuXG59XG5cbmNsYXNzIFJwY1ByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXG4gICAgfTtcbiAgICB0aGlzLnRhYnMgPSBbXTtcbiAgICB0aGlzLnByb3BzLnNldHRpbmdzLnByZXZpZXcgPSB0aGlzO1xuICB9XG5cbiAgY2hhbmdlVGFiKHRhYikge1xuICAgIGxldCBhbmNpZW50VGFiID0gdGhpcy5zdGF0ZS5hY3RpdmU7XG4gICAgaWYgKGFuY2llbnRUYWIgPT09IHRhYi5wcm9wcy5pZCkgcmV0dXJuO1xuICAgIHRoaXMudGFicy5mb3JFYWNoKGUgPT4ge1xuICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIH0pO1xuICAgIHRhYi5zZXRBY3RpdmUodHJ1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhY3RpdmU6IHRhYi5wcm9wcy5pZFxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBwcmV2aWV3ID0gbmV3IHRoaXMucHJldmlldyh7XG4gICAgICBwcmV2aWV3OiB0aGlzXG4gICAgfSk7XG4gICAgcHJldmlldy5zZXRTdGF0ZSh0aGlzLnN0YXRlLnJwYyk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImxjLXRhYldyYXBwZXJcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImxjLXRhYm5hdlwiLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmxleDogXCIwIDEgYXV0b1wiXG4gICAgICB9XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChUYWIsIHtcbiAgICAgIHByZXZpZXc6IHRoaXMsXG4gICAgICB0aXRsZTogXCJGdWxsIFByb2ZpbGVcIixcbiAgICAgIGlkOiBcInByb2ZpbGVcIlxuICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYiwge1xuICAgICAgcHJldmlldzogdGhpcyxcbiAgICAgIHRpdGxlOiBcIlVzZXIgUG9wb3V0XCIsXG4gICAgICBpZDogXCJwb3BvdXRcIlxuICAgIH0pKSwgcHJldmlldy5yZW5kZXIoKSk7XG4gIH1cblxuICBpc0FjdGl2ZSh0YWIpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5hY3RpdmUgPT09IHRhYjtcbiAgfVxuXG4gIGdldCBwcmV2aWV3KCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gXCJwcm9maWxlXCIpIHJldHVybiBQcm9maWxlO1xuICAgIHJldHVybiBQb3BvdXQ7XG4gIH1cblxufVxuXG5jbGFzcyBUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxuICAgIH07XG4gICAgcHJvcHMucHJldmlldy50YWJzLnB1c2godGhpcyk7XG4gIH1cblxuICBzZXRBY3RpdmUoaXNBY3RpdmUpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGFjdGl2ZTogISFpc0FjdGl2ZVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBjbGFzc05hbWUgPSBgbGMtbmF2SXRlbWA7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5hY3RpdmUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1BY3RpdmVgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtSW5hY3RpdmVgO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLnByZXZpZXcuY2hhbmdlVGFiKHRoaXMpO1xuICAgICAgfVxuICAgIH0sIHRoaXMucHJvcHMudGl0bGUpO1xuICB9XG5cbn1cblxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGxldCB1c2VyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwodXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCIpO1xuICAgIGxldCBbcm9vdE1vZHVsZTEsIGZsZXhNb2R1bGUxLCBzdHlsaW5nTW9kdWxlMSwgbmFtZVRhZ01vZHVsZTEsIGFjdGl2aXR5TW9kdWxlMSwgdGV4dE1vZHVsZTEsIHNpemVNb2R1bGUxLCBzY3JvbGxlck1vZHVsZTEsIG5vdGVNb2R1bGUxLCBwcm90aXBNb2R1bGUxLCBjb2xvck1vZHVsZTEsIE1lc3NhZ2VzLCBhdmF0YXJNb2R1bGUxXSA9IFtCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyUG9wb3V0KVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlVc2VyUG9wb3V0KVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRoZW1lR2hvc3RIYWlybGluZUNoYW5uZWxzKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUubm90ZSAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wcm8gJiYgZS5pbmxpbmUpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXMsIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdXTtcbiAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKTtcbiAgICB0aW1lc3RhbXBDbGFzcyA9IHRpbWVzdGFtcENsYXNzIHx8IGFjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXA7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImxjLXVzZXJQb3BvdXRcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLnVzZXJQb3BvdXQsXG4gICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgdGFiaW5kZXg6IFwiLTFcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmhlYWRlclBsYXlpbmdcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtmbGV4TW9kdWxlMS5mbGV4fSAke3N0eWxpbmdNb2R1bGUxLnZlcnRpY2FsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlDZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRvcH1gLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmxleDogXCIxIDEgYXV0b1wiXG4gICAgICB9XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuYXZhdGFyV3JhcHBlck5vcm1hbCxcbiAgICAgIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICB0YWJpbmRleDogXCIwXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBhdmF0YXJNb2R1bGUxLFxuICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBcIjgwcHhcIixcbiAgICAgICAgaGVpZ2h0OiBcIjgwcHhcIlxuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgICAgd2lkdGg6IFwiOTJcIixcbiAgICAgIGhlaWdodDogXCI4MFwiLFxuICAgICAgdmlld0JveDogXCIwIDAgOTIgODBcIixcbiAgICAgIGNsYXNzOiBgJHthdmF0YXJNb2R1bGUxLm1hc2t9ICR7YXZhdGFyTW9kdWxlMS5zdmd9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmb3JlaWduT2JqZWN0XCIsIHtcbiAgICAgIHg6IFwiMFwiLFxuICAgICAgeTogXCIwXCIsXG4gICAgICB3aWR0aDogXCI4MFwiLFxuICAgICAgaGVpZ2h0OiBcIjgwXCIsXG4gICAgICBtYXNrOiBcInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC04MClcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge1xuICAgICAgc3JjOiBhdmF0YXJVUkwsXG4gICAgICBhbHQ6IFwiIFwiLFxuICAgICAgY2xhc3M6IGF2YXRhck1vZHVsZTEuYXZhdGFyXG4gICAgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFN0YXR1cywgbnVsbCkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICB3aWR0aDogXCI4MFwiLFxuICAgICAgaGVpZ2h0OiBcIjgwXCIsXG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuYXZhdGFySGludCxcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDgwIDgwXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9yZWlnbk9iamVjdFwiLCB7XG4gICAgICB4OiBcIjBcIixcbiAgICAgIHk6IFwiMFwiLFxuICAgICAgd2lkdGg6IFwiODBcIixcbiAgICAgIGhlaWdodDogXCI4MFwiLFxuICAgICAgbWFzazogXCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiByb290TW9kdWxlMS5hdmF0YXJIaW50SW5uZXJcbiAgICB9LCBNZXNzYWdlcy5WSUVXX1BST0ZJTEUpKSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiByb290TW9kdWxlMS5oZWFkZXJUZXh0XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnbkNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9YCxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZsZXg6IFwiMSAxIGF1dG9cIlxuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLmhlYWRlclRhZ05vTmlja25hbWV9ICR7bmFtZVRhZ01vZHVsZTEubmFtZVRhZ31gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3M6IGAke25hbWVUYWdNb2R1bGUxLnVzZXJuYW1lfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRhZ1VzZXJuYW1lTm9OaWNrbmFtZX1gXG4gICAgfSwgdXNlci51c2VybmFtZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIFwiI1wiLCB1c2VyLmRpc2NyaW1pbmF0b3IpKSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5VXNlclBvcG91dH0gJHtyb290TW9kdWxlMS5hY3Rpdml0eX1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHtcbiAgICAgIGNsYXNzOiBgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gXG4gICAgfSwgTWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlORyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5ib2R5Tm9ybWFsXG4gICAgfSwgKCgpID0+IHtcbiAgICAgIGlmICghZGF0YVtcImFzc2V0cy5sYXJnZVwiXSkgcmV0dXJuIG51bGw7XG4gICAgICBsZXQgaW1hZ2VzID0gW107XG5cbiAgICAgIGlmIChkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKSB7XG4gICAgICAgIGltYWdlcy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge1xuICAgICAgICAgIGFsdDogXCJcIixcbiAgICAgICAgICBzcmM6IGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgLFxuICAgICAgICAgIGNsYXNzOiBgJHthY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VJbWFnZVVzZXJQb3BvdXR9ICR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXSA/IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZU1hc2tVc2VyUG9wb3V0IDogXCJcIn1gXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbXCJhc3NldHMuc21hbGxcIl0pIHtcbiAgICAgICAgaW1hZ2VzLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7XG4gICAgICAgICAgYWx0OiBcIlwiLFxuICAgICAgICAgIHNyYzogYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2AsXG4gICAgICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNTbWFsbEltYWdlVXNlclBvcG91dFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNcbiAgICAgIH0sIGltYWdlcyk7XG4gICAgfSkoKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmNvbnRlbnRJbWFnZXNVc2VyUG9wb3V0LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmxleDogXCIxIDEgYXV0b1wiXG4gICAgICB9XG4gICAgfSwgKCgpID0+IHtcbiAgICAgIGlmICghZGF0YS5uYW1lKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge1xuICAgICAgICBjbGFzczogYCR7YWN0aXZpdHlNb2R1bGUxLm5hbWVOb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTR9YCxcbiAgICAgICAgdGl0bGU6IGRhdGEubmFtZVxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZVxuICAgICAgfSwgZGF0YS5uYW1lKSk7XG4gICAgfSkoKSwgKCgpID0+IHtcbiAgICAgIGlmICghZGF0YS5kZXRhaWxzKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICAgIGNsYXNzOiBhY3Rpdml0eU1vZHVsZTEuZGV0YWlsc1xuICAgICAgfSwgZGF0YS5kZXRhaWxzKTtcbiAgICB9KSgpLCAoKCkgPT4ge1xuICAgICAgaWYgKCFkYXRhLnN0YXRlKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5zdGF0ZVxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICB0aXRsZTogZGF0YS5zdGF0ZVxuICAgICAgfSwgZGF0YS5zdGF0ZSkpO1xuICAgIH0pKCksICgoKSA9PiB7XG4gICAgICBpZiAoIWRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdKSByZXR1cm4gbnVsbDtcbiAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0aW1lQ29tcG9uZW50LCB7XG4gICAgICAgIHRpbWVzdGFtcHM6IHtcbiAgICAgICAgICBlbmQ6IG51bGwsXG4gICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KSgpKSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtyb290TW9kdWxlMS5ib2R5fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdEhhaXJsaW5lfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcn0gJHtyb290TW9kdWxlMS5ib2R5SW5uZXJ9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmJvZHlUaXRsZVxuICAgIH0sIE1lc3NhZ2VzLk5PVEUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtub3RlTW9kdWxlMS5ub3RlfSAke3Jvb3RNb2R1bGUxLm5vdGV9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICBwbGFjZWhvbGRlcjogTWVzc2FnZXMuTk9URV9QTEFDRUhPTERFUixcbiAgICAgIG1heGxlbmd0aDogXCIyNTZcIixcbiAgICAgIGF1dG9jb3JyZWN0OiBcIm9mZlwiLFxuICAgICAgY2xhc3M6IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBoZWlnaHQ6IFwiMzZweFwiXG4gICAgICB9LFxuICAgICAgZGlzYWJsZWQ6IHRydWVcbiAgICB9KSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuZm9vdGVyXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7cm9vdE1vZHVsZTEucHJvdGlwfSAke3Byb3RpcE1vZHVsZTEuaW5saW5lfWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge1xuICAgICAgY2xhc3M6IGAke3Byb3RpcE1vZHVsZTEucHJvfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWAsXG4gICAgICBzdHlsZToge1xuICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiXG4gICAgICB9XG4gICAgfSwgTWVzc2FnZXMuUElOTkVEX01FU1NBR0VTX1BST19USVApLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtjb2xvck1vZHVsZTEuY29sb3JTdGFuZGFyZH0gJHtzaXplTW9kdWxlMS5zaXplMTR9ICR7cHJvdGlwTW9kdWxlMS50aXB9YFxuICAgIH0sIE1lc3NhZ2VzLkNPTlRFWFRfTUVOVV9ISU5UKSkpKSk7XG4gIH1cblxufVxuXG5jbGFzcyBTdGF0dXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IHN0YXR1cyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFByZXNlbmNlKVswXS5kZWZhdWx0LmdldFByZXNlbmNlKCkuc3RhdHVzO1xuICAgIGlmIChzdGF0dXMgPT09IFwiaW52aXNpYmxlXCIpIHN0YXR1cyA9IFwib2ZmbGluZVwiO1xuICAgIGxldCBjbGFzc05hbWUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgICB3aWR0aDogXCIxNlwiLFxuICAgICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgICB4OiBcIjYwXCIsXG4gICAgICB5OiBcIjYwXCIsXG4gICAgICBmaWxsOiBcIiNmZmZmZmZcIixcbiAgICAgIG1hc2s6IGB1cmwoI3N2Zy1tYXNrLXN0YXR1cy0ke3N0YXR1c30pYCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgfSk7XG4gIH1cblxufVxuXG5sZXQgdGltZXN0YW1wQ2xhc3MgPSBcIlwiO1xuXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGxldCB1c2VyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwodXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCIpO1xuICAgIGxldCBbZmxleE1vZHVsZTEsIHN0eWxpbmdNb2R1bGUxLCByb290TW9kdWxlMSwgYXZhdGFyTW9kdWxlMSwgbmFtZVRhZ01vZHVsZTEsIGFjdGl2aXR5TW9kdWxlMSwgdGV4dE1vZHVsZTEsIHNpemVNb2R1bGUxLCBzY3JvbGxlck1vZHVsZTEsIG5vdGVNb2R1bGUxLCBNZXNzYWdlc10gPSBbQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlQcm9maWxlKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyRmFkZSlbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vdGUgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXNdO1xuICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpO1xuICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcDtcbiAgICByZXR1cm4gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImxjLXRhYlwiXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS52ZXJ0aWNhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25TdHJldGNofSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5yb290fWAsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4OiBcIjEgMSBhdXRvXCJcbiAgICAgIH1cbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiByb290TW9kdWxlMS50b3BTZWN0aW9uUGxheWluZ1xuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoZWFkZXJcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmhlYWRlclxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YCxcbiAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICB3aWR0aDogXCI4MHB4XCIsXG4gICAgICAgIGhlaWdodDogXCI4MHB4XCJcbiAgICAgIH1cbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICAgIHdpZHRoOiBcIjkyXCIsXG4gICAgICBoZWlnaHQ6IFwiODBcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDkyIDgwXCIsXG4gICAgICBjbGFzczogYCR7YXZhdGFyTW9kdWxlMS5tYXNrfSAke2F2YXRhck1vZHVsZTEuc3ZnfWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9yZWlnbk9iamVjdFwiLCB7XG4gICAgICB4OiBcIjBcIixcbiAgICAgIHk6IFwiMFwiLFxuICAgICAgd2lkdGg6IFwiODBcIixcbiAgICAgIGhlaWdodDogXCI4MFwiLFxuICAgICAgbWFzazogXCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtcbiAgICAgIHNyYzogYXZhdGFyVVJMLFxuICAgICAgYWx0OiBcIiBcIixcbiAgICAgIGNsYXNzOiBhdmF0YXJNb2R1bGUxLmF2YXRhclxuICAgIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChTdGF0dXMsIG51bGwpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLmhlYWRlckluZm99YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLm5hbWVUYWd9ICR7bmFtZVRhZ01vZHVsZTEubmFtZVRhZ31gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLnVzZXJuYW1lfSAke3Jvb3RNb2R1bGUxLnVzZXJuYW1lfWBcbiAgICB9LCB1c2VyLnVzZXJuYW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmRpc2NyaW1pbmF0b3JcbiAgICB9LCBcIiNcIiwgdXNlci5kaXNjcmltaW5hdG9yKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25TdHJldGNofSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5wcm9maWxlQmFkZ2VzfWAsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4OiBcIjEgMSBhdXRvXCJcbiAgICAgIH1cbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KEJhZGdlcywgbnVsbCkpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmhlYWRlckZpbGxcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHthY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlQcm9maWxlfSAke3Jvb3RNb2R1bGUxLmFjdGl2aXR5fWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge1xuICAgICAgY2xhc3M6IGAke2FjdGl2aXR5TW9kdWxlMS5oZWFkZXJUZXh0Tm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWBcbiAgICB9LCBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX0hFQURFUl9QTEFZSU5HKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmJvZHlOb3JtYWxcbiAgICB9LCAoKCkgPT4ge1xuICAgICAgaWYgKCFkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKSByZXR1cm4gbnVsbDtcbiAgICAgIGxldCBpbWFnZXMgPSBbXTtcblxuICAgICAgaWYgKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pIHtcbiAgICAgICAgaW1hZ2VzLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7XG4gICAgICAgICAgYWx0OiBcIlwiLFxuICAgICAgICAgIHNyYzogYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMubGFyZ2VcIl19LnBuZ2AsXG4gICAgICAgICAgY2xhc3M6IGAke2FjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZUltYWdlUHJvZmlsZX0gJHtkYXRhW1wiYXNzZXRzLnNtYWxsXCJdID8gYWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlTWFza1Byb2ZpbGUgOiBcIlwifWBcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSkge1xuICAgICAgICBpbWFnZXMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtcbiAgICAgICAgICBhbHQ6IFwiXCIsXG4gICAgICAgICAgc3JjOiBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXX0ucG5nYCxcbiAgICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmFzc2V0c1NtYWxsSW1hZ2VQcm9maWxlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmFzc2V0c1xuICAgICAgfSwgaW1hZ2VzKTtcbiAgICB9KSgpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBhY3Rpdml0eU1vZHVsZTEuY29udGVudEltYWdlc1Byb2ZpbGUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4OiBcIjEgMSBhdXRvXCJcbiAgICAgIH1cbiAgICB9LCAoKCkgPT4ge1xuICAgICAgaWYgKCFkYXRhLm5hbWUpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7XG4gICAgICAgIGNsYXNzOiBgJHthY3Rpdml0eU1vZHVsZTEubmFtZU5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxNH1gLFxuICAgICAgICB0aXRsZTogZGF0YS5uYW1lXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzOiBhY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlOYW1lXG4gICAgICB9LCBkYXRhLm5hbWUpKTtcbiAgICB9KSgpLCAoKCkgPT4ge1xuICAgICAgaWYgKCFkYXRhLmRldGFpbHMpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcbiAgICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5kZXRhaWxzXG4gICAgICB9LCBkYXRhLmRldGFpbHMpO1xuICAgIH0pKCksICgoKSA9PiB7XG4gICAgICBpZiAoIWRhdGEuc3RhdGUpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLnN0YXRlXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIHRpdGxlOiBkYXRhLnN0YXRlXG4gICAgICB9LCBkYXRhLnN0YXRlKSk7XG4gICAgfSkoKSwgKCgpID0+IHtcbiAgICAgIGlmICghZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl0pIHJldHVybiBudWxsO1xuICAgICAgbGV0IHRpbWVDb21wb25lbnQgPSB0aW1lc3RhbXBSZW5kZXIoVGltZXN0YW1wLCBNZXNzYWdlcyk7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBhY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcbiAgICAgICAgdGltZXN0YW1wczoge1xuICAgICAgICAgIGVuZDogbnVsbCxcbiAgICAgICAgICBzdGFydDogZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pKCkpKSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuYm9keVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZX1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEudXNlckluZm9TZWN0aW9uXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEudXNlckluZm9TZWN0aW9uSGVhZGVyXG4gICAgfSwgTWVzc2FnZXMuTk9URSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLm5vdGV9ICR7bm90ZU1vZHVsZTEubm90ZX1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIsIHtcbiAgICAgIHBsYWNlaG9sZGVyOiBNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSLFxuICAgICAgbWF4bGVuZ3RoOiBcIjI1NlwiLFxuICAgICAgYXV0b2NvcnJlY3Q6IFwib2ZmXCIsXG4gICAgICBjbGFzczogQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF0uc2Nyb2xsYmFyR2hvc3RIYWlybGluZSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGhlaWdodDogXCI0MHB4XCJcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgIH0pKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29ubmVjdGVkQWNjb3VudHMsIG51bGwpKSkpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwibGMtIFwiXG4gICAgfSldO1xuICB9XG5cbn1cblxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudHMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IGFjY291bnRzID0gW107XG4gICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF07XG4gICAgbGV0IEFjY291bnRNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0QWNjb3VudHMpWzBdLmRlZmF1bHQ7XG4gICAgbGV0IGFjY3MgPSBBY2NvdW50TW9kdWxlMS5nZXRBY2NvdW50cygpLmZpbHRlcihlID0+IGUudmlzaWJpbGl0eSA9PT0gMSk7XG5cbiAgICBmb3IgKGxldCBhY2Mgb2YgYWNjcykge1xuICAgICAgYWNjb3VudHMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KENvbm5lY3RlZEFjY291bnQsIHtcbiAgICAgICAgYWNjOiBhY2NcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjb3VudHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogcm9vdE1vZHVsZTEudXNlckluZm9TZWN0aW9uXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRzXG4gICAgICB9LCBhY2NvdW50cykpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgW2ZsZXhNb2R1bGUxLCBzdHlsaW5nTW9kdWxlMSwgcm9vdE1vZHVsZTEsIGZsb3dlck1vZHVsZTEsIGFuY2hvck1vZHVsZTEsIFNvY2lhbENvbnN0YW50c10gPSBbQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYW5jaG9yKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0ICYmIGUuZGVmYXVsdC5tYXApWzBdLmRlZmF1bHRdO1xuICAgIGxldCBhY2MgPSB0aGlzLnByb3BzLmFjYztcbiAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YCxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZsZXg6IFwiMCAxIGF1dG9cIlxuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge1xuICAgICAgYWx0OiBgTG9nbyAke2NvbnN0YW50c1NvY2lhbC5uYW1lfWAsXG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudEljb24sXG4gICAgICBzcmM6IGNvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXlcbiAgICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWVJbm5lclxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lXG4gICAgfSwgYWNjLm5hbWUpLCBhY2MudmVyaWZpZWQgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtmbG93ZXJNb2R1bGUxLmZsb3dlclN0YXJDb250YWluZXJ9ICR7cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudFZlcmlmaWVkSWNvbn1gLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6IFwiMTZweFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTZweFwiXG4gICAgICB9XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICBjbGFzczogZmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyLFxuICAgICAgd2lkdGg6IFwiMTZcIixcbiAgICAgIGhlaWdodDogXCIxNlwiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTYgMTUuMlwiXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgZmlsbDogXCIjNGY1NDVjXCIsXG4gICAgICBcImZpbGwtcnVsZVwiOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwiXG4gICAgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBmbG93ZXJNb2R1bGUxLmNoaWxkQ29udGFpbmVyXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICB3aWR0aDogXCIxNlwiLFxuICAgICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNS4yXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICBkOiBcIk03LjQsMTEuMTcsNCw4LjYyLDUsNy4yNmwyLDEuNTNMMTAuNjQsNGwxLjM2LDFaXCIsXG4gICAgICBmaWxsOiBcIiNmZmZmZmZcIlxuICAgIH0pKSkpKSA6IG51bGwpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7XG4gICAgICBjbGFzczogYCR7YW5jaG9yTW9kdWxlMS5hbmNob3J9ICR7YW5jaG9yTW9kdWxlMS5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsXG4gICAgICByZWw6IFwibm9yZWZlcnJlciBub29wZW5lclwiLFxuICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgcm9sZTogXCJidXR0b25cIixcbiAgICAgIHRhYmluZGV4OiBcIjBcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRPcGVuSWNvbixcbiAgICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgICBoZWlnaHQ6IFwiMjRcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgZDogXCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiXG4gICAgfSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICBkOiBcIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCJcbiAgICB9KSkpKTtcbiAgfVxuXG59XG5cbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKCk7XG4gICAgbGV0IHJvb3RNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXTtcbiAgICBsZXQgVXNlckZsYWdzID0gQkRNb2R1bGVzLmdldChlID0+IGUuVXNlckZsYWdzKVswXS5Vc2VyRmxhZ3M7XG4gICAgbGV0IGJhZGdlcyA9IFtdO1xuICAgIGxldCBzZXJpYWxpemVkID0gW107XG5cbiAgICBmb3IgKGxldCBmbGFnTmFtZSBpbiBVc2VyRmxhZ3MpIHtcbiAgICAgIGlmICh1c2VyLmhhc0ZsYWcoVXNlckZsYWdzW2ZsYWdOYW1lXSkpIHNlcmlhbGl6ZWQucHVzaChmbGFnTmFtZSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgZmxhZ05hbWUgb2Ygc2VyaWFsaXplZCkge1xuICAgICAgbGV0IHNlYXJjaGFibGUgPSBgcHJvZmlsZUJhZGdlJHtmbGFnTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywgXCIgXCIpLnNwbGl0KFwiIFwiKS5tYXAoZSA9PiBlWzBdLnRvVXBwZXJDYXNlKCkgKyBlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWA7XG4gICAgICBzZWFyY2hhYmxlID0gc2VhcmNoYWJsZS5yZXBsYWNlKFwiSHlwZXNxdWFkT25saW5lXCIsIFwiSHlwZVNxdWFkT25saW5lXCIpO1xuICAgICAgaWYgKCFyb290TW9kdWxlW3NlYXJjaGFibGVdKSBjb250aW51ZTtcbiAgICAgIGJhZGdlcy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2UsIHtcbiAgICAgICAgbmFtZTogc2VhcmNoYWJsZVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24pIHtcbiAgICAgIGJhZGdlcy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2UsIHtcbiAgICAgICAgbmFtZTogXCJwcm9maWxlQmFkZ2VQcmVtaXVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFkZ2VzO1xuICB9XG5cbn1cblxuY2xhc3MgQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF07XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZVdyYXBwZXJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiXCIsXG4gICAgICByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgdGFiaW5kZXg6IFwiMFwiXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlfSAke3Jvb3RNb2R1bGUxW3RoaXMucHJvcHMubmFtZV19YFxuICAgIH0pKSkpO1xuICB9XG5cbn1cblxuY2xhc3MgVGltZXN0YW1wIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogdGltZXN0YW1wQ2xhc3NcbiAgICB9LCB0aGlzLnByb3BzLm1lc3NhZ2UpO1xuICB9XG5cbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/presenceSettings.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2C_PresenceSettings; });\n/* harmony import */ var _modules_v2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _settingsTitle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settingsTitle */ \"./src/ui/settingsTitle.js\");\n/* harmony import */ var _settingsGroup__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsGroup */ \"./src/ui/settingsGroup.js\");\n/* harmony import */ var _modules_dataStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modules/dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _modules_CustomRichPresence__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../modules/CustomRichPresence */ \"./src/modules/CustomRichPresence.js\");\n/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./select */ \"./src/ui/select.jsx\");\n/* harmony import */ var _timestampRender__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./timestampRender */ \"./src/ui/timestampRender.js\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_8__);\n\n\n\n\n\n\n\n\n\n/**\r\n * @type {typeof import(\"react\")}\r\n */\n\nconst React = _modules_v2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].React;\nclass V2C_PresenceSettings extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n data: _modules_dataStore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getSettingGroup(\"rpc\") || _0globals__WEBPACK_IMPORTED_MODULE_4__[\"defaultRPC\"],\n assets: []\n };\n this.preview = null;\n this.isfetching = false;\n\n if (this.state.data.application_id) {\n this.fetchAssets();\n }\n }\n /**\r\n * \r\n * @param {InputText} setting \r\n */\n\n\n onChange(setting, value) {\n let defaultSetting = RPCProps.find(e => e.id === setting.props.id);\n this.setState({\n data: Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_4__[\"settingsRPC\"], this.state.data, {\n [defaultSetting.id]: !!value ? value : null\n }),\n assets: this.state.assets\n });\n\n if (setting.props.id === \"application_id\") {\n this.fetchAssets();\n }\n\n _modules_dataStore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setSettingGroup(\"rpc\", _0globals__WEBPACK_IMPORTED_MODULE_4__[\"settingsRPC\"]);\n this.preview.forceUpdate();\n _modules_CustomRichPresence__WEBPACK_IMPORTED_MODULE_5__[\"default\"].set(_0globals__WEBPACK_IMPORTED_MODULE_4__[\"settingsRPC\"]);\n }\n\n fetchAssets() {\n if (this.isfetching === true) {\n let app = this.state.data.application_id;\n setTimeout(() => {\n if (this.state.data.application_id !== app) {\n return;\n }\n\n this.fetchAssets();\n }, 5000);\n }\n\n if (!this.state.data.application_id) {\n this.setState({\n data: this.state.data,\n assets: []\n });\n return;\n }\n\n this.isfetching = true;\n _modules_CustomRichPresence__WEBPACK_IMPORTED_MODULE_5__[\"default\"].fetchAssets(this.state.data.application_id).then(assets => {\n this.isfetching = false;\n this.setState({\n data: this.state.data,\n assets: Object.keys(assets).map(k => {\n let asset = assets[k];\n return {\n id: asset.id,\n name: asset.name,\n type: asset.type\n };\n })\n });\n this.forceUpdate();\n }).catch(() => {\n this.isfetching = false;\n this.setState({\n data: this.state.data,\n assets: []\n });\n this.forceUpdate();\n });\n }\n\n updatePreview(data) {\n this.setState({\n data\n });\n }\n\n render() {\n let contentModule = BDModules.get(e => e.contentColumn)[0];\n return React.createElement(\"div\", {\n className: contentModule.contentColumn + \" \" + contentModule.contentColumnDefault + \" content-column default\",\n style: {\n padding: \"60px 40px 0px\"\n }\n }, React.createElement(_settingsGroup__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n title: \"RichPresence Settings\",\n settings: this.props.settings,\n onChange: this.props.onChange\n }), React.createElement(_settingsTitle__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: \"RichPresence\"\n }), React.createElement(\"div\", null, RPCProps.map(e => {\n if (e.type === \"text\") {\n return React.createElement(InputText, {\n setting: e,\n manager: this,\n id: e.id\n });\n } else if (e.type === \"number\") {\n let array = [React.createElement(InputNumber, {\n setting: e,\n manager: this,\n id: e.id\n })];\n /*\r\n if(e.id === \"timestamps.start\"){\r\n array.unshift( {\r\n DiscordNative.clipboard.copy(Date.now()+\"\")\r\n }} />)\r\n }*/\n\n return array;\n } else if (e.type === \"choice\") {\n if ([\"assets.small\", \"assets.large\"].includes(e.id)) {\n return React.createElement(InputChoice, {\n setting: e,\n manager: this,\n id: e.id,\n choices: [{\n value: \"none\",\n label: \"No assets\"\n }].concat(this.state.assets.map(e => {\n return {\n value: \"asset-\" + e.id,\n label: e.name\n };\n }))\n });\n } else {\n return \"Unknown choice.\";\n }\n }\n })), React.createElement(\"div\", null, React.createElement(_settingsTitle__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: \"Preview\"\n }), React.createElement(RpcPreview, {\n settings: this\n })), React.createElement(\"div\", {\n className: BDModules.get(e => e.marginBottom20)[0].marginBottom20\n }), React.createElement(\"button\", {\n style: {\n opacity: 0.01\n },\n onClick: window.ohgodohfuck\n }, \"Oh god Oh fuck\"), React.createElement(\"button\", {\n style: {\n opacity: 0.01\n },\n onclick: () => {\n electron__WEBPACK_IMPORTED_MODULE_8__[\"remote\"].shell.openExternal(\"https://www.youtube.com/watch?v=LkYa7rps_g4\", {\n activate: true\n });\n }\n }, \"See ? I pulled a litle sneaky on ya\"));\n }\n\n}\nconst RPCProps = [{\n title: \"Application ID\",\n id: \"application_id\",\n type: \"number\"\n}, {\n title: \"Name\",\n id: \"name\",\n type: \"text\"\n}, {\n title: \"Details\",\n id: \"details\",\n type: \"text\"\n}, {\n title: \"State\",\n id: \"state\",\n type: \"text\"\n}, {\n title: \"Timestamp Start\",\n id: \"timestamps.start\",\n type: \"number\"\n}, {\n title: \"LargeAsset\",\n id: \"assets.large\",\n type: \"choice\"\n}, {\n title: \"SmallAsset\",\n id: \"assets.small\",\n type: \"choice\"\n}];\n\nclass InputText extends React.Component {\n render() {\n let setting = this.props.setting;\n let rowModule = BDModules.get(e => e.removeKeybind)[0];\n let marginModule = BDModules.get(e => e.marginBottom20)[0];\n let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0];\n let colorModule = BDModules.get(e => e.colorStandard)[0];\n let sizeModule = BDModules.get(e => e.size32)[0];\n let flexModule = BDModules.get(e => e._horizontal)[0];\n let inputModule = BDModules.get(e => e.inputMini)[0];\n let sizeModule2 = BDModules.get(e => e.size16 && e.size20)[0];\n return React.createElement(\"div\", {\n className: rowModule.row + \" \" + marginModule.marginBottom20\n }, React.createElement(\"div\", {\n className: `${rowModule.item} ${flexModule.flexChild}`\n }, React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, setting.title), React.createElement(\"div\", {\n className: inputModule.inputWrapper\n }, React.createElement(\"input\", {\n class: `${inputModule.inputDefault} ${sizeModule2.size16}`,\n name: \"state\",\n type: \"text\",\n placeholder: \"\",\n maxlength: \"999\",\n value: this.props.manager.state.data[setting.id],\n onChange: ev => {\n this.props.manager.onChange(this, ev.target.value);\n }\n }))), React.createElement(\"div\", {\n class: `${BDModules.get(e => e.divider && Object.keys(e).length === 1)[0].divider} ${BDModules.get(e => e.dividerDefault)[0].dividerDefault}`\n }));\n }\n\n}\n\nclass InputNumber extends React.Component {\n render() {\n let setting = this.props.setting;\n let rowModule = BDModules.get(e => e.removeKeybind)[0];\n let marginModule = BDModules.get(e => e.marginBottom20)[0];\n let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0];\n let colorModule = BDModules.get(e => e.colorStandard)[0];\n let sizeModule = BDModules.get(e => e.size32)[0];\n let flexModule = BDModules.get(e => e._horizontal)[0];\n let inputModule = BDModules.get(e => e.inputMini)[0];\n let sizeModule2 = BDModules.get(e => e.size16 && e.size20)[0];\n let euhModule1 = BDModules.get(e => e.colorTransparent)[0];\n return React.createElement(\"div\", {\n className: rowModule.row + \" \" + marginModule.marginBottom20\n }, React.createElement(\"div\", {\n className: `${rowModule.item} ${flexModule.flexChild}`\n }, React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, setting.title), React.createElement(\"div\", {\n className: inputModule.inputWrapper\n }, React.createElement(\"input\", {\n class: `${inputModule.inputDefault} ${sizeModule2.size16}`,\n name: \"state\",\n type: \"text\",\n placeholder: \"\",\n maxlength: \"999\",\n value: this.props.manager.state.data[setting.id],\n onChange: ev => {\n let newValue = ev.target.value.replace(/[^\\d]+/g, \"\");\n\n if (newValue !== ev.target.value) {\n ev.target.value = newValue;\n }\n\n this.props.manager.onChange(this, newValue);\n }\n })), setting.id === \"timestamps.start\" ? React.createElement(\"div\", {\n className: BDModules.get(e => e.buttonWrapper)[0].buttonWrapper\n }, React.createElement(\"button\", {\n type: \"button\",\n class: `${flexModule.flexChild} ${euhModule1.button} ${euhModule1.lookFilled} ${euhModule1.colorBrand} ${euhModule1.sizeSmall} ${euhModule1.grow}`,\n style: {\n flex: \"0 1 auto\"\n },\n onClick: () => {\n DiscordNative.clipboard.copy(Date.now() + \"\");\n }\n }, React.createElement(\"div\", {\n class: euhModule1.contents\n }, \"Copy current timestamp\"))) : null), React.createElement(\"div\", {\n class: `${BDModules.get(e => e.divider && Object.keys(e).length === 1)[0].divider} ${BDModules.get(e => e.dividerDefault)[0].dividerDefault}`\n }));\n }\n\n}\n\nclass InputChoice extends React.Component {\n onChange(data) {\n this.props.manager.onChange(this, data.value === \"none\" ? null : data.value.replace(\"asset-\", \"\"));\n }\n\n render() {\n let setting = this.props.setting;\n let rowModule = BDModules.get(e => e.removeKeybind)[0];\n let marginModule = BDModules.get(e => e.marginBottom20)[0];\n let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0];\n let colorModule = BDModules.get(e => e.colorStandard)[0];\n let sizeModule = BDModules.get(e => e.size32)[0];\n let flexModule = BDModules.get(e => e._horizontal)[0];\n let options = this.props.choices;\n return React.createElement(\"div\", {\n className: rowModule.row + \" \" + marginModule.marginBottom20\n }, React.createElement(\"div\", {\n className: `${rowModule.item} ${flexModule.flexChild}`\n }, React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, setting.title), React.createElement(_select__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: \"asset-\" + this.props.manager.state.data[setting.id] || false,\n onChange: this.onChange.bind(this),\n options: options\n })), React.createElement(\"div\", {\n class: `${BDModules.get(e => e.divider && Object.keys(e).length === 1)[0].divider} ${BDModules.get(e => e.dividerDefault)[0].dividerDefault}`\n }));\n }\n\n}\n\nclass DiscordButton extends React.Component {\n render() {\n let rowModule = BDModules.get(e => e.removeKeybind)[0];\n let marginModule = BDModules.get(e => e.marginBottom20)[0];\n let flexModule = BDModules.get(e => e._horizontal)[0];\n let euhModule1 = BDModules.get(e => e.colorTransparent)[0];\n return React.createElement(\"div\", {\n className: rowModule.row + \" \" + marginModule.marginBottom20\n }, React.createElement(\"div\", {\n className: `${rowModule.item} ${flexModule.flexChild}`\n }, React.createElement(\"div\", {\n className: BDModules.get(e => e.buttonWrapper)[0].buttonWrapper\n }, React.createElement(\"button\", {\n type: \"button\",\n class: `${flexModule.flexChild} ${euhModule1.button} ${euhModule1.lookFilled} ${euhModule1.colorBrand} ${euhModule1.sizeSmall} ${euhModule1.grow}`,\n style: {\n flex: \"0 1 auto\"\n },\n onClick: this.onClick\n }, React.createElement(\"div\", {\n class: euhModule1.contents\n }, this.props.title)))));\n }\n\n}\n\nclass RpcPreview extends React.Component {\n constructor(props = {}) {\n super(props);\n this.state = {\n active: \"profile\"\n };\n this.tabs = [];\n this.props.settings.preview = this;\n }\n\n changeTab(tab) {\n let ancientTab = this.state.active;\n if (ancientTab === tab.props.id) return;\n this.tabs.forEach(e => {\n e.setActive(false);\n });\n tab.setActive(true);\n this.setState({\n active: tab.props.id\n });\n }\n\n render() {\n let preview = new this.preview({\n preview: this\n });\n preview.setState(this.state.rpc);\n return React.createElement(\"div\", {\n className: \"lc-tabWrapper\"\n }, React.createElement(\"div\", {\n className: \"lc-tabnav\",\n style: {\n flex: \"0 1 auto\"\n }\n }, React.createElement(Tab, {\n preview: this,\n title: \"Full Profile\",\n id: \"profile\"\n }), React.createElement(Tab, {\n preview: this,\n title: \"User Popout\",\n id: \"popout\"\n })), preview.render());\n }\n\n isActive(tab) {\n return this.state.active === tab;\n }\n\n get preview() {\n if (this.state.active === \"profile\") return Profile;\n return Popout;\n }\n\n}\n\nclass Tab extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n active: props.preview.isActive(props.id)\n };\n props.preview.tabs.push(this);\n }\n\n setActive(isActive) {\n this.setState({\n active: !!isActive\n });\n }\n\n render() {\n let className = `lc-navItem`;\n\n if (this.state.active) {\n className += ` lc-navItemActive`;\n } else {\n className += ` lc-navItemInactive`;\n }\n\n return React.createElement(\"div\", {\n className: className,\n onClick: () => {\n this.props.preview.changeTab(this);\n }\n }, this.props.title);\n }\n\n}\n\nclass Popout extends React.Component {\n render() {\n let user = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default.getCurrentUser();\n let avatarURL = user.getAvatarURL(user.avatar.startsWith(\"a_\") ? \"gif\" : \"png\");\n let [rootModule1, flexModule1, stylingModule1, nameTagModule1, activityModule1, textModule1, sizeModule1, scrollerModule1, noteModule1, protipModule1, colorModule1, Messages, avatarModule1] = [BDModules.get(e => e.userPopout)[0], BDModules.get(e => e._horizontal)[0], BDModules.get(e => e.vertical && e.alignStretch && !e.streamerModeEnabledBtn)[0], BDModules.get(e => e.bot)[0], BDModules.get(e => e.activityUserPopout)[0], BDModules.get(e => e.muted && e.wrapper && e.base)[0], BDModules.get(e => e.size32)[0], BDModules.get(e => e.themeGhostHairlineChannels)[0], BDModules.get(e => e.note && Object.keys(e).length === 1)[0], BDModules.get(e => e.pro && e.inline)[0], BDModules.get(e => e.colorStandard)[0], BDModules.get(e => e.default && e.default.Messages)[0].default.Messages, BDModules.get(e => e.pointerEvents)[0]];\n let data = Object.assign({}, _0globals__WEBPACK_IMPORTED_MODULE_4__[\"defaultRPC\"], this.props.preview.props.settings.state.data);\n timestampClass = timestampClass || activityModule1.timestamp;\n return React.createElement(\"div\", {\n className: \"lc-userPopout\"\n }, React.createElement(\"div\", {\n class: rootModule1.userPopout,\n role: \"dialog\",\n tabindex: \"-1\"\n }, React.createElement(\"div\", {\n class: rootModule1.headerPlaying\n }, React.createElement(\"div\", {\n class: `${flexModule1.flex} ${stylingModule1.vertical} ${stylingModule1.justifyCenter} ${stylingModule1.alignCenter} ${stylingModule1.noWrap} ${rootModule1.headerTop}`,\n style: {\n flex: \"1 1 auto\"\n }\n }, React.createElement(\"div\", {\n class: rootModule1.avatarWrapperNormal,\n role: \"button\",\n tabindex: \"0\"\n }, React.createElement(\"div\", {\n class: avatarModule1,\n role: \"img\",\n style: {\n width: \"80px\",\n height: \"80px\"\n }\n }, React.createElement(\"svg\", {\n width: \"92\",\n height: \"80\",\n viewBox: \"0 0 92 80\",\n class: `${avatarModule1.mask} ${avatarModule1.svg}`\n }, React.createElement(\"foreignObject\", {\n x: \"0\",\n y: \"0\",\n width: \"80\",\n height: \"80\",\n mask: \"url(#svg-mask-avatar-status-round-80)\"\n }, React.createElement(\"img\", {\n src: avatarURL,\n alt: \" \",\n class: avatarModule1.avatar\n })), React.createElement(Status, null))), React.createElement(\"svg\", {\n width: \"80\",\n height: \"80\",\n class: rootModule1.avatarHint,\n viewBox: \"0 0 80 80\"\n }, React.createElement(\"foreignObject\", {\n x: \"0\",\n y: \"0\",\n width: \"80\",\n height: \"80\",\n mask: \"url(#svg-mask-avatar-status-round-80)\"\n }, React.createElement(\"div\", {\n class: rootModule1.avatarHintInner\n }, Messages.VIEW_PROFILE)))), React.createElement(\"div\", {\n class: rootModule1.headerText\n }, React.createElement(\"div\", {\n class: `${flexModule1.flex} ${stylingModule1.horizontal} ${stylingModule1.justifyStart} ${stylingModule1.alignCenter} ${stylingModule1.noWrap}`,\n style: {\n flex: \"1 1 auto\"\n }\n }, React.createElement(\"div\", {\n class: `${rootModule1.headerTagNoNickname} ${nameTagModule1.nameTag}`\n }, React.createElement(\"span\", {\n class: `${nameTagModule1.username} ${rootModule1.headerTagUsernameNoNickname}`\n }, user.username), React.createElement(\"span\", null, \"#\", user.discriminator))))), React.createElement(\"div\", {\n class: `${activityModule1.activityUserPopout} ${rootModule1.activity}`\n }, React.createElement(\"h3\", {\n class: `${activityModule1.headerTextNormal} ${textModule1.base} ${sizeModule1.size12}`\n }, Messages.USER_ACTIVITY_HEADER_PLAYING), React.createElement(\"div\", {\n class: activityModule1.bodyNormal\n }, (() => {\n if (!data[\"assets.large\"]) return null;\n let images = [];\n\n if (data[\"assets.large\"]) {\n images.push(React.createElement(\"img\", {\n alt: \"\",\n src: `https://cdn.discordapp.com/app-assets/${data.application_id}/${data[\"assets.large\"]}.png`,\n class: `${activityModule1.assetsLargeImageUserPopout} ${data[\"assets.small\"] ? activityModule1.assetsLargeMaskUserPopout : \"\"}`\n }));\n }\n\n if (data[\"assets.small\"]) {\n images.push(React.createElement(\"img\", {\n alt: \"\",\n src: `https://cdn.discordapp.com/app-assets/${data.application_id}/${data[\"assets.small\"]}.png`,\n class: activityModule1.assetsSmallImageUserPopout\n }));\n }\n\n return React.createElement(\"div\", {\n class: activityModule1.assets\n }, images);\n })(), React.createElement(\"div\", {\n class: activityModule1.contentImagesUserPopout,\n style: {\n flex: \"1 1 auto\"\n }\n }, (() => {\n if (!data.name) return null;\n return React.createElement(\"h3\", {\n class: `${activityModule1.nameNormal} ${textModule1.base} ${sizeModule1.size14}`,\n title: data.name\n }, React.createElement(\"span\", {\n class: activityModule1.activityName\n }, data.name));\n })(), (() => {\n if (!data.details) return null;\n return React.createElement(\"div\", {\n title: data.title,\n class: activityModule1.details\n }, data.details);\n })(), (() => {\n if (!data.state) return null;\n return React.createElement(\"div\", {\n class: activityModule1.state\n }, React.createElement(\"span\", {\n title: data.state\n }, data.state));\n })(), (() => {\n if (!data[\"timestamps.start\"]) return null;\n let timeComponent = Object(_timestampRender__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(Timestamp, Messages);\n return React.createElement(\"div\", {\n class: activityModule1.timestamp\n }, React.createElement(timeComponent, {\n timestamps: {\n end: null,\n start: data[\"timestamps.start\"]\n }\n }));\n })())))), React.createElement(\"div\", {\n class: `${scrollerModule1.scrollerWrap} ${rootModule1.body} ${scrollerModule1.scrollerThemed} ${scrollerModule1.themeGhostHairline} ${scrollerModule1.scrollerFade}`\n }, React.createElement(\"div\", {\n class: `${scrollerModule1.scroller} ${rootModule1.bodyInner}`\n }, React.createElement(\"div\", {\n class: rootModule1.bodyTitle\n }, Messages.NOTE), React.createElement(\"div\", {\n class: `${noteModule1.note} ${rootModule1.note}`\n }, React.createElement(\"textarea\", {\n placeholder: Messages.NOTE_PLACEHOLDER,\n maxlength: \"256\",\n autocorrect: \"off\",\n class: BDModules.get(e => e.scrollbarGhostHairline)[0].scrollbarGhostHairline,\n style: {\n height: \"36px\"\n },\n disabled: true\n })))), React.createElement(\"div\", {\n class: rootModule1.footer\n }, React.createElement(\"div\", {\n class: `${rootModule1.protip} ${protipModule1.inline}`\n }, React.createElement(\"h3\", {\n class: `${protipModule1.pro} ${textModule1.base} ${sizeModule1.size12}`,\n style: {\n color: \"rgb(67, 181, 129)\"\n }\n }, Messages.PINNED_MESSAGES_PRO_TIP), React.createElement(\"div\", {\n class: `${colorModule1.colorStandard} ${sizeModule1.size14} ${protipModule1.tip}`\n }, Messages.CONTEXT_MENU_HINT)))));\n }\n\n}\n\nclass Status extends React.Component {\n render() {\n let status = BDModules.get(e => e.default && e.default.getPresence)[0].default.getPresence().status;\n if (status === \"invisible\") status = \"offline\";\n let className = BDModules.get(e => e.pointerEvents)[0].pointerEvents;\n return React.createElement(\"rect\", {\n width: \"16\",\n height: \"16\",\n x: \"60\",\n y: \"60\",\n fill: \"#ffffff\",\n mask: `url(#svg-mask-status-${status})`,\n className: className\n });\n }\n\n}\n\nlet timestampClass = \"\";\n\nclass Profile extends React.Component {\n render() {\n let user = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default.getCurrentUser();\n let avatarURL = user.getAvatarURL(user.avatar.startsWith(\"a_\") ? \"gif\" : \"png\");\n let [flexModule1, stylingModule1, rootModule1, avatarModule1, nameTagModule1, activityModule1, textModule1, sizeModule1, scrollerModule1, noteModule1, Messages] = [BDModules.get(e => e.flex && e._horizontal)[0], BDModules.get(e => e.vertical && e.alignStretch && !e.streamerModeEnabledBtn)[0], BDModules.get(e => e.topSectionStreaming)[0], BDModules.get(e => e.pointerEvents)[0], BDModules.get(e => e.bot)[0], BDModules.get(e => e.activityProfile)[0], BDModules.get(e => e.muted && e.wrapper && e.base)[0], BDModules.get(e => e.size32)[0], BDModules.get(e => e.scrollerFade)[0], BDModules.get(e => e.note && Object.keys(e).length === 1)[0], BDModules.get(e => e.default && e.default.Messages)[0].default.Messages];\n let data = Object.assign({}, _0globals__WEBPACK_IMPORTED_MODULE_4__[\"defaultRPC\"], this.props.preview.props.settings.state.data);\n timestampClass = timestampClass || activityModule1.timestamp;\n return [React.createElement(\"div\", {\n className: \"lc-tab\"\n }, React.createElement(\"div\", {\n class: `${flexModule1.flex} ${stylingModule1.vertical} ${stylingModule1.justifyStart} ${stylingModule1.alignStretch} ${stylingModule1.noWrap} ${rootModule1.root}`,\n style: {\n flex: \"1 1 auto\"\n }\n }, React.createElement(\"div\", {\n class: rootModule1.topSectionPlaying\n }, React.createElement(\"header\", {\n class: rootModule1.header\n }, React.createElement(\"div\", {\n class: `${rootModule1.avatar} ${avatarModule1.wrapper}`,\n role: \"img\",\n style: {\n width: \"80px\",\n height: \"80px\"\n }\n }, React.createElement(\"svg\", {\n width: \"92\",\n height: \"80\",\n viewBox: \"0 0 92 80\",\n class: `${avatarModule1.mask} ${avatarModule1.svg}`\n }, React.createElement(\"foreignObject\", {\n x: \"0\",\n y: \"0\",\n width: \"80\",\n height: \"80\",\n mask: \"url(#svg-mask-avatar-status-round-80)\"\n }, React.createElement(\"img\", {\n src: avatarURL,\n alt: \" \",\n class: avatarModule1.avatar\n })), React.createElement(Status, null))), React.createElement(\"div\", {\n class: `${rootModule1.headerInfo}`\n }, React.createElement(\"div\", {\n class: `${rootModule1.nameTag} ${nameTagModule1.nameTag}`\n }, React.createElement(\"span\", {\n class: `${rootModule1.username} ${rootModule1.username}`\n }, user.username), React.createElement(\"span\", {\n class: rootModule1.discriminator\n }, \"#\", user.discriminator)), React.createElement(\"div\", {\n class: `${flexModule1.flex} ${flexModule1.horizontal} ${stylingModule1.justifyStart} ${stylingModule1.alignStretch} ${stylingModule1.noWrap} ${rootModule1.profileBadges}`,\n style: {\n flex: \"1 1 auto\"\n }\n }, React.createElement(Badges, null)))), React.createElement(\"div\", {\n class: rootModule1.headerFill\n }, React.createElement(\"div\", {\n class: `${activityModule1.activityProfile} ${rootModule1.activity}`\n }, React.createElement(\"h3\", {\n class: `${activityModule1.headerTextNormal} ${textModule1.base} ${sizeModule1.size12}`\n }, Messages.USER_ACTIVITY_HEADER_PLAYING), React.createElement(\"div\", {\n class: activityModule1.bodyNormal\n }, (() => {\n if (!data[\"assets.large\"]) return null;\n let images = [];\n\n if (data[\"assets.large\"]) {\n images.push(React.createElement(\"img\", {\n alt: \"\",\n src: `https://cdn.discordapp.com/app-assets/${data.application_id}/${data[\"assets.large\"]}.png`,\n class: `${activityModule1.assetsLargeImageProfile} ${data[\"assets.small\"] ? activityModule1.assetsLargeMaskProfile : \"\"}`\n }));\n }\n\n if (data[\"assets.small\"]) {\n images.push(React.createElement(\"img\", {\n alt: \"\",\n src: `https://cdn.discordapp.com/app-assets/${data.application_id}/${data[\"assets.small\"]}.png`,\n class: activityModule1.assetsSmallImageProfile\n }));\n }\n\n return React.createElement(\"div\", {\n class: activityModule1.assets\n }, images);\n })(), React.createElement(\"div\", {\n class: activityModule1.contentImagesProfile,\n style: {\n flex: \"1 1 auto\"\n }\n }, (() => {\n if (!data.name) return null;\n return React.createElement(\"h3\", {\n class: `${activityModule1.nameNormal} ${textModule1.base} ${sizeModule1.size14}`,\n title: data.name\n }, React.createElement(\"span\", {\n class: activityModule1.activityName\n }, data.name));\n })(), (() => {\n if (!data.details) return null;\n return React.createElement(\"div\", {\n title: data.title,\n class: activityModule1.details\n }, data.details);\n })(), (() => {\n if (!data.state) return null;\n return React.createElement(\"div\", {\n class: activityModule1.state\n }, React.createElement(\"span\", {\n title: data.state\n }, data.state));\n })(), (() => {\n if (!data[\"timestamps.start\"]) return null;\n let timeComponent = Object(_timestampRender__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(Timestamp, Messages);\n return React.createElement(\"div\", {\n class: activityModule1.timestamp\n }, React.createElement(timeComponent, {\n timestamps: {\n end: null,\n start: data[\"timestamps.start\"]\n }\n }));\n })()))))), React.createElement(\"div\", {\n class: rootModule1.body\n }, React.createElement(\"div\", {\n class: `${scrollerModule1.scrollerWrap} ${scrollerModule1.scrollerFade}`\n }, React.createElement(\"div\", {\n class: scrollerModule1.scroller\n }, React.createElement(\"div\", {\n class: rootModule1.userInfoSection\n }, React.createElement(\"div\", {\n class: rootModule1.userInfoSectionHeader\n }, Messages.NOTE), React.createElement(\"div\", {\n class: `${rootModule1.note} ${noteModule1.note}`\n }, React.createElement(\"textarea\", {\n placeholder: Messages.NOTE_PLACEHOLDER,\n maxlength: \"256\",\n autocorrect: \"off\",\n class: BDModules.get(e => e.scrollbarGhostHairline)[0].scrollbarGhostHairline,\n style: {\n height: \"40px\"\n },\n disabled: true\n }))), React.createElement(ConnectedAccounts, null)))))), React.createElement(\"div\", {\n class: \"lc- \"\n })];\n }\n\n}\n\nclass ConnectedAccounts extends React.Component {\n render() {\n let accounts = [];\n let rootModule1 = BDModules.get(e => e.topSectionStreaming)[0];\n let AccountModule1 = BDModules.get(e => e.default && e.default.getAccounts)[0].default;\n let accs = AccountModule1.getAccounts().filter(e => e.visibility === 1);\n\n for (let acc of accs) {\n accounts.push(React.createElement(ConnectedAccount, {\n acc: acc\n }));\n }\n\n if (accounts.length > 0) {\n return React.createElement(\"div\", {\n class: rootModule1.userInfoSection\n }, React.createElement(\"div\", {\n class: rootModule1.connectedAccounts\n }, accounts));\n }\n\n return null;\n }\n\n}\n\nclass ConnectedAccount extends React.Component {\n render() {\n let [flexModule1, stylingModule1, rootModule1, flowerModule1, anchorModule1, SocialConstants] = [BDModules.get(e => e.flex && e._horizontal)[0], BDModules.get(e => e.vertical && e.alignStretch && !e.streamerModeEnabledBtn)[0], BDModules.get(e => e.topSectionStreaming)[0], BDModules.get(e => e.flowerStarContainer)[0], BDModules.get(e => e.anchor)[0], BDModules.get(e => e.default && e.default.get && e.default.map)[0].default];\n let acc = this.props.acc;\n let constantsSocial = SocialConstants.get(acc.type);\n return React.createElement(\"div\", {\n class: `${flexModule1.flex} ${flexModule1.horizontal} ${stylingModule1.justifyStart} ${stylingModule1.alignCenter} ${stylingModule1.noWrap} ${rootModule1.connectedAccount}`,\n style: {\n flex: \"0 1 auto\"\n }\n }, React.createElement(\"img\", {\n alt: `Logo ${constantsSocial.name}`,\n class: rootModule1.connectedAccountIcon,\n src: constantsSocial.icon.color || constantsSocial.icon.white || constantsSocial.icon.grey\n }), React.createElement(\"div\", {\n class: rootModule1.connectedAccountNameInner\n }, React.createElement(\"div\", {\n class: rootModule1.connectedAccountName\n }, acc.name), acc.verified ? React.createElement(\"span\", null, React.createElement(\"div\", {\n class: `${flowerModule1.flowerStarContainer} ${rootModule1.connectedAccountVerifiedIcon}`,\n style: {\n width: \"16px\",\n height: \"16px\"\n }\n }, React.createElement(\"svg\", {\n class: flowerModule1.flowerStar,\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 15.2\"\n }, React.createElement(\"path\", {\n fill: \"#4f545c\",\n \"fill-rule\": \"evenodd\",\n d: \"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"\n })), React.createElement(\"div\", {\n class: flowerModule1.childContainer\n }, React.createElement(\"svg\", {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 15.2\"\n }, React.createElement(\"path\", {\n d: \"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z\",\n fill: \"#ffffff\"\n }))))) : null), React.createElement(\"a\", {\n class: `${anchorModule1.anchor} ${anchorModule1.anchorUnderlineOnHover}`,\n rel: \"noreferrer noopener\",\n target: \"_blank\",\n role: \"button\",\n tabindex: \"0\"\n }, React.createElement(\"svg\", {\n class: rootModule1.connectedAccountOpenIcon,\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\"\n }, React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M10 5V3H5.375C4.06519 3 3 4.06519 3 5.375V18.625C3 19.936 4.06519 21 5.375 21H18.625C19.936 21 21 19.936 21 18.625V14H19V19H5V5H10Z\"\n }), React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M21 2.99902H14V4.99902H17.586L9.29297 13.292L10.707 14.706L19 6.41302V9.99902H21V2.99902Z\"\n }))));\n }\n\n}\n\nclass Badges extends React.Component {\n render() {\n let user = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default.getCurrentUser();\n let rootModule = BDModules.get(e => e.topSectionStreaming)[0];\n let UserFlags = BDModules.get(e => e.UserFlags)[0].UserFlags;\n let badges = [];\n let serialized = [];\n\n for (let flagName in UserFlags) {\n if (user.hasFlag(UserFlags[flagName])) serialized.push(flagName);\n }\n\n for (let flagName of serialized) {\n let searchable = `profileBadge${flagName.toLowerCase().replace(/_/g, \" \").split(\" \").map(e => e[0].toUpperCase() + e.slice(1)).join(\"\")}`;\n searchable = searchable.replace(\"HypesquadOnline\", \"HypeSquadOnline\");\n if (!rootModule[searchable]) continue;\n badges.push(React.createElement(Badge, {\n name: searchable\n }));\n }\n\n if (user.hasPremiumSubscription) {\n badges.push(React.createElement(Badge, {\n name: \"profileBadgePremium\"\n }));\n }\n\n return badges;\n }\n\n}\n\nclass Badge extends React.Component {\n render() {\n let rootModule1 = BDModules.get(e => e.topSectionStreaming)[0];\n return React.createElement(\"div\", {\n class: rootModule1.profileBadgeWrapper\n }, React.createElement(\"div\", null, React.createElement(\"div\", {\n class: \"\",\n role: \"button\",\n tabindex: \"0\"\n }, React.createElement(\"div\", {\n class: `${rootModule1.profileBadge} ${rootModule1[this.props.name]}`\n }))));\n }\n\n}\n\nclass Timestamp extends React.Component {\n render() {\n return React.createElement(\"div\", {\n className: timestampClass\n }, this.props.message);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdWkvcHJlc2VuY2VTZXR0aW5ncy5qc3guanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4P2NlZWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xuaW1wb3J0IGRhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcbmltcG9ydCB7IGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCI7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbi8qKlxyXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0XCIpfVxyXG4gKi9cblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGF0YTogZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSB8fCBkZWZhdWx0UlBDLFxuICAgICAgYXNzZXRzOiBbXVxuICAgIH07XG4gICAgdGhpcy5wcmV2aWV3ID0gbnVsbDtcbiAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpIHtcbiAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXHJcbiAgICovXG5cblxuICBvbkNoYW5nZShzZXR0aW5nLCB2YWx1ZSkge1xuICAgIGxldCBkZWZhdWx0U2V0dGluZyA9IFJQQ1Byb3BzLmZpbmQoZSA9PiBlLmlkID09PSBzZXR0aW5nLnByb3BzLmlkKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xuICAgICAgICBbZGVmYXVsdFNldHRpbmcuaWRdOiAhIXZhbHVlID8gdmFsdWUgOiBudWxsXG4gICAgICB9KSxcbiAgICAgIGFzc2V0czogdGhpcy5zdGF0ZS5hc3NldHNcbiAgICB9KTtcblxuICAgIGlmIChzZXR0aW5nLnByb3BzLmlkID09PSBcImFwcGxpY2F0aW9uX2lkXCIpIHtcbiAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKTtcbiAgICB9XG5cbiAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcbiAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKTtcbiAgICBDdXN0b21SaWNoUHJlc2VuY2Uuc2V0KHNldHRpbmdzUlBDKTtcbiAgfVxuXG4gIGZldGNoQXNzZXRzKCkge1xuICAgIGlmICh0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpIHtcbiAgICAgIGxldCBhcHAgPSB0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQ7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCAhPT0gYXBwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpO1xuICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgIGFzc2V0czogW11cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNmZXRjaGluZyA9IHRydWU7XG4gICAgQ3VzdG9tUmljaFByZXNlbmNlLmZldGNoQXNzZXRzKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCkudGhlbihhc3NldHMgPT4ge1xuICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICBhc3NldHM6IE9iamVjdC5rZXlzKGFzc2V0cykubWFwKGsgPT4ge1xuICAgICAgICAgIGxldCBhc3NldCA9IGFzc2V0c1trXTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGFzc2V0LmlkLFxuICAgICAgICAgICAgbmFtZTogYXNzZXQubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICBhc3NldHM6IFtdXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVByZXZpZXcoZGF0YSkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBjb250ZW50TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbilbMF07XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW4gKyBcIiBcIiArIGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQgKyBcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICBwYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIlxuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1NldHRpbmdzR3JvdXAsIHtcbiAgICAgIHRpdGxlOiBcIlJpY2hQcmVzZW5jZSBTZXR0aW5nc1wiLFxuICAgICAgc2V0dGluZ3M6IHRoaXMucHJvcHMuc2V0dGluZ3MsXG4gICAgICBvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZVxuICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19TZXR0aW5nc1RpdGxlLCB7XG4gICAgICB0ZXh0OiBcIlJpY2hQcmVzZW5jZVwiXG4gICAgfSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgbnVsbCwgUlBDUHJvcHMubWFwKGUgPT4ge1xuICAgICAgaWYgKGUudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXRUZXh0LCB7XG4gICAgICAgICAgc2V0dGluZzogZSxcbiAgICAgICAgICBtYW5hZ2VyOiB0aGlzLFxuICAgICAgICAgIGlkOiBlLmlkXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChlLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgbGV0IGFycmF5ID0gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXROdW1iZXIsIHtcbiAgICAgICAgICBzZXR0aW5nOiBlLFxuICAgICAgICAgIG1hbmFnZXI6IHRoaXMsXG4gICAgICAgICAgaWQ6IGUuaWRcbiAgICAgICAgfSldO1xuICAgICAgICAvKlxyXG4gICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcclxuICAgICAgICBhcnJheS51bnNoaWZ0KDxEaXNjb3JkQnV0dG9uIHRpdGxlPVwiQ29weSBDdXJyZW50IFRpbWVzdGFtcFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICB9fSAvPilcclxuICAgICAgICB9Ki9cblxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gXCJjaG9pY2VcIikge1xuICAgICAgICBpZiAoW1wiYXNzZXRzLnNtYWxsXCIsIFwiYXNzZXRzLmxhcmdlXCJdLmluY2x1ZGVzKGUuaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXRDaG9pY2UsIHtcbiAgICAgICAgICAgIHNldHRpbmc6IGUsXG4gICAgICAgICAgICBtYW5hZ2VyOiB0aGlzLFxuICAgICAgICAgICAgaWQ6IGUuaWQsXG4gICAgICAgICAgICBjaG9pY2VzOiBbe1xuICAgICAgICAgICAgICB2YWx1ZTogXCJub25lXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiBcIk5vIGFzc2V0c1wiXG4gICAgICAgICAgICB9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiICsgZS5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJVbmtub3duIGNob2ljZS5cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19TZXR0aW5nc1RpdGxlLCB7XG4gICAgICB0ZXh0OiBcIlByZXZpZXdcIlxuICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFJwY1ByZXZpZXcsIHtcbiAgICAgIHNldHRpbmdzOiB0aGlzXG4gICAgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwXG4gICAgfSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgb3BhY2l0eTogMC4wMVxuICAgICAgfSxcbiAgICAgIG9uQ2xpY2s6IHdpbmRvdy5vaGdvZG9oZnVja1xuICAgIH0sIFwiT2ggZ29kIE9oIGZ1Y2tcIiksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgb3BhY2l0eTogMC4wMVxuICAgICAgfSxcbiAgICAgIG9uY2xpY2s6ICgpID0+IHtcbiAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TGtZYTdycHNfZzRcIiwge1xuICAgICAgICAgIGFjdGl2YXRlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIFwiU2VlID8gSSBwdWxsZWQgYSBsaXRsZSBzbmVha3kgb24geWFcIikpO1xuICB9XG5cbn1cbmNvbnN0IFJQQ1Byb3BzID0gW3tcbiAgdGl0bGU6IFwiQXBwbGljYXRpb24gSURcIixcbiAgaWQ6IFwiYXBwbGljYXRpb25faWRcIixcbiAgdHlwZTogXCJudW1iZXJcIlxufSwge1xuICB0aXRsZTogXCJOYW1lXCIsXG4gIGlkOiBcIm5hbWVcIixcbiAgdHlwZTogXCJ0ZXh0XCJcbn0sIHtcbiAgdGl0bGU6IFwiRGV0YWlsc1wiLFxuICBpZDogXCJkZXRhaWxzXCIsXG4gIHR5cGU6IFwidGV4dFwiXG59LCB7XG4gIHRpdGxlOiBcIlN0YXRlXCIsXG4gIGlkOiBcInN0YXRlXCIsXG4gIHR5cGU6IFwidGV4dFwiXG59LCB7XG4gIHRpdGxlOiBcIlRpbWVzdGFtcCBTdGFydFwiLFxuICBpZDogXCJ0aW1lc3RhbXBzLnN0YXJ0XCIsXG4gIHR5cGU6IFwibnVtYmVyXCJcbn0sIHtcbiAgdGl0bGU6IFwiTGFyZ2VBc3NldFwiLFxuICBpZDogXCJhc3NldHMubGFyZ2VcIixcbiAgdHlwZTogXCJjaG9pY2VcIlxufSwge1xuICB0aXRsZTogXCJTbWFsbEFzc2V0XCIsXG4gIGlkOiBcImFzc2V0cy5zbWFsbFwiLFxuICB0eXBlOiBcImNob2ljZVwiXG59XTtcblxuY2xhc3MgSW5wdXRUZXh0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nO1xuICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXTtcbiAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdO1xuICAgIGxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXTtcbiAgICBsZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXTtcbiAgICBsZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF07XG4gICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF07XG4gICAgbGV0IGlucHV0TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXTtcbiAgICBsZXQgc2l6ZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogcm93TW9kdWxlLnJvdyArIFwiIFwiICsgbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGAke3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkICsgXCIgXCIgKyBzaXplTW9kdWxlLnNpemUxNCArIFwiIFwiICsgbWFyZ2luTW9kdWxlMi5oNSArIFwiIFwiICsgbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDVcbiAgICB9LCBzZXR0aW5nLnRpdGxlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGlucHV0TW9kdWxlLmlucHV0V3JhcHBlclxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICBjbGFzczogYCR7aW5wdXRNb2R1bGUuaW5wdXREZWZhdWx0fSAke3NpemVNb2R1bGUyLnNpemUxNn1gLFxuICAgICAgbmFtZTogXCJzdGF0ZVwiLFxuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBwbGFjZWhvbGRlcjogXCJcIixcbiAgICAgIG1heGxlbmd0aDogXCI5OTlcIixcbiAgICAgIHZhbHVlOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSxcbiAgICAgIG9uQ2hhbmdlOiBldiA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCBldi50YXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH0pKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXS5kaXZpZGVyfSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXS5kaXZpZGVyRGVmYXVsdH1gXG4gICAgfSkpO1xuICB9XG5cbn1cblxuY2xhc3MgSW5wdXROdW1iZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmc7XG4gICAgbGV0IHJvd01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdO1xuICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF07XG4gICAgbGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdO1xuICAgIGxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdO1xuICAgIGxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXTtcbiAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXTtcbiAgICBsZXQgaW5wdXRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5pbnB1dE1pbmkpWzBdO1xuICAgIGxldCBzaXplTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF07XG4gICAgbGV0IGV1aE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclRyYW5zcGFyZW50KVswXTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IHJvd01vZHVsZS5yb3cgKyBcIiBcIiArIG1hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCArIFwiIFwiICsgc2l6ZU1vZHVsZS5zaXplMTQgKyBcIiBcIiArIG1hcmdpbk1vZHVsZTIuaDUgKyBcIiBcIiArIG1hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1XG4gICAgfSwgc2V0dGluZy50aXRsZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBpbnB1dE1vZHVsZS5pbnB1dFdyYXBwZXJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgY2xhc3M6IGAke2lucHV0TW9kdWxlLmlucHV0RGVmYXVsdH0gJHtzaXplTW9kdWxlMi5zaXplMTZ9YCxcbiAgICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXG4gICAgICBtYXhsZW5ndGg6IFwiOTk5XCIsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0sXG4gICAgICBvbkNoYW5nZTogZXYgPT4ge1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBldi50YXJnZXQudmFsdWUucmVwbGFjZSgvW15cXGRdKy9nLCBcIlwiKTtcblxuICAgICAgICBpZiAobmV3VmFsdWUgIT09IGV2LnRhcmdldC52YWx1ZSkge1xuICAgICAgICAgIGV2LnRhcmdldC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9KSksIHNldHRpbmcuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiID8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLmJ1dHRvbldyYXBwZXIpWzBdLmJ1dHRvbldyYXBwZXJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICBjbGFzczogYCR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9ICR7ZXVoTW9kdWxlMS5idXR0b259ICR7ZXVoTW9kdWxlMS5sb29rRmlsbGVkfSAke2V1aE1vZHVsZTEuY29sb3JCcmFuZH0gJHtldWhNb2R1bGUxLnNpemVTbWFsbH0gJHtldWhNb2R1bGUxLmdyb3d9YCxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZsZXg6IFwiMCAxIGF1dG9cIlxuICAgICAgfSxcbiAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpICsgXCJcIik7XG4gICAgICB9XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogZXVoTW9kdWxlMS5jb250ZW50c1xuICAgIH0sIFwiQ29weSBjdXJyZW50IHRpbWVzdGFtcFwiKSkpIDogbnVsbCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXS5kaXZpZGVyfSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXS5kaXZpZGVyRGVmYXVsdH1gXG4gICAgfSkpO1xuICB9XG5cbn1cblxuY2xhc3MgSW5wdXRDaG9pY2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBvbkNoYW5nZShkYXRhKSB7XG4gICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIGRhdGEudmFsdWUgPT09IFwibm9uZVwiID8gbnVsbCA6IGRhdGEudmFsdWUucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmc7XG4gICAgbGV0IHJvd01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdO1xuICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF07XG4gICAgbGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdO1xuICAgIGxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdO1xuICAgIGxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXTtcbiAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXTtcbiAgICBsZXQgb3B0aW9ucyA9IHRoaXMucHJvcHMuY2hvaWNlcztcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IHJvd01vZHVsZS5yb3cgKyBcIiBcIiArIG1hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCArIFwiIFwiICsgc2l6ZU1vZHVsZS5zaXplMTQgKyBcIiBcIiArIG1hcmdpbk1vZHVsZTIuaDUgKyBcIiBcIiArIG1hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1XG4gICAgfSwgc2V0dGluZy50aXRsZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0LCB7XG4gICAgICB2YWx1ZTogXCJhc3NldC1cIiArIHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdIHx8IFwibm9uZVwiLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICB9KSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXS5kaXZpZGVyfSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXS5kaXZpZGVyRGVmYXVsdH1gXG4gICAgfSkpO1xuICB9XG5cbn1cblxuY2xhc3MgRGlzY29yZEJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF07XG4gICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXTtcbiAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXTtcbiAgICBsZXQgZXVoTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogcm93TW9kdWxlLnJvdyArIFwiIFwiICsgbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGAke3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuYnV0dG9uV3JhcHBlcilbMF0uYnV0dG9uV3JhcHBlclxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIGNsYXNzOiBgJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH0gJHtldWhNb2R1bGUxLmJ1dHRvbn0gJHtldWhNb2R1bGUxLmxvb2tGaWxsZWR9ICR7ZXVoTW9kdWxlMS5jb2xvckJyYW5kfSAke2V1aE1vZHVsZTEuc2l6ZVNtYWxsfSAke2V1aE1vZHVsZTEuZ3Jvd31gLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmxleDogXCIwIDEgYXV0b1wiXG4gICAgICB9LFxuICAgICAgb25DbGljazogdGhpcy5vbkNsaWNrXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogZXVoTW9kdWxlMS5jb250ZW50c1xuICAgIH0sIHRoaXMucHJvcHMudGl0bGUpKSkpKTtcbiAgfVxuXG59XG5cbmNsYXNzIFJwY1ByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXG4gICAgfTtcbiAgICB0aGlzLnRhYnMgPSBbXTtcbiAgICB0aGlzLnByb3BzLnNldHRpbmdzLnByZXZpZXcgPSB0aGlzO1xuICB9XG5cbiAgY2hhbmdlVGFiKHRhYikge1xuICAgIGxldCBhbmNpZW50VGFiID0gdGhpcy5zdGF0ZS5hY3RpdmU7XG4gICAgaWYgKGFuY2llbnRUYWIgPT09IHRhYi5wcm9wcy5pZCkgcmV0dXJuO1xuICAgIHRoaXMudGFicy5mb3JFYWNoKGUgPT4ge1xuICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIH0pO1xuICAgIHRhYi5zZXRBY3RpdmUodHJ1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhY3RpdmU6IHRhYi5wcm9wcy5pZFxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBwcmV2aWV3ID0gbmV3IHRoaXMucHJldmlldyh7XG4gICAgICBwcmV2aWV3OiB0aGlzXG4gICAgfSk7XG4gICAgcHJldmlldy5zZXRTdGF0ZSh0aGlzLnN0YXRlLnJwYyk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImxjLXRhYldyYXBwZXJcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImxjLXRhYm5hdlwiLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmxleDogXCIwIDEgYXV0b1wiXG4gICAgICB9XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChUYWIsIHtcbiAgICAgIHByZXZpZXc6IHRoaXMsXG4gICAgICB0aXRsZTogXCJGdWxsIFByb2ZpbGVcIixcbiAgICAgIGlkOiBcInByb2ZpbGVcIlxuICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYiwge1xuICAgICAgcHJldmlldzogdGhpcyxcbiAgICAgIHRpdGxlOiBcIlVzZXIgUG9wb3V0XCIsXG4gICAgICBpZDogXCJwb3BvdXRcIlxuICAgIH0pKSwgcHJldmlldy5yZW5kZXIoKSk7XG4gIH1cblxuICBpc0FjdGl2ZSh0YWIpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5hY3RpdmUgPT09IHRhYjtcbiAgfVxuXG4gIGdldCBwcmV2aWV3KCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gXCJwcm9maWxlXCIpIHJldHVybiBQcm9maWxlO1xuICAgIHJldHVybiBQb3BvdXQ7XG4gIH1cblxufVxuXG5jbGFzcyBUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxuICAgIH07XG4gICAgcHJvcHMucHJldmlldy50YWJzLnB1c2godGhpcyk7XG4gIH1cblxuICBzZXRBY3RpdmUoaXNBY3RpdmUpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGFjdGl2ZTogISFpc0FjdGl2ZVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBjbGFzc05hbWUgPSBgbGMtbmF2SXRlbWA7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5hY3RpdmUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1BY3RpdmVgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtSW5hY3RpdmVgO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLnByZXZpZXcuY2hhbmdlVGFiKHRoaXMpO1xuICAgICAgfVxuICAgIH0sIHRoaXMucHJvcHMudGl0bGUpO1xuICB9XG5cbn1cblxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGxldCB1c2VyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwodXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCIpO1xuICAgIGxldCBbcm9vdE1vZHVsZTEsIGZsZXhNb2R1bGUxLCBzdHlsaW5nTW9kdWxlMSwgbmFtZVRhZ01vZHVsZTEsIGFjdGl2aXR5TW9kdWxlMSwgdGV4dE1vZHVsZTEsIHNpemVNb2R1bGUxLCBzY3JvbGxlck1vZHVsZTEsIG5vdGVNb2R1bGUxLCBwcm90aXBNb2R1bGUxLCBjb2xvck1vZHVsZTEsIE1lc3NhZ2VzLCBhdmF0YXJNb2R1bGUxXSA9IFtCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyUG9wb3V0KVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlVc2VyUG9wb3V0KVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRoZW1lR2hvc3RIYWlybGluZUNoYW5uZWxzKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUubm90ZSAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wcm8gJiYgZS5pbmxpbmUpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXMsIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdXTtcbiAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKTtcbiAgICB0aW1lc3RhbXBDbGFzcyA9IHRpbWVzdGFtcENsYXNzIHx8IGFjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXA7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImxjLXVzZXJQb3BvdXRcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLnVzZXJQb3BvdXQsXG4gICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgdGFiaW5kZXg6IFwiLTFcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmhlYWRlclBsYXlpbmdcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtmbGV4TW9kdWxlMS5mbGV4fSAke3N0eWxpbmdNb2R1bGUxLnZlcnRpY2FsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlDZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRvcH1gLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmxleDogXCIxIDEgYXV0b1wiXG4gICAgICB9XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuYXZhdGFyV3JhcHBlck5vcm1hbCxcbiAgICAgIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICB0YWJpbmRleDogXCIwXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBhdmF0YXJNb2R1bGUxLFxuICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBcIjgwcHhcIixcbiAgICAgICAgaGVpZ2h0OiBcIjgwcHhcIlxuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgICAgd2lkdGg6IFwiOTJcIixcbiAgICAgIGhlaWdodDogXCI4MFwiLFxuICAgICAgdmlld0JveDogXCIwIDAgOTIgODBcIixcbiAgICAgIGNsYXNzOiBgJHthdmF0YXJNb2R1bGUxLm1hc2t9ICR7YXZhdGFyTW9kdWxlMS5zdmd9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmb3JlaWduT2JqZWN0XCIsIHtcbiAgICAgIHg6IFwiMFwiLFxuICAgICAgeTogXCIwXCIsXG4gICAgICB3aWR0aDogXCI4MFwiLFxuICAgICAgaGVpZ2h0OiBcIjgwXCIsXG4gICAgICBtYXNrOiBcInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC04MClcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge1xuICAgICAgc3JjOiBhdmF0YXJVUkwsXG4gICAgICBhbHQ6IFwiIFwiLFxuICAgICAgY2xhc3M6IGF2YXRhck1vZHVsZTEuYXZhdGFyXG4gICAgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFN0YXR1cywgbnVsbCkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICB3aWR0aDogXCI4MFwiLFxuICAgICAgaGVpZ2h0OiBcIjgwXCIsXG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuYXZhdGFySGludCxcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDgwIDgwXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9yZWlnbk9iamVjdFwiLCB7XG4gICAgICB4OiBcIjBcIixcbiAgICAgIHk6IFwiMFwiLFxuICAgICAgd2lkdGg6IFwiODBcIixcbiAgICAgIGhlaWdodDogXCI4MFwiLFxuICAgICAgbWFzazogXCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiByb290TW9kdWxlMS5hdmF0YXJIaW50SW5uZXJcbiAgICB9LCBNZXNzYWdlcy5WSUVXX1BST0ZJTEUpKSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiByb290TW9kdWxlMS5oZWFkZXJUZXh0XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnbkNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9YCxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZsZXg6IFwiMSAxIGF1dG9cIlxuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLmhlYWRlclRhZ05vTmlja25hbWV9ICR7bmFtZVRhZ01vZHVsZTEubmFtZVRhZ31gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3M6IGAke25hbWVUYWdNb2R1bGUxLnVzZXJuYW1lfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRhZ1VzZXJuYW1lTm9OaWNrbmFtZX1gXG4gICAgfSwgdXNlci51c2VybmFtZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIFwiI1wiLCB1c2VyLmRpc2NyaW1pbmF0b3IpKSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5VXNlclBvcG91dH0gJHtyb290TW9kdWxlMS5hY3Rpdml0eX1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHtcbiAgICAgIGNsYXNzOiBgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gXG4gICAgfSwgTWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlORyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5ib2R5Tm9ybWFsXG4gICAgfSwgKCgpID0+IHtcbiAgICAgIGlmICghZGF0YVtcImFzc2V0cy5sYXJnZVwiXSkgcmV0dXJuIG51bGw7XG4gICAgICBsZXQgaW1hZ2VzID0gW107XG5cbiAgICAgIGlmIChkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKSB7XG4gICAgICAgIGltYWdlcy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge1xuICAgICAgICAgIGFsdDogXCJcIixcbiAgICAgICAgICBzcmM6IGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgLFxuICAgICAgICAgIGNsYXNzOiBgJHthY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VJbWFnZVVzZXJQb3BvdXR9ICR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXSA/IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZU1hc2tVc2VyUG9wb3V0IDogXCJcIn1gXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbXCJhc3NldHMuc21hbGxcIl0pIHtcbiAgICAgICAgaW1hZ2VzLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7XG4gICAgICAgICAgYWx0OiBcIlwiLFxuICAgICAgICAgIHNyYzogYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2AsXG4gICAgICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNTbWFsbEltYWdlVXNlclBvcG91dFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNcbiAgICAgIH0sIGltYWdlcyk7XG4gICAgfSkoKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmNvbnRlbnRJbWFnZXNVc2VyUG9wb3V0LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmxleDogXCIxIDEgYXV0b1wiXG4gICAgICB9XG4gICAgfSwgKCgpID0+IHtcbiAgICAgIGlmICghZGF0YS5uYW1lKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge1xuICAgICAgICBjbGFzczogYCR7YWN0aXZpdHlNb2R1bGUxLm5hbWVOb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTR9YCxcbiAgICAgICAgdGl0bGU6IGRhdGEubmFtZVxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZVxuICAgICAgfSwgZGF0YS5uYW1lKSk7XG4gICAgfSkoKSwgKCgpID0+IHtcbiAgICAgIGlmICghZGF0YS5kZXRhaWxzKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICAgIGNsYXNzOiBhY3Rpdml0eU1vZHVsZTEuZGV0YWlsc1xuICAgICAgfSwgZGF0YS5kZXRhaWxzKTtcbiAgICB9KSgpLCAoKCkgPT4ge1xuICAgICAgaWYgKCFkYXRhLnN0YXRlKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5zdGF0ZVxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICB0aXRsZTogZGF0YS5zdGF0ZVxuICAgICAgfSwgZGF0YS5zdGF0ZSkpO1xuICAgIH0pKCksICgoKSA9PiB7XG4gICAgICBpZiAoIWRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdKSByZXR1cm4gbnVsbDtcbiAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0aW1lQ29tcG9uZW50LCB7XG4gICAgICAgIHRpbWVzdGFtcHM6IHtcbiAgICAgICAgICBlbmQ6IG51bGwsXG4gICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KSgpKSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtyb290TW9kdWxlMS5ib2R5fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdEhhaXJsaW5lfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcn0gJHtyb290TW9kdWxlMS5ib2R5SW5uZXJ9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmJvZHlUaXRsZVxuICAgIH0sIE1lc3NhZ2VzLk5PVEUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtub3RlTW9kdWxlMS5ub3RlfSAke3Jvb3RNb2R1bGUxLm5vdGV9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICBwbGFjZWhvbGRlcjogTWVzc2FnZXMuTk9URV9QTEFDRUhPTERFUixcbiAgICAgIG1heGxlbmd0aDogXCIyNTZcIixcbiAgICAgIGF1dG9jb3JyZWN0OiBcIm9mZlwiLFxuICAgICAgY2xhc3M6IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBoZWlnaHQ6IFwiMzZweFwiXG4gICAgICB9LFxuICAgICAgZGlzYWJsZWQ6IHRydWVcbiAgICB9KSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuZm9vdGVyXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7cm9vdE1vZHVsZTEucHJvdGlwfSAke3Byb3RpcE1vZHVsZTEuaW5saW5lfWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge1xuICAgICAgY2xhc3M6IGAke3Byb3RpcE1vZHVsZTEucHJvfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWAsXG4gICAgICBzdHlsZToge1xuICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiXG4gICAgICB9XG4gICAgfSwgTWVzc2FnZXMuUElOTkVEX01FU1NBR0VTX1BST19USVApLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtjb2xvck1vZHVsZTEuY29sb3JTdGFuZGFyZH0gJHtzaXplTW9kdWxlMS5zaXplMTR9ICR7cHJvdGlwTW9kdWxlMS50aXB9YFxuICAgIH0sIE1lc3NhZ2VzLkNPTlRFWFRfTUVOVV9ISU5UKSkpKSk7XG4gIH1cblxufVxuXG5jbGFzcyBTdGF0dXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IHN0YXR1cyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFByZXNlbmNlKVswXS5kZWZhdWx0LmdldFByZXNlbmNlKCkuc3RhdHVzO1xuICAgIGlmIChzdGF0dXMgPT09IFwiaW52aXNpYmxlXCIpIHN0YXR1cyA9IFwib2ZmbGluZVwiO1xuICAgIGxldCBjbGFzc05hbWUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgICB3aWR0aDogXCIxNlwiLFxuICAgICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgICB4OiBcIjYwXCIsXG4gICAgICB5OiBcIjYwXCIsXG4gICAgICBmaWxsOiBcIiNmZmZmZmZcIixcbiAgICAgIG1hc2s6IGB1cmwoI3N2Zy1tYXNrLXN0YXR1cy0ke3N0YXR1c30pYCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgfSk7XG4gIH1cblxufVxuXG5sZXQgdGltZXN0YW1wQ2xhc3MgPSBcIlwiO1xuXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGxldCB1c2VyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwodXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCIpO1xuICAgIGxldCBbZmxleE1vZHVsZTEsIHN0eWxpbmdNb2R1bGUxLCByb290TW9kdWxlMSwgYXZhdGFyTW9kdWxlMSwgbmFtZVRhZ01vZHVsZTEsIGFjdGl2aXR5TW9kdWxlMSwgdGV4dE1vZHVsZTEsIHNpemVNb2R1bGUxLCBzY3JvbGxlck1vZHVsZTEsIG5vdGVNb2R1bGUxLCBNZXNzYWdlc10gPSBbQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlQcm9maWxlKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyRmFkZSlbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vdGUgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXNdO1xuICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpO1xuICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcDtcbiAgICByZXR1cm4gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImxjLXRhYlwiXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS52ZXJ0aWNhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25TdHJldGNofSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5yb290fWAsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4OiBcIjEgMSBhdXRvXCJcbiAgICAgIH1cbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiByb290TW9kdWxlMS50b3BTZWN0aW9uUGxheWluZ1xuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoZWFkZXJcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmhlYWRlclxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YCxcbiAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICB3aWR0aDogXCI4MHB4XCIsXG4gICAgICAgIGhlaWdodDogXCI4MHB4XCJcbiAgICAgIH1cbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICAgIHdpZHRoOiBcIjkyXCIsXG4gICAgICBoZWlnaHQ6IFwiODBcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDkyIDgwXCIsXG4gICAgICBjbGFzczogYCR7YXZhdGFyTW9kdWxlMS5tYXNrfSAke2F2YXRhck1vZHVsZTEuc3ZnfWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9yZWlnbk9iamVjdFwiLCB7XG4gICAgICB4OiBcIjBcIixcbiAgICAgIHk6IFwiMFwiLFxuICAgICAgd2lkdGg6IFwiODBcIixcbiAgICAgIGhlaWdodDogXCI4MFwiLFxuICAgICAgbWFzazogXCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtcbiAgICAgIHNyYzogYXZhdGFyVVJMLFxuICAgICAgYWx0OiBcIiBcIixcbiAgICAgIGNsYXNzOiBhdmF0YXJNb2R1bGUxLmF2YXRhclxuICAgIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChTdGF0dXMsIG51bGwpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLmhlYWRlckluZm99YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLm5hbWVUYWd9ICR7bmFtZVRhZ01vZHVsZTEubmFtZVRhZ31gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLnVzZXJuYW1lfSAke3Jvb3RNb2R1bGUxLnVzZXJuYW1lfWBcbiAgICB9LCB1c2VyLnVzZXJuYW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmRpc2NyaW1pbmF0b3JcbiAgICB9LCBcIiNcIiwgdXNlci5kaXNjcmltaW5hdG9yKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25TdHJldGNofSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5wcm9maWxlQmFkZ2VzfWAsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4OiBcIjEgMSBhdXRvXCJcbiAgICAgIH1cbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KEJhZGdlcywgbnVsbCkpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmhlYWRlckZpbGxcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHthY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlQcm9maWxlfSAke3Jvb3RNb2R1bGUxLmFjdGl2aXR5fWBcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge1xuICAgICAgY2xhc3M6IGAke2FjdGl2aXR5TW9kdWxlMS5oZWFkZXJUZXh0Tm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWBcbiAgICB9LCBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX0hFQURFUl9QTEFZSU5HKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmJvZHlOb3JtYWxcbiAgICB9LCAoKCkgPT4ge1xuICAgICAgaWYgKCFkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKSByZXR1cm4gbnVsbDtcbiAgICAgIGxldCBpbWFnZXMgPSBbXTtcblxuICAgICAgaWYgKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pIHtcbiAgICAgICAgaW1hZ2VzLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7XG4gICAgICAgICAgYWx0OiBcIlwiLFxuICAgICAgICAgIHNyYzogYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMubGFyZ2VcIl19LnBuZ2AsXG4gICAgICAgICAgY2xhc3M6IGAke2FjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZUltYWdlUHJvZmlsZX0gJHtkYXRhW1wiYXNzZXRzLnNtYWxsXCJdID8gYWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlTWFza1Byb2ZpbGUgOiBcIlwifWBcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSkge1xuICAgICAgICBpbWFnZXMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtcbiAgICAgICAgICBhbHQ6IFwiXCIsXG4gICAgICAgICAgc3JjOiBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXX0ucG5nYCxcbiAgICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmFzc2V0c1NtYWxsSW1hZ2VQcm9maWxlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLmFzc2V0c1xuICAgICAgfSwgaW1hZ2VzKTtcbiAgICB9KSgpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBhY3Rpdml0eU1vZHVsZTEuY29udGVudEltYWdlc1Byb2ZpbGUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4OiBcIjEgMSBhdXRvXCJcbiAgICAgIH1cbiAgICB9LCAoKCkgPT4ge1xuICAgICAgaWYgKCFkYXRhLm5hbWUpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7XG4gICAgICAgIGNsYXNzOiBgJHthY3Rpdml0eU1vZHVsZTEubmFtZU5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxNH1gLFxuICAgICAgICB0aXRsZTogZGF0YS5uYW1lXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzOiBhY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlOYW1lXG4gICAgICB9LCBkYXRhLm5hbWUpKTtcbiAgICB9KSgpLCAoKCkgPT4ge1xuICAgICAgaWYgKCFkYXRhLmRldGFpbHMpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcbiAgICAgICAgY2xhc3M6IGFjdGl2aXR5TW9kdWxlMS5kZXRhaWxzXG4gICAgICB9LCBkYXRhLmRldGFpbHMpO1xuICAgIH0pKCksICgoKSA9PiB7XG4gICAgICBpZiAoIWRhdGEuc3RhdGUpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogYWN0aXZpdHlNb2R1bGUxLnN0YXRlXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIHRpdGxlOiBkYXRhLnN0YXRlXG4gICAgICB9LCBkYXRhLnN0YXRlKSk7XG4gICAgfSkoKSwgKCgpID0+IHtcbiAgICAgIGlmICghZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl0pIHJldHVybiBudWxsO1xuICAgICAgbGV0IHRpbWVDb21wb25lbnQgPSB0aW1lc3RhbXBSZW5kZXIoVGltZXN0YW1wLCBNZXNzYWdlcyk7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBhY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcbiAgICAgICAgdGltZXN0YW1wczoge1xuICAgICAgICAgIGVuZDogbnVsbCxcbiAgICAgICAgICBzdGFydDogZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pKCkpKSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuYm9keVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZX1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEudXNlckluZm9TZWN0aW9uXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEudXNlckluZm9TZWN0aW9uSGVhZGVyXG4gICAgfSwgTWVzc2FnZXMuTk9URSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke3Jvb3RNb2R1bGUxLm5vdGV9ICR7bm90ZU1vZHVsZTEubm90ZX1gXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIsIHtcbiAgICAgIHBsYWNlaG9sZGVyOiBNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSLFxuICAgICAgbWF4bGVuZ3RoOiBcIjI1NlwiLFxuICAgICAgYXV0b2NvcnJlY3Q6IFwib2ZmXCIsXG4gICAgICBjbGFzczogQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF0uc2Nyb2xsYmFyR2hvc3RIYWlybGluZSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGhlaWdodDogXCI0MHB4XCJcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgIH0pKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29ubmVjdGVkQWNjb3VudHMsIG51bGwpKSkpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwibGMtIFwiXG4gICAgfSldO1xuICB9XG5cbn1cblxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudHMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IGFjY291bnRzID0gW107XG4gICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF07XG4gICAgbGV0IEFjY291bnRNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0QWNjb3VudHMpWzBdLmRlZmF1bHQ7XG4gICAgbGV0IGFjY3MgPSBBY2NvdW50TW9kdWxlMS5nZXRBY2NvdW50cygpLmZpbHRlcihlID0+IGUudmlzaWJpbGl0eSA9PT0gMSk7XG5cbiAgICBmb3IgKGxldCBhY2Mgb2YgYWNjcykge1xuICAgICAgYWNjb3VudHMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KENvbm5lY3RlZEFjY291bnQsIHtcbiAgICAgICAgYWNjOiBhY2NcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjb3VudHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogcm9vdE1vZHVsZTEudXNlckluZm9TZWN0aW9uXG4gICAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRzXG4gICAgICB9LCBhY2NvdW50cykpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgW2ZsZXhNb2R1bGUxLCBzdHlsaW5nTW9kdWxlMSwgcm9vdE1vZHVsZTEsIGZsb3dlck1vZHVsZTEsIGFuY2hvck1vZHVsZTEsIFNvY2lhbENvbnN0YW50c10gPSBbQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuYW5jaG9yKVswXSwgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0ICYmIGUuZGVmYXVsdC5tYXApWzBdLmRlZmF1bHRdO1xuICAgIGxldCBhY2MgPSB0aGlzLnByb3BzLmFjYztcbiAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGAke2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YCxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZsZXg6IFwiMCAxIGF1dG9cIlxuICAgICAgfVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge1xuICAgICAgYWx0OiBgTG9nbyAke2NvbnN0YW50c1NvY2lhbC5uYW1lfWAsXG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudEljb24sXG4gICAgICBzcmM6IGNvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXlcbiAgICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogcm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWVJbm5lclxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lXG4gICAgfSwgYWNjLm5hbWUpLCBhY2MudmVyaWZpZWQgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHtmbG93ZXJNb2R1bGUxLmZsb3dlclN0YXJDb250YWluZXJ9ICR7cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudFZlcmlmaWVkSWNvbn1gLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6IFwiMTZweFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTZweFwiXG4gICAgICB9XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICBjbGFzczogZmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyLFxuICAgICAgd2lkdGg6IFwiMTZcIixcbiAgICAgIGhlaWdodDogXCIxNlwiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTYgMTUuMlwiXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgZmlsbDogXCIjNGY1NDVjXCIsXG4gICAgICBcImZpbGwtcnVsZVwiOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwiXG4gICAgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBmbG93ZXJNb2R1bGUxLmNoaWxkQ29udGFpbmVyXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICB3aWR0aDogXCIxNlwiLFxuICAgICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNS4yXCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICBkOiBcIk03LjQsMTEuMTcsNCw4LjYyLDUsNy4yNmwyLDEuNTNMMTAuNjQsNGwxLjM2LDFaXCIsXG4gICAgICBmaWxsOiBcIiNmZmZmZmZcIlxuICAgIH0pKSkpKSA6IG51bGwpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7XG4gICAgICBjbGFzczogYCR7YW5jaG9yTW9kdWxlMS5hbmNob3J9ICR7YW5jaG9yTW9kdWxlMS5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsXG4gICAgICByZWw6IFwibm9yZWZlcnJlciBub29wZW5lclwiLFxuICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgcm9sZTogXCJidXR0b25cIixcbiAgICAgIHRhYmluZGV4OiBcIjBcIlxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRPcGVuSWNvbixcbiAgICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgICBoZWlnaHQ6IFwiMjRcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgZDogXCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiXG4gICAgfSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICBkOiBcIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCJcbiAgICB9KSkpKTtcbiAgfVxuXG59XG5cbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKCk7XG4gICAgbGV0IHJvb3RNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXTtcbiAgICBsZXQgVXNlckZsYWdzID0gQkRNb2R1bGVzLmdldChlID0+IGUuVXNlckZsYWdzKVswXS5Vc2VyRmxhZ3M7XG4gICAgbGV0IGJhZGdlcyA9IFtdO1xuICAgIGxldCBzZXJpYWxpemVkID0gW107XG5cbiAgICBmb3IgKGxldCBmbGFnTmFtZSBpbiBVc2VyRmxhZ3MpIHtcbiAgICAgIGlmICh1c2VyLmhhc0ZsYWcoVXNlckZsYWdzW2ZsYWdOYW1lXSkpIHNlcmlhbGl6ZWQucHVzaChmbGFnTmFtZSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgZmxhZ05hbWUgb2Ygc2VyaWFsaXplZCkge1xuICAgICAgbGV0IHNlYXJjaGFibGUgPSBgcHJvZmlsZUJhZGdlJHtmbGFnTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywgXCIgXCIpLnNwbGl0KFwiIFwiKS5tYXAoZSA9PiBlWzBdLnRvVXBwZXJDYXNlKCkgKyBlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWA7XG4gICAgICBzZWFyY2hhYmxlID0gc2VhcmNoYWJsZS5yZXBsYWNlKFwiSHlwZXNxdWFkT25saW5lXCIsIFwiSHlwZVNxdWFkT25saW5lXCIpO1xuICAgICAgaWYgKCFyb290TW9kdWxlW3NlYXJjaGFibGVdKSBjb250aW51ZTtcbiAgICAgIGJhZGdlcy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2UsIHtcbiAgICAgICAgbmFtZTogc2VhcmNoYWJsZVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24pIHtcbiAgICAgIGJhZGdlcy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2UsIHtcbiAgICAgICAgbmFtZTogXCJwcm9maWxlQmFkZ2VQcmVtaXVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFkZ2VzO1xuICB9XG5cbn1cblxuY2xhc3MgQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF07XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IHJvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZVdyYXBwZXJcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiXCIsXG4gICAgICByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgdGFiaW5kZXg6IFwiMFwiXG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzczogYCR7cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlfSAke3Jvb3RNb2R1bGUxW3RoaXMucHJvcHMubmFtZV19YFxuICAgIH0pKSkpO1xuICB9XG5cbn1cblxuY2xhc3MgVGltZXN0YW1wIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogdGltZXN0YW1wQ2xhc3NcbiAgICB9LCB0aGlzLnByb3BzLm1lc3NhZ2UpO1xuICB9XG5cbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/presenceSettings.jsx\n"); /***/ }), diff --git a/BetterDiscordApp/src/0globals.js b/BetterDiscordApp/src/0globals.js index 0eace47..9fd52f0 100644 --- a/BetterDiscordApp/src/0globals.js +++ b/BetterDiscordApp/src/0globals.js @@ -4,12 +4,12 @@ export const currentDiscordVersion = (window.DiscordNative && window.DiscordNati export const minSupportedVersion = "0.3.0"; export const bbdVersion = "0.3.4"; export const bbdChangelog = { - description: "LightCord Edition.", + description: "Lightcord Edition.", changes: [ { title: "What's New?", items: [ - "**LightCord** is now using BandagedBD. That means all plugins you were using can be used too !", + "**Lightcord** is now using BandagedBD. That means all plugins you were using can be used too !", "**Window Transparency** changes were made to more compatible with external window managers and addons like Glasscord.", "Initialization sequence has once again been changed slightly to hopefully improve loading times.", "We removed emotes. That's sad for people who were actually using it, but it was leading to more loading time and some basic words were emote." @@ -53,7 +53,7 @@ export const settings = { "Copy Selector": {id: "fork-dm-1", info: "Adds a \"Copy Selector\" option to context menus when developer mode is active", implemented: true, hidden: false, cat: "core", category: "developer settings"}, "React DevTools": {id: "reactDevTools", info: "Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.", implemented: true, hidden: true, cat: "core", category: "developer settings"}, - /** LightCord */ + /** Lightcord */ "Disable BetterDiscord": {id: "bd-disable", info: "Disable Betterdiscord (plugins, themes, etc).", implemented: false, hidden: false, cat: "lightcord", category: "Lightcord"}, "Blur Personnal Informations":{id: "lightcord-6", info: "Blur sensitive informations like email, payment infos and more.", implemented: true, hidden: false, cat: "lightcord", category: "Lightcord"}, "Calling Ring Beat": {id: "lightcord-2", info: "Enable Discord's special calling beat.", implemented: true, hidden: false, cat: "lightcord", category: "Lightcord"}, diff --git a/BetterDiscordApp/src/modules/DiscordCrypt.js b/BetterDiscordApp/src/modules/DiscordCrypt.js new file mode 100644 index 0000000..f23e86c --- /dev/null +++ b/BetterDiscordApp/src/modules/DiscordCrypt.js @@ -0,0 +1,68 @@ +/** + * Based on DiscordCrypt https://github.com/leogx9r/DiscordCrypt + */ + +import { readFileSync } from "fs" +import { join } from "path" +import Utils from "./utils" + + +let searchModule = BDModules.get(e => e.search)[0] +export default new class DiscordCrypt { + constructor(){ + if(!searchModule)searchModule = BDModules.get(e => e.search)[0] + this.searchUiClass = Utils.removeDa(`.${searchModule.search} .${searchModule.searchBar}`) + } +} + +const Constants = { + ENCODED_MESSAGE_HEADER: "⢷⢸⢹⢺", + ENCODED_KEY_HEADER: "⢻⢼⢽⢾", + ENCRYPT_PARAMETER: Buffer.from('DiscordCrypt KEY GENERATION PARAMETER'), + AUTH_TAG_PARAMETER: new Uint8Array(Buffer.from('discordCrypt MAC')), + PRIMARY_KEY_PARAMETER: new Uint8Array(Buffer.from('discordCrypt-primary-secret')), + SECONDARY_KEY_PARAMETER: new Uint8Array(Buffer.from('discordCrypt-secondary-secret')), + KEY_IGNORE_TIMEOUT: 60 * 1000, + KEY_DELETE_TIMEOUT: 5, + ENCRYPT_MODES: [ + /* Blowfish(Blowfish, AES, Camellia, IDEA, TripleDES) */ + 0, 1, 2, 3, 4, + /* AES(Blowfish, AES, Camellia, IDEA, TripleDES) */ + 5, 6, 7, 8, 9, + /* Camellia(Blowfish, AES, Camellia, IDEA, TripleDES) */ + 10, 11, 12, 13, 14, + /* IDEA(Blowfish, AES, Camellia, IDEA, TripleDES) */ + 15, 16, 17, 18, 19, + /* TripleDES(Blowfish, AES, Camellia, IDEA, TripleDES) */ + 20, 21, 22, 23, 24 + ], + ENCRYPT_BLOCK_MODES: [ + 'CBC', /* Cipher Block-Chaining */ + 'CFB', /* Cipher Feedback Mode */ + 'OFB', /* Output Feedback Mode */ + ], + PADDING_SCHEMES: [ + 'PKC7', /* PKCS #7 */ + 'ANS2', /* ANSI X.923 */ + 'ISO1', /* ISO-10126 */ + 'ISO9', /* ISO-97972 */ + ], + UP1_FILE_HOST: 'https://pastebin.synalabs.hosting', + UP1_FILE_HOST_API_KEY: '4034a170b4517897238b58ecbe902dee187bf890', + ED25519_SIGNING_KEY: 'GTs+VoJSQC6e0GDTVRcskIVBhdqphUwqwrxqp64gXEQ=', + UNLOCK_ICON: "PHN2ZyBjbGFzcz0iZGMtc3ZnIiBmaWxsPSJsaWdodGdyZXkiIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAwI" + + "DI0IDI0IiB3aWR0aD0iMjBweCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMTdjMS4xI" + + "DAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgN" + + "yA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAyd" + + "jEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvc" + + "GF0aD48L3N2Zz4=", + LOCK_ICON: "PHN2ZyBjbGFzcz0iZGMtc3ZnIiBmaWxsPSJsaWdodGdyZXkiIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAwIDI" + + "0IDI0IiB3aWR0aD0iMjBweCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48cGF0aCBkPSJNMCAwaDI" + + "0djI0SDBWMHoiIGlkPSJhIi8+PC9kZWZzPjxjbGlwUGF0aCBpZD0iYiI+PHVzZSBvdmVyZmxvdz0idmlzaWJsZSIgeGxpbms6aHJ" + + "lZj0iI2EiLz48L2NsaXBQYXRoPjxwYXRoIGNsaXAtcGF0aD0idXJsKCNiKSIgZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0" + + "yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTI" + + "gLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6TTguOSA2YzAtMS43MSA" + + "xLjM5LTMuMSAzLjEtMy4xczMuMSAxLjM5IDMuMSAzLjF2Mkg4LjlWNnpNMTggMjBINlYxMGgxMnYxMHoiLz48L3N2Zz4=", + DICEWARE_WORD_LIST: readFileSync(join(__dirname, "..", "assets", "diceware.list"), "utf8").split( '\r' ).join( '' ).split( '\n' ), + BLACKLISTED_GUILDS: JSON.parse(readFileSync(join(__dirname, "..", "assets", "blacklist.json"))) +} \ No newline at end of file diff --git a/BetterDiscordApp/src/modules/blurPrivate.js b/BetterDiscordApp/src/modules/blurPrivate.js index fd42681..f73c215 100644 --- a/BetterDiscordApp/src/modules/blurPrivate.js +++ b/BetterDiscordApp/src/modules/blurPrivate.js @@ -3,8 +3,10 @@ */ import DOMTools from "./domtools" +import Utils from "./utils" let selectors +const removeDa = Utils.removeDa function getSelectors(){ let standardSidebarView = BDModules.get(e => e.standardSidebarView)[0] if(!standardSidebarView)return null @@ -15,10 +17,6 @@ function getSelectors(){ selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.userSettingsAccount)[0].userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${removeDa(BDModules.get(e => e.viewBody)[0].viewBody)}`) return selects } -function removeDa(className){ - if(!className)return className - return className.split(" ").filter(e => !e.startsWith("da-")).join(" ") -} export default new class BlurPrivate { constructor(){ diff --git a/BetterDiscordApp/src/modules/core.js b/BetterDiscordApp/src/modules/core.js index d193a91..f4296ab 100644 --- a/BetterDiscordApp/src/modules/core.js +++ b/BetterDiscordApp/src/modules/core.js @@ -106,7 +106,7 @@ Core.prototype.init = async function() { DataStore.setBDData("version", bbdVersion); } - await EmojiModule.init() + const emojiModule = EmojiModule Utils.suppressErrors(this.patchSocial.bind(this), "BD Social Patch")(); Utils.suppressErrors(this.patchGuildPills.bind(this), "BD Guild Pills Patch")(); diff --git a/BetterDiscordApp/src/modules/emojiModule.js b/BetterDiscordApp/src/modules/emojiModule.js index 548fb67..08fa71d 100644 --- a/BetterDiscordApp/src/modules/emojiModule.js +++ b/BetterDiscordApp/src/modules/emojiModule.js @@ -2,6 +2,7 @@ import {bdConfig, settingsCookie} from "../0globals"; import DataStore from "./dataStore"; import BDV2 from "./v2"; import Utils from "./utils"; +//import DiscordCrypt from "./DiscordCrypt"; const Constants = { EmojiRegex: //g @@ -9,218 +10,222 @@ const Constants = { let CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0] let EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0] -let AutocompleteModule = BDModules.get(e => e.default && e.default.displayName === "Autocomplete") +let AutocompleteModule = BDModules.get(e => e.default && e.default.displayName === "Autocomplete")[0] +let AutoCompletionTemplates = BDModules.get(e => e.getAutocompleteOptions)[0] +let EmojiModuleQuery = BDModules.get(e => e.default && e.default.queryEmojiResults)[0] +let Messages = BDModules.get(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING)[0] +let guildModule = BDModules.get(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching)[0] +let emojiSearch = BDModules.get(e => e.default && e.default.getDisambiguatedEmojiContext) export default new class EmojiModule { - constructor(){} + constructor(){ + this.init() + } async init(){ + if(!AutocompleteModule)AutocompleteModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.displayName === "Autocomplete") + if(!AutoCompletionTemplates)AutoCompletionTemplates = await window.Lightcord.Api.ensureExported(e => e.getAutocompleteOptions) + if(!EmojiModuleQuery)EmojiModuleQuery = await window.Lightcord.Api.ensureExported(e => e.default && e.default.queryEmojiResults) + if(!Messages)Messages = await window.Lightcord.Api.ensureExported(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING) + if(!guildModule)guildModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching) + if(!emojiSearch)emojiSearch = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getDisambiguatedEmojiContext) + if(true /** AutocompleteModule && AutoCompletionTemplates && EmojiModuleQuery && Messages && guildModule && emojiSearch */){/* + if(!this.cancelAutocompleteRender){ + this.cancelAutocompleteRender = Utils.monkeyPatch(AutocompleteModule, "default", { + + }) + }*/ + console.log(`Patching getAutocompleteOptions of AutoCompletionTemplates`, AutoCompletionTemplates) + const getAutocompleteOptions = AutoCompletionTemplates.getAutocompleteOptions + AutoCompletionTemplates.getAutocompleteOptions = function(e, t, n, r, a){ + const value = getAutocompleteOptions.call(this, ...arguments) + value.LIGHTCORD_EMOJIS = { + matches(arg1, arg2){ + let condition = arg2.length > 1 && "." === arg1 + setEmojiUsable(condition) + return condition + }, + queryResults(t){ + let results = EmojiModuleQuery.default.queryEmojiResults(t, e) + return results + }, + renderResults(e, t, n, r, a){ + return D(e, t, a.emojis, n, r, Messages.default.Messages.EMOJI_MATCHING, Messages.default.Messages.EMOJI, AutocompleteModule.default.Emoji, (function(e) { + return { + emoji: e, + key: e.id || e.uniqueName || e.name, + sentinel: ".", + guild: null != e.guildId ? guildModule.default.getGuild(e.guildId) : null + } + }), (function(e) { + return "." + e + "." + })) + }, + getPlainText(id, emojis){ + var emojis = emojis.emojis; + return null == emojis || null == emojis[id] ? "" : "." + emojis[id].name + "." + }, + getRawText(id, guild){ + var emojis = guild.emojis; + if (null == emojis || null == emojis[id]) return ""; + var emoji = emojis[id], + isAnimated = emoji.animated ? "a" : ""; + return emoji.managed || null == emoji.id ? "." + emoji.name + "." : "<" + isAnimated + "." + (emoji.originalName || emoji.name) + "." + emoji.id + ">" + } + } + return value + } + }else{ + console.error(new Error("Couldn't start autocompletion of Lightcord's emojis.")) + } + while (!BDV2.MessageComponent) await new Promise(resolve => setTimeout(resolve, 100)); - if (this.cancelEmojiRender) return; - this.cancelEmoteRender = Utils.monkeyPatch(BDV2.MessageComponent, "default", {before: (data) => { - const message = Utils.getNestedProp(data.methodArguments[0], "childrenMessageContent.props.message") - if(!message)return - const content = Utils.getNestedProp(data.methodArguments[0], "childrenMessageContent.props.content") - if(!content || !content.length)return - - /** - * @type {{ - * raw: string, - * name: string, - * id: string, - * animated: boolean - * }[]} - */ - let emojis = [] - - const newContent = [] - for(let node of content){ - if (typeof(node) !== "string") { - newContent.push(node) - continue - }; - let parsed; - let hasParsed = false + if (!this.cancelEmojiRender){ + this.cancelEmoteRender = Utils.monkeyPatch(BDV2.MessageComponent, "default", {before: (data) => { + const message = Utils.getNestedProp(data.methodArguments[0], "childrenMessageContent.props.message") + if(!message)return + const content = Utils.getNestedProp(data.methodArguments[0], "childrenMessageContent.props.content") + if(!content || !content.length)return - do { - parsed = Constants.EmojiRegex.exec(node); - if (parsed) { - hasParsed = true - if(!EmojiModuleApi)EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0] - const emoji = EmojiModuleApi.default.getCustomEmojiById(parsed[2]) - if(emoji){ - emojis.push({ - animated: emoji.animated, - name: emoji.name, - id: emoji.id, - raw: parsed[0] - }) - }else{ - emojis.push({ - animated: parsed[0].startsWith(" { - if(!word)return "" - const emoji = emojis.find(e => e.raw == word) - if(!emoji)return word - if(!CustomEmojiModule)CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0] - return React.createElement(CustomEmojiModule.CustomEmoji, { - emoji: { - name: `.${emoji.name}.`, - emojiId: emoji.id, - animated: emoji.animated, - jumboable: arr.length === 1 && content.length === 1 + // content = DiscordCrypt.decryptContent(content) + + /** + * @type {{ + * raw: string, + * name: string, + * id: string, + * animated: boolean + * }[]} + */ + let emojis = [] + + const newContent = [] + for(let node of content){ + if (typeof(node) !== "string") { + newContent.push(node) + continue + }; + let parsed; + let hasParsed = false + + do { + parsed = Constants.EmojiRegex.exec(node); + if (parsed) { + hasParsed = true + if(!EmojiModuleApi)EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0] + const emoji = EmojiModuleApi.default.getCustomEmojiById(parsed[2]) + if(emoji){ + emojis.push({ + animated: emoji.animated, + name: emoji.name, + id: emoji.id, + raw: parsed[0] + }) + }else{ + emojis.push({ + animated: parsed[0].startsWith(" { - if(previous.length === 0)return [current] - if(typeof current === "string"){ - if(typeof previous[previous.length - 1] === "string"){ - previous[previous.length - 1] += ` ${current}` + } + } while (parsed); + + if(hasParsed){ + const words = node.split(" ").map((word, index, arr) => { + if(!word)return "" + const emoji = emojis.find(e => e.raw == word) + if(!emoji)return word + if(!CustomEmojiModule)CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0] + return React.createElement(CustomEmojiModule.CustomEmoji, { + emoji: { + name: `.${emoji.name}.`, + emojiId: emoji.id, + animated: emoji.animated, + jumboable: arr.length === 1 && content.length === 1 + } + }) + }).reduce((previous, current) => { + if(previous.length === 0)return [current] + if(typeof current === "string"){ + if(typeof previous[previous.length - 1] === "string"){ + previous[previous.length - 1] += ` ${current}` + return previous + } + previous.push(" "+current) return previous } - previous.push(" "+current) + previous.push(" ", current) return previous - } - previous.push(" ", current) - return previous - }, []) - newContent.push(...words) - }else{ - newContent.push(node) + }, []) + newContent.push(...words) + }else{ + newContent.push(node) + } } - } - while(data.methodArguments[0].childrenMessageContent.props.content[0]){ - data.methodArguments[0].childrenMessageContent.props.content.shift() - } - while(newContent[0]){ - data.methodArguments[0].childrenMessageContent.props.content.push(newContent.shift()) - } - }}); - - if(!AutocompleteModule)AutocompleteModule = BDModules.get(e => e.default && e.default.displayName === "Autocomplete") + while(data.methodArguments[0].childrenMessageContent.props.content[0]){ + data.methodArguments[0].childrenMessageContent.props.content.shift() + } + while(newContent[0]){ + data.methodArguments[0].childrenMessageContent.props.content.push(newContent.shift()) + } + }}); + } } disable(){ - if (this.cancelEmoteRender) return; + if (!this.cancelEmoteRender) return; this.cancelEmoteRender(); this.cancelEmoteRender = null; } } -/* -let loadImageModule = BDModules.get(e => e.loadImage)[0] -let getEmojiModule = BDModules.get(e => e.default && e.default.getEmojiURL)[0] -class Emoji extends React.PureComponent { - constructor(props){ - super(props) - this.state = { - hover: false - } - this.key = undefined - this.cancelLoadImage = null - this.onError = function() { - } - } - - onError() { - var src = this.getSrc(); - if(src !== null){ - if(!loadImageModule)loadImageModule = BDModules.get(e => e.loadImage)[0] // lazy load - this.cancelLoadImage = loadImageModule.loadImage(src, (e) => { - if(!e){ - this.key = Date.now() - this.forceUpdate() - } - }) - } - } - - onMouseEnter(ev) { - this.setState({ - hover: true - }); - var onMouseEnter = this.props.onMouseEnter; - if(onMouseEnter)onMouseEnter(ev) - } - - onMouseLeave(ev) { - this.setState({ - hover: false - }); - var onMouseLeave = t.props.onMouseLeave; - if(onMouseLeave)onMouseLeave(ev) - } - - - componentWillUnmount() { - if(this.cancelLoadImage)this.cancelLoadImage() - } - - getSrc(defaultProps) { - if(!defaultProps)defaultProps = this.props - const props = defaultProps - const src = props.src - const emojiId = props.emojiId - const emojiName = props.emojiName - const animated = props.animated - const shouldAnimate = props.shouldAnimate - const isFocused = props.isFocused - const hover = this.state.hover - - if(src)return src - if(emojiId){ - if(!getEmojiModule)getEmojiModule = BDModules.get(e => e.default && e.default.getEmojiURL)[0] - return getEmojiModule.default.getEmojiURL({ - id: emojiId, - animated: isFocused && animated && (shouldAnimate || hover) - }) - } - return undefined - } - - render() { - var props = this.props, - emojiName = props.emojiName, - animated = props.animated, - jumboable = props.jumboable, - imgProps = { - - }(props.shouldAnimate, props.isFocused, props.emojiId, props.autoplay, y(props, ["emojiName", "animated", "className", "jumboable", "shouldAnimate", "isFocused", "emojiId", "autoplay"])), - src = this.getSrc(); - if(src){ - return React.createElement("img", Object.assign({}, imgProps, { - key: this.key, - src, - alt: emojiName || undefined, - draggable: false - }, animated ? { - onMouseEnter: this.onMouseEnter, - onMouseLeave: this.onMouseLeave - } : {}, { - className: `emoji${jumboable ? " jumboable" : ""}`, - onError: this.onError - })) - } - return React.createElement("span", { - className: "emoji emoji-text" - }, undefined, emojiName) - } +function D(e, t, n, r, o, i, s, u, l, c) { + if (null == n || 0 === n.length) return null; + var d = n.map((function(e, n) { + return React.createElement(u, Object.assign({ + onClick: o, + onHover: r, + selected: t === n, + index: n + }, l(e, n))) + })); + return [R(i, s, e, c), d] } -Emoji.displayName = "Emoji"; -function createEmojiComponent(){ - return React.createElement(Emoji, Object.assign({}, t, { - shouldAnimate: t.animated - })) -}*/ \ No newline at end of file +function R(e, t, n, r) { + var a = (n.length > 0 ? e.format({ + prefix: r(n) + }) : t) + if(Array.isArray(a)){ + a.unshift(React.createElement("strong", {}, "[Lightcord] ")) + }else{ + a = "[LIGHTCORD] "+a + } + return React.createElement(AutocompleteModule.default.Title, { + title: a + }, a) +} +R.displayName = "renderHeader"; + +let EmojiFilterModule = BDModules.get(e => e.default && e.default.isEmojiDisabled)[0] +let isEmojiDisabled = EmojiFilterModule && EmojiFilterModule.default.isEmojiDisabled +let isUsable = false +let hasPatched = false + +function setEmojiUsable(usable){ + isUsable = usable + if(hasPatched)return + if(!EmojiFilterModule)EmojiFilterModule = BDModules.get(e => e.default && e.default.isEmojiDisabled)[0] + if(!EmojiFilterModule)return + if(!isEmojiDisabled)isEmojiDisabled = EmojiFilterModule.default.isEmojiDisabled + + hasPatched = true + EmojiFilterModule.default.isEmojiDisabled = function(){ + if(isUsable)return false + return isEmojiDisabled.call(this, ...arguments) + } +} \ No newline at end of file diff --git a/BetterDiscordApp/src/modules/settingsPanel.js b/BetterDiscordApp/src/modules/settingsPanel.js index ad8c6c3..eb31161 100644 --- a/BetterDiscordApp/src/modules/settingsPanel.js +++ b/BetterDiscordApp/src/modules/settingsPanel.js @@ -348,7 +348,7 @@ export default new class V2_SettingsPanel { BDV2.reactDom.render(this.coreComponent, root); } - renderLightCordSettings() { + renderLightordSettings() { const root = this.root; if (!root) return Utils.err("SettingsPanel", "FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i"); BDV2.reactDom.render(this.lightcordComponent, root); diff --git a/BetterDiscordApp/src/modules/utils.js b/BetterDiscordApp/src/modules/utils.js index 3549c5e..8bdaa49 100644 --- a/BetterDiscordApp/src/modules/utils.js +++ b/BetterDiscordApp/src/modules/utils.js @@ -450,6 +450,11 @@ export default class Utils { onCancel: onCancel }, key); } + + static removeDa(className){ + if(!className)return className + return className.split(" ").filter(e => !e.startsWith("da-")).join(" ") + } } Utils.showToast = Utils.suppressErrors(Utils.showToast, "Could not show toast."); diff --git a/BetterDiscordApp/src/ui/presenceSettings.jsx b/BetterDiscordApp/src/ui/presenceSettings.jsx index 40bcd0e..405f915 100644 --- a/BetterDiscordApp/src/ui/presenceSettings.jsx +++ b/BetterDiscordApp/src/ui/presenceSettings.jsx @@ -144,7 +144,7 @@ export default class V2C_PresenceSettings extends React.Component { +
) + } +} + +export type ButtonColor = "brand" | "grey" | "red" | "green" | "yellow" | "primary" | "link" | "white" | "black" | "transparent" \ No newline at end of file diff --git a/LightcordApi/src/components/components.ts b/LightcordApi/src/components/components.ts new file mode 100644 index 0000000..1469e5f --- /dev/null +++ b/LightcordApi/src/components/components.ts @@ -0,0 +1,7 @@ +import DiscordButton from "./Discord/Button" + +export default { + Discord: { + Button: DiscordButton + } +} \ No newline at end of file diff --git a/LightcordApi/src/index.ts b/LightcordApi/src/index.ts new file mode 100644 index 0000000..7ca628e --- /dev/null +++ b/LightcordApi/src/index.ts @@ -0,0 +1,92 @@ +import WebpackLoader from "./modules/WebpackLoader" +import Components from "./components/components" + +const LightcordApi = { + WebpackLoader: WebpackLoader, + Components: Components +} + +declare global { + var React:typeof import("react") + interface Window { + Lightcord: { + DiscordModules: { + /** + * Internal Discord's dispatcher - can be used to subscribe to gateway events / client events. + */ + dispatcher: { + _subscriptions: any, + _waitQueue: (() => void)[], + _processingWaitQueue: boolean, + _currentDispatchActionType: string | null, + _orderedActionHandlers: any, + _orderedCallbackTokens: any, + _lastID: number, + _dependencyGraph: any + + isDispatching():boolean, + /** + * If the dispatcher isn't dispatching, then dispatch + */ + maybeDispatch(event: {type: string, [k: string]:any}):void, + /** + * Wait until the dispatcher finished dispatching, then dispatch + */ + dirtyDispatch(event: {type: string, [k: string]:any}):void, + /** + * dispatch + */ + dispatch(event: {type: string, [k: string]:any}):void, + /** Same as dispatcher.dispatch */ + _dispatch(event: {type: string, [k: string]:any}):void, + /** + * Intercept events before they happens, if returning true, then the event will be blocked from dispatching. + */ + setInterceptor(interceptor: (event) => boolean):void, + /** + * Wait until the dispatcher has finished dispatching + */ + wait(waiting: () => void):void, + /** Subscribe to an event */ + subscribe(event: string, listener: (event: {type: string, [k: string]:any}) => void):void, + /** + * Unsubscribe from the event. + */ + unsubscribe(event: string, listener: (event: {type: string, [k: string]:any}) => void):void, + register(name: string, actionHandler: any, storeDidChange: any):void + addDependencies, + _invalidateCaches, + _processWaitQueue, + _computeOrderedActionHandlers, + _computeOrderedCallbackTokens + }, + constants: import("./types/DiscordConstantsTypes").default + }, + Settings: { + devMode: boolean, + callRingingBeat: boolean + }, + Api: { + /** + * Lightcord's autorization for lightcord's servers + */ + Authorization: string, + /** + * Waits until the first module that match the filter gets exported + * @param filter The filter that specifies the module to match. + */ + ensureExported(filter: (mod:any) => boolean):Promise + } & typeof LightcordApi + }, + BDModules: { + modules:any[], + get(filter:(mod:any)=>boolean, modules?:any[]):any[], + get(id:number, modules?:any[]):any, + get(ids: [number|((mod:any)=>boolean)], modules?:any[]):any + } + } +} + +export default LightcordApi + +Object.assign(window.Lightcord.Api, LightcordApi) \ No newline at end of file diff --git a/LightcordApi/src/modules/WebpackLoader.ts b/LightcordApi/src/modules/WebpackLoader.ts new file mode 100644 index 0000000..5f5b866 --- /dev/null +++ b/LightcordApi/src/modules/WebpackLoader.ts @@ -0,0 +1,45 @@ +const BDModules = window.BDModules + +export default new class WebpackLoader { + constructor(){} + + get(id: number):any{ + return BDModules.get(id) + } + find(filter: (mod:any) => boolean):any{ + return BDModules.get(filter)[0] + } + findByUniqueProperties(props:(string|number)[]):any{ + return BDModules.get((mod) => { + if(mod.__esModule && ("default" in mod)){ + let doesMatch = true + for(let prop of props){ + if(!Object.prototype.hasOwnProperty.call(mod.default, prop))doesMatch = false + } + if(doesMatch)return true + } + for(let prop of props){ + if(!Object.prototype.hasOwnProperty.call(mod, prop))return false + } + return true + })[0] + } + filter(filter: (mod:any) => boolean):any[]{ + return BDModules.get(filter) + } + filterByUniqueProperties(props:(string|number)[]):any{ + return BDModules.get((mod) => { + if(mod.__esModule && ("default" in mod)){ + let doesMatch = true + for(let prop of props){ + if(!Object.prototype.hasOwnProperty.call(mod.default, prop))doesMatch = false + } + if(doesMatch)return true + } + for(let prop of props){ + if(!Object.prototype.hasOwnProperty.call(mod, prop))return false + } + return true + }) + } +} \ No newline at end of file diff --git a/LightcordApi/src/types/DiscordConstantsTypes.ts b/LightcordApi/src/types/DiscordConstantsTypes.ts new file mode 100644 index 0000000..ef227ca --- /dev/null +++ b/LightcordApi/src/types/DiscordConstantsTypes.ts @@ -0,0 +1,5654 @@ +export default interface DiscordConstantsType { + API_HOST: "discord.com", + ActionTypes: { + "USER_UPDATE": "USER_UPDATE", + "CURRENT_USER_UPDATE": "CURRENT_USER_UPDATE", + "LOAD_REGIONS": "LOAD_REGIONS", + "LOAD_MESSAGES": "LOAD_MESSAGES", + "LOAD_MESSAGES_SUCCESS": "LOAD_MESSAGES_SUCCESS", + "LOAD_MESSAGES_FAILURE": "LOAD_MESSAGES_FAILURE", + "LOAD_MESSAGES_SUCCESS_CACHED": "LOAD_MESSAGES_SUCCESS_CACHED", + "CHANNEL_FOLLOWING_FETCH_MESSAGE_PREVIEWS": "CHANNEL_FOLLOWING_FETCH_MESSAGE_PREVIEWS", + "CHANNEL_FOLLOWING_FETCH_MESSAGE_PREVIEWS_SUCCESS": "CHANNEL_FOLLOWING_FETCH_MESSAGE_PREVIEWS_SUCCESS", + "CHANNEL_FOLLOWING_FETCH_MESSAGE_PREVIEWS_FAILURE": "CHANNEL_FOLLOWING_FETCH_MESSAGE_PREVIEWS_FAILURE", + "TRUNCATE_MESSAGES": "TRUNCATE_MESSAGES", + "CLEAR_MESSAGES": "CLEAR_MESSAGES", + "LOAD_MESSAGES_AROUND_SUCCESS": "LOAD_MESSAGES_AROUND_SUCCESS", + "CLEAR_MESSAGES_AROUND_SUCCESS": "CLEAR_MESSAGES_AROUND_SUCCESS", + "MESSAGE_CREATE": "MESSAGE_CREATE", + "MESSAGE_SEND_FAILED": "MESSAGE_SEND_FAILED", + "MESSAGE_UPDATE": "MESSAGE_UPDATE", + "MESSAGE_START_EDIT": "MESSAGE_START_EDIT", + "MESSAGE_END_EDIT": "MESSAGE_END_EDIT", + "MESSAGE_UPDATE_EDIT": "MESSAGE_UPDATE_EDIT", + "MESSAGE_DELETE": "MESSAGE_DELETE", + "MESSAGE_DELETE_BULK": "MESSAGE_DELETE_BULK", + "MESSAGE_ACK": "MESSAGE_ACK", + "MESSAGE_REVEAL": "MESSAGE_REVEAL", + "RECENT_MENTION_DELETE": "RECENT_MENTION_DELETE", + "MESSAGE_REACTION_ADD": "MESSAGE_REACTION_ADD", + "MESSAGE_REACTION_ADD_USERS": "MESSAGE_REACTION_ADD_USERS", + "MESSAGE_REACTION_REMOVE": "MESSAGE_REACTION_REMOVE", + "MESSAGE_REACTION_REMOVE_ALL": "MESSAGE_REACTION_REMOVE_ALL", + "MESSAGE_REACTION_REMOVE_EMOJI": "MESSAGE_REACTION_REMOVE_EMOJI", + "CHANNEL_PINS_ACK": "CHANNEL_PINS_ACK", + "CHANNEL_PINS_UPDATE": "CHANNEL_PINS_UPDATE", + "CHANNEL_UNREAD_UPDATE": "CHANNEL_UNREAD_UPDATE", + "RELATIONSHIP_ADD": "RELATIONSHIP_ADD", + "RELATIONSHIP_REMOVE": "RELATIONSHIP_REMOVE", + "FRIEND_REQUEST_ACCEPTED": "FRIEND_REQUEST_ACCEPTED", + "LOAD_RELATIONSHIPS_SUCCESS": "LOAD_RELATIONSHIPS_SUCCESS", + "LOAD_RELATIONSHIPS_FAILURE": "LOAD_RELATIONSHIPS_FAILURE", + "FRIENDS_SET_SECTION": "FRIENDS_SET_SECTION", + "GUILD_UNAVAILABLE": "GUILD_UNAVAILABLE", + "GUILD_CREATE": "GUILD_CREATE", + "GUILD_UPDATE": "GUILD_UPDATE", + "GUILD_DELETE": "GUILD_DELETE", + "GUILD_EMOJIS_UPDATE": "GUILD_EMOJIS_UPDATE", + "GUILD_JOIN": "GUILD_JOIN", + "GUILD_STOP_LURKING": "GUILD_STOP_LURKING", + "GUILD_STOP_LURKING_FAILURE": "GUILD_STOP_LURKING_FAILURE", + "GUILD_APPLICATIONS_FETCH_SUCCESS": "GUILD_APPLICATIONS_FETCH_SUCCESS", + "GUILD_PREMIUM_SUBSCRIBE_MODAL_OPEN_IOS": "GUILD_PREMIUM_SUBSCRIBE_MODAL_OPEN_IOS", + "GUILD_PREMIUM_SUBSCRIBE_MODAL_CLOSE_IOS": "GUILD_PREMIUM_SUBSCRIBE_MODAL_CLOSE_IOS", + "GUILD_PREMIUM_SUBSCRIPTIONS_FETCH_SUCCESS": "GUILD_PREMIUM_SUBSCRIPTIONS_FETCH_SUCCESS", + "GUILD_USER_PREMIUM_SUBSCRIPTIONS_FETCH_SUCCESS": "GUILD_USER_PREMIUM_SUBSCRIPTIONS_FETCH_SUCCESS", + "GUILD_PREMIUM_SUBSCRIPTIONS_COOLDOWN_FETCH_SUCCESS": "GUILD_PREMIUM_SUBSCRIPTIONS_COOLDOWN_FETCH_SUCCESS", + "GUILD_PREMIUM_SUBSCRIBE_START": "GUILD_PREMIUM_SUBSCRIBE_START", + "GUILD_PREMIUM_SUBSCRIBE_SUCCESS": "GUILD_PREMIUM_SUBSCRIBE_SUCCESS", + "GUILD_PREMIUM_SUBSCRIBE_FAIL": "GUILD_PREMIUM_SUBSCRIBE_FAIL", + "GUILD_PREMIUM_UNSUBSCRIBE_START": "GUILD_PREMIUM_UNSUBSCRIBE_START", + "GUILD_PREMIUM_UNSUBSCRIBE_SUCCESS": "GUILD_PREMIUM_UNSUBSCRIBE_SUCCESS", + "GUILD_PREMIUM_UNSUBSCRIBE_FAIL": "GUILD_PREMIUM_UNSUBSCRIBE_FAIL", + "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOTS_FETCH_SUCCESS": "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOTS_FETCH_SUCCESS", + "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_UPDATE_SUCCESS": "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_UPDATE_SUCCESS", + "EMOJI_DIVERSITY_COLOR_CHANGE": "EMOJI_DIVERSITY_COLOR_CHANGE", + "EMOJI_TRACK_USAGE": "EMOJI_TRACK_USAGE", + "EMOJI_UPLOAD_START": "EMOJI_UPLOAD_START", + "EMOJI_UPLOAD_STOP": "EMOJI_UPLOAD_STOP", + "EMOJI_FETCH": "EMOJI_FETCH", + "EMOJI_FETCH_SUCCESS": "EMOJI_FETCH_SUCCESS", + "EMOJI_FETCH_FAILURE": "EMOJI_FETCH_FAILURE", + "EMOJI_DELETE": "EMOJI_DELETE", + "GUILD_SELECT": "GUILD_SELECT", + "GUILD_MOVE": "GUILD_MOVE", + "TOGGLE_GUILD_FOLDER_EXPAND": "TOGGLE_GUILD_FOLDER_EXPAND", + "SET_GUILD_FOLDER_EXPANDED": "SET_GUILD_FOLDER_EXPANDED", + "DELAYED_CHANNEL_SELECT": "DELAYED_CHANNEL_SELECT", + "DELAYED_SELECT_FLUSH": "DELAYED_SELECT_FLUSH", + "GUILD_MEMBERS_REQUEST": "GUILD_MEMBERS_REQUEST", + "GUILD_MEMBERS_CHUNK": "GUILD_MEMBERS_CHUNK", + "GUILD_ACK": "GUILD_ACK", + "GUILD_MEMBER_LIST_UPDATE": "GUILD_MEMBER_LIST_UPDATE", + "CHANGE_LOG_OPEN": "CHANGE_LOG_OPEN", + "CHANGE_LOG_CLOSE": "CHANGE_LOG_CLOSE", + "CHANNEL_CREATE": "CHANNEL_CREATE", + "CHANNEL_UPDATE": "CHANNEL_UPDATE", + "CHANNEL_DELETE": "CHANNEL_DELETE", + "CHANNEL_SELECT": "CHANNEL_SELECT", + "CHANNEL_PRELOAD": "CHANNEL_PRELOAD", + "CHANNEL_ACK": "CHANNEL_ACK", + "CHANNEL_LOCAL_ACK": "CHANNEL_LOCAL_ACK", + "CHANNEL_COLLAPSE": "CHANNEL_COLLAPSE", + "GUILD_TOGGLE_COLLAPSE_MUTED": "GUILD_TOGGLE_COLLAPSE_MUTED", + "CHANNEL_TOGGLE_SECTION": "CHANNEL_TOGGLE_SECTION", + "CHANNEL_RECIPIENT_ADD": "CHANNEL_RECIPIENT_ADD", + "CHANNEL_RECIPIENT_REMOVE": "CHANNEL_RECIPIENT_REMOVE", + "GUILD_NSFW_AGREE": "GUILD_NSFW_AGREE", + "BULK_ACK": "BULK_ACK", + "ENABLE_AUTOMATIC_ACK": "ENABLE_AUTOMATIC_ACK", + "DISABLE_AUTOMATIC_ACK": "DISABLE_AUTOMATIC_ACK", + "GAME_NOTIFICATION_SETTINGS_UPDATE": "GAME_NOTIFICATION_SETTINGS_UPDATE", + "GAME_NOTIFICATION_OVERRIDES_UPDATE": "GAME_NOTIFICATION_OVERRIDES_UPDATE", + "GAME_NOTIFICATION_OVERRIDES_DELETE": "GAME_NOTIFICATION_OVERRIDES_DELETE", + "GAME_NOTIFICATION_OVERRIDES_LOAD": "GAME_NOTIFICATION_OVERRIDES_LOAD", + "UNVERIFIED_GAME_UPDATE": "UNVERIFIED_GAME_UPDATE", + "GAMES_DATABASE_FETCH": "GAMES_DATABASE_FETCH", + "GAMES_DATABASE_UPDATE": "GAMES_DATABASE_UPDATE", + "GAMES_DATABASE_FETCH_FAIL": "GAMES_DATABASE_FETCH_FAIL", + "CHECK_LAUNCHABLE_GAME": "CHECK_LAUNCHABLE_GAME", + "GAME_LAUNCHABLE_UPDATE": "GAME_LAUNCHABLE_UPDATE", + "GAME_LAUNCH_START": "GAME_LAUNCH_START", + "GAME_LAUNCH_SUCCESS": "GAME_LAUNCH_SUCCESS", + "GAME_LAUNCH_FAIL": "GAME_LAUNCH_FAIL", + "GAME_ICON_UPDATE": "GAME_ICON_UPDATE", + "APPLICATION_FETCH": "APPLICATION_FETCH", + "APPLICATION_FETCH_FAIL": "APPLICATION_FETCH_FAIL", + "APPLICATION_FETCH_SUCCESS": "APPLICATION_FETCH_SUCCESS", + "APPLICATIONS_FETCH": "APPLICATIONS_FETCH", + "APPLICATIONS_FETCH_FAIL": "APPLICATIONS_FETCH_FAIL", + "APPLICATIONS_FETCH_SUCCESS": "APPLICATIONS_FETCH_SUCCESS", + "SHOW_GAME_PREVIEW": "SHOW_GAME_PREVIEW", + "GAME_AUTOCOMPLETE_QUERY": "GAME_AUTOCOMPLETE_QUERY", + "GAME_CLOUD_SYNC_START": "GAME_CLOUD_SYNC_START", + "GAME_CLOUD_SYNC_UPDATE": "GAME_CLOUD_SYNC_UPDATE", + "GAME_CLOUD_SYNC_COMPLETE": "GAME_CLOUD_SYNC_COMPLETE", + "GAME_CLOUD_SYNC_CONFLICT": "GAME_CLOUD_SYNC_CONFLICT", + "GAME_CLOUD_SYNC_ERROR": "GAME_CLOUD_SYNC_ERROR", + "USER_ACHIEVEMENT_UPDATE": "USER_ACHIEVEMENT_UPDATE", + "INSTALLATION_LOCATION_ADD": "INSTALLATION_LOCATION_ADD", + "INSTALLATION_LOCATION_REMOVE": "INSTALLATION_LOCATION_REMOVE", + "INSTALLATION_LOCATION_UPDATE": "INSTALLATION_LOCATION_UPDATE", + "INSTALLATION_LOCATION_FETCH_METADATA": "INSTALLATION_LOCATION_FETCH_METADATA", + "LOAD_PINNED_MESSAGES": "LOAD_PINNED_MESSAGES", + "LOAD_PINNED_MESSAGES_SUCCESS": "LOAD_PINNED_MESSAGES_SUCCESS", + "LOAD_PINNED_MESSAGES_FAILURE": "LOAD_PINNED_MESSAGES_FAILURE", + "VOICE_CHANNEL_SELECT": "VOICE_CHANNEL_SELECT", + "VOICE_CHANNEL_CLEAR": "VOICE_CHANNEL_CLEAR", + "VOICE_CHANNEL_SHOW_FEEDBACK": "VOICE_CHANNEL_SHOW_FEEDBACK", + "ACTIVITY_START": "ACTIVITY_START", + "ACTIVITY_UPDATE_START": "ACTIVITY_UPDATE_START", + "ACTIVITY_UPDATE_SUCCESS": "ACTIVITY_UPDATE_SUCCESS", + "ACTIVITY_UPDATE_FAIL": "ACTIVITY_UPDATE_FAIL", + "ACTIVITY_INVITE_EDUCATION_DISMISS": "ACTIVITY_INVITE_EDUCATION_DISMISS", + "ACTIVITY_JOIN_REQUEST": "ACTIVITY_JOIN_REQUEST", + "ACTIVITY_JOIN_REQUEST_CLOSE": "ACTIVITY_JOIN_REQUEST_CLOSE", + "ACTIVITY_JOIN_REQUEST_SEND": "ACTIVITY_JOIN_REQUEST_SEND", + "ACTIVITY_JOIN_REQUEST_SEND_EXPIRE": "ACTIVITY_JOIN_REQUEST_SEND_EXPIRE", + "ACTIVITY_JOIN_INVITE_SEND": "ACTIVITY_JOIN_INVITE_SEND", + "ACTIVITY_JOIN_INVITE": "ACTIVITY_JOIN_INVITE", + "ACTIVITY_SET_CUSTOM_STATUS": "ACTIVITY_SET_CUSTOM_STATUS", + "ACTIVITY_CLEAR_CUSTOM_STATUS": "ACTIVITY_CLEAR_CUSTOM_STATUS", + "ACTIVITY_JOIN_LOADING": "ACTIVITY_JOIN_LOADING", + "ACTIVITY_JOIN_FAILED": "ACTIVITY_JOIN_FAILED", + "ACTIVITY_JOIN": "ACTIVITY_JOIN", + "ACTIVITY_SPECTATE_LOADING": "ACTIVITY_SPECTATE_LOADING", + "ACTIVITY_SPECTATE_FAILED": "ACTIVITY_SPECTATE_FAILED", + "ACTIVITY_SPECTATE": "ACTIVITY_SPECTATE", + "ACTIVITY_LAUNCH_FAIL": "ACTIVITY_LAUNCH_FAIL", + "ACTIVITY_SYNC": "ACTIVITY_SYNC", + "ACTIVITY_SYNC_STOP": "ACTIVITY_SYNC_STOP", + "ACTIVITY_PLAY": "ACTIVITY_PLAY", + "ACTIVITIES_UPDATE": "ACTIVITIES_UPDATE", + "ACTIVITY_METADATA_UPDATE": "ACTIVITY_METADATA_UPDATE", + "USER_ACTIVITY_STATISTICS_FETCH_START": "USER_ACTIVITY_STATISTICS_FETCH_START", + "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS": "USER_ACTIVITY_STATISTICS_FETCH_SUCCESS", + "USER_ACTIVITY_STATISTICS_FETCH_FAIL": "USER_ACTIVITY_STATISTICS_FETCH_FAIL", + "APPLICATION_ACTIVITY_STATISTICS_FETCH_START": "APPLICATION_ACTIVITY_STATISTICS_FETCH_START", + "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS": "APPLICATION_ACTIVITY_STATISTICS_FETCH_SUCCESS", + "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL": "APPLICATION_ACTIVITY_STATISTICS_FETCH_FAIL", + "TYPING_START": "TYPING_START", + "TYPING_START_LOCAL": "TYPING_START_LOCAL", + "TYPING_STOP": "TYPING_STOP", + "TYPING_STOP_LOCAL": "TYPING_STOP_LOCAL", + "SLOWMODE_COOLDOWN_CHANGE": "SLOWMODE_COOLDOWN_CHANGE", + "SLOWMODE_START_COOLDOWN": "SLOWMODE_START_COOLDOWN", + "EXPERIMENT_TRIGGER": "EXPERIMENT_TRIGGER", + "EXPERIMENT_REGISTER_LEGACY": "EXPERIMENT_REGISTER_LEGACY", + "EXPERIMENT_REGISTER_SURVEY": "EXPERIMENT_REGISTER_SURVEY", + "EXPERIMENT_OVERRIDE_BUCKET": "EXPERIMENT_OVERRIDE_BUCKET", + "EXPERIMENTS_FETCH": "EXPERIMENTS_FETCH", + "EXPERIMENTS_FETCH_SUCCESS": "EXPERIMENTS_FETCH_SUCCESS", + "EXPERIMENTS_FETCH_FAILURE": "EXPERIMENTS_FETCH_FAILURE", + "USER_AUTHORIZED_APPS_UPDATE": "USER_AUTHORIZED_APPS_UPDATE", + "RPC_APP_CONNECTED": "RPC_APP_CONNECTED", + "RPC_APP_AUTHENTICATED": "RPC_APP_AUTHENTICATED", + "RPC_APP_DISCONNECTED": "RPC_APP_DISCONNECTED", + "RPC_NOTIFICATION_CREATE": "RPC_NOTIFICATION_CREATE", + "NEW_USER_FLOW_SET_STEP": "NEW_USER_FLOW_SET_STEP", + "NEW_USER_FLOW_ACCOUNT_SUBMITTED": "NEW_USER_FLOW_ACCOUNT_SUBMITTED", + "NEW_USER_FLOW_ACCOUNT_FAILURE": "NEW_USER_FLOW_ACCOUNT_FAILURE", + "NEW_USER_FLOW_ACCOUNT_SUCCESS": "NEW_USER_FLOW_ACCOUNT_SUCCESS", + "NEW_USER_FLOW_GUILD_UPDATE": "NEW_USER_FLOW_GUILD_UPDATE", + "NEW_USER_FLOW_GUILD_CREATED": "NEW_USER_FLOW_GUILD_CREATED", + "NEW_USER_FLOW_GUILD_SUBMITTED": "NEW_USER_FLOW_GUILD_SUBMITTED", + "NEW_USER_FLOW_GUILD_FAILURE": "NEW_USER_FLOW_GUILD_FAILURE", + "START_SESSION": "START_SESSION", + "LOGIN": "LOGIN", + "LOGIN_SUCCESS": "LOGIN_SUCCESS", + "LOGIN_FAILURE": "LOGIN_FAILURE", + "LOGIN_MFA": "LOGIN_MFA", + "LOGIN_MFA_STEP": "LOGIN_MFA_STEP", + "LOGIN_MFA_FAILURE": "LOGIN_MFA_FAILURE", + "LOGIN_MFA_SMS": "LOGIN_MFA_SMS", + "LOGIN_MFA_SMS_FAILURE": "LOGIN_MFA_SMS_FAILURE", + "LOGIN_MFA_SMS_REQUEST_SUCCESS": "LOGIN_MFA_SMS_REQUEST_SUCCESS", + "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION": "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION", + "LOGIN_ACCOUNT_DISABLED": "LOGIN_ACCOUNT_DISABLED", + "LOGIN_RESET": "LOGIN_RESET", + "FINGERPRINT": "FINGERPRINT", + "REGISTER": "REGISTER", + "REGISTER_WITH_AGE_GATE": "REGISTER_WITH_AGE_GATE", + "REGISTER_SUCCESS": "REGISTER_SUCCESS", + "REGISTER_FAILURE": "REGISTER_FAILURE", + "VERIFY_SUCCESS": "VERIFY_SUCCESS", + "VERIFY_FAILURE": "VERIFY_FAILURE", + "FORGOT_PASSWORD_SENT": "FORGOT_PASSWORD_SENT", + "LOGOUT": "LOGOUT", + "UPDATE_TOKEN": "UPDATE_TOKEN", + "MFA_ENABLE_SUCCESS": "MFA_ENABLE_SUCCESS", + "MFA_DISABLE_SUCCESS": "MFA_DISABLE_SUCCESS", + "MFA_VIEW_BACKUP_CODES": "MFA_VIEW_BACKUP_CODES", + "MFA_CLEAR_BACKUP_CODES": "MFA_CLEAR_BACKUP_CODES", + "OAUTH2_TOKEN_REVOKE": "OAUTH2_TOKEN_REVOKE", + "MFA_SMS_TOGGLE": "MFA_SMS_TOGGLE", + "MFA_SMS_TOGGLE_COMPLETE": "MFA_SMS_TOGGLE_COMPLETE", + "TRACK": "TRACK", + "SAVE_LAST_ROUTE": "SAVE_LAST_ROUTE", + "BROWSER_HANDOFF_BEGIN": "BROWSER_HANDOFF_BEGIN", + "BROWSER_HANDOFF_END": "BROWSER_HANDOFF_END", + "BROWSER_HANDOFF_FROM_APP": "BROWSER_HANDOFF_FROM_APP", + "MODAL_PUSH": "MODAL_PUSH", + "MODAL_UPDATE": "MODAL_UPDATE", + "MODAL_POP": "MODAL_POP", + "MODAL_POP_ALL": "MODAL_POP_ALL", + "POST_CONNECTION_PENDING_CALLBACK": "POST_CONNECTION_PENDING_CALLBACK", + "POPOUT_OPEN": "POPOUT_OPEN", + "POPOUT_CLOSE": "POPOUT_CLOSE", + "POPOUT_CLOSE_ALL": "POPOUT_CLOSE_ALL", + "POPOUT_NEEDS_RERENDER": "POPOUT_NEEDS_RERENDER", + "POPOUT_DID_RERENDER": "POPOUT_DID_RERENDER", + "CONTEXT_MENU_OPEN": "CONTEXT_MENU_OPEN", + "CONTEXT_MENU_CLOSE": "CONTEXT_MENU_CLOSE", + "TOOLTIP_SHOW": "TOOLTIP_SHOW", + "TOOLTIP_HIDE": "TOOLTIP_HIDE", + "TUTORIAL_INDICATOR_SHOW": "TUTORIAL_INDICATOR_SHOW", + "TUTORIAL_INDICATOR_HIDE": "TUTORIAL_INDICATOR_HIDE", + "TUTORIAL_INDICATOR_DISMISS": "TUTORIAL_INDICATOR_DISMISS", + "TUTORIAL_INDICATOR_SUPPRESS_ALL": "TUTORIAL_INDICATOR_SUPPRESS_ALL", + "UPLOAD_QUEUE": "UPLOAD_QUEUE", + "UPLOAD_START": "UPLOAD_START", + "UPLOAD_PROGRESS": "UPLOAD_PROGRESS", + "UPLOAD_COMPLETE": "UPLOAD_COMPLETE", + "UPLOAD_FAIL": "UPLOAD_FAIL", + "UPLOAD_CANCEL_REQUEST": "UPLOAD_CANCEL_REQUEST", + "UPDATE_CHANNEL_DIMENSIONS": "UPDATE_CHANNEL_DIMENSIONS", + "UPDATE_CHANNEL_LIST_DIMENSIONS": "UPDATE_CHANNEL_LIST_DIMENSIONS", + "UPDATE_GUILD_LIST_DIMENSIONS": "UPDATE_GUILD_LIST_DIMENSIONS", + "CACHE_LOADED": "CACHE_LOADED", + "CACHE_LOADED_LAZY": "CACHE_LOADED_LAZY", + "CONNECTION_OPEN": "CONNECTION_OPEN", + "CONNECTION_RESUMED": "CONNECTION_RESUMED", + "CONNECTION_CLOSED": "CONNECTION_CLOSED", + "CLEAR_GUILD_HASHES": "CLEAR_GUILD_HASHES", + "WINDOW_FOCUS": "WINDOW_FOCUS", + "WINDOW_RESIZED": "WINDOW_RESIZED", + "PRESENCE_UPDATE": "PRESENCE_UPDATE", + "PRESENCES_REPLACE": "PRESENCES_REPLACE", + "SESSIONS_REPLACE": "SESSIONS_REPLACE", + "FORCE_INVISIBLE": "FORCE_INVISIBLE", + "LOCAL_ACTIVITY_UPDATE": "LOCAL_ACTIVITY_UPDATE", + "VOICE_STATE_UPDATE": "VOICE_STATE_UPDATE", + "VOICE_SERVER_UPDATE": "VOICE_SERVER_UPDATE", + "SPEAKING": "SPEAKING", + "AUDIO_SET_TEMPORARY_SELF_MUTE": "AUDIO_SET_TEMPORARY_SELF_MUTE", + "AUDIO_TOGGLE_SELF_MUTE": "AUDIO_TOGGLE_SELF_MUTE", + "AUDIO_TOGGLE_SELF_DEAF": "AUDIO_TOGGLE_SELF_DEAF", + "AUDIO_TOGGLE_LOCAL_MUTE": "AUDIO_TOGGLE_LOCAL_MUTE", + "AUDIO_SET_LOCAL_VIDEO_DISABLED": "AUDIO_SET_LOCAL_VIDEO_DISABLED", + "AUDIO_TOGGLE_MUTE": "AUDIO_TOGGLE_MUTE", + "AUDIO_TOGGLE_DEAF": "AUDIO_TOGGLE_DEAF", + "AUDIO_SET_MODE": "AUDIO_SET_MODE", + "AUDIO_SET_INPUT_VOLUME": "AUDIO_SET_INPUT_VOLUME", + "AUDIO_SET_OUTPUT_VOLUME": "AUDIO_SET_OUTPUT_VOLUME", + "AUDIO_SET_LOCAL_VOLUME": "AUDIO_SET_LOCAL_VOLUME", + "AUDIO_SET_LOCAL_PAN": "AUDIO_SET_LOCAL_PAN", + "AUDIO_SET_INPUT_DEVICE": "AUDIO_SET_INPUT_DEVICE", + "AUDIO_SET_OUTPUT_DEVICE": "AUDIO_SET_OUTPUT_DEVICE", + "MEDIA_ENGINE_SET_VIDEO_DEVICE": "MEDIA_ENGINE_SET_VIDEO_DEVICE", + "AUDIO_SET_ECHO_CANCELLATION": "AUDIO_SET_ECHO_CANCELLATION", + "AUDIO_SET_LOOPBACK": "AUDIO_SET_LOOPBACK", + "AUDIO_SET_NOISE_SUPPRESSION": "AUDIO_SET_NOISE_SUPPRESSION", + "AUDIO_SET_NOISE_CANCELLATION": "AUDIO_SET_NOISE_CANCELLATION", + "AUDIO_SET_NOISE_CANCELLATION_MODEL": "AUDIO_SET_NOISE_CANCELLATION_MODEL", + "AUDIO_SET_AUTOMATIC_GAIN_CONTROL": "AUDIO_SET_AUTOMATIC_GAIN_CONTROL", + "AUDIO_SET_DISPLAY_SILENCE_WARNING": "AUDIO_SET_DISPLAY_SILENCE_WARNING", + "AUDIO_SET_DEBUG_LOGGING": "AUDIO_SET_DEBUG_LOGGING", + "AUDIO_SET_ATTENUATION": "AUDIO_SET_ATTENUATION", + "AUDIO_SET_QOS": "AUDIO_SET_QOS", + "MEDIA_ENGINE_DEVICES": "MEDIA_ENGINE_DEVICES", + "AUDIO_VOLUME_CHANGE": "AUDIO_VOLUME_CHANGE", + "AUDIO_RESET": "AUDIO_RESET", + "AUDIO_INPUT_DETECTED": "AUDIO_INPUT_DETECTED", + "AUDIO_SET_SUBSYSTEM": "AUDIO_SET_SUBSYSTEM", + "MEDIA_ENGINE_SET_AUDIO_ENABLED": "MEDIA_ENGINE_SET_AUDIO_ENABLED", + "MEDIA_ENGINE_SET_VIDEO_ENABLED": "MEDIA_ENGINE_SET_VIDEO_ENABLED", + "MEDIA_ENGINE_PERMISSION": "MEDIA_ENGINE_PERMISSION", + "MEDIA_ENGINE_SET_DESKTOP_SOURCE": "MEDIA_ENGINE_SET_DESKTOP_SOURCE", + "MEDIA_ENGINE_SET_SOUNDSHARE_VOLUME": "MEDIA_ENGINE_SET_SOUNDSHARE_VOLUME", + "MEDIA_ENGINE_VIDEO_QUALITY_CHANGED": "MEDIA_ENGINE_VIDEO_QUALITY_CHANGED", + "MEDIA_ENGINE_INTERACTION_REQUIRED": "MEDIA_ENGINE_INTERACTION_REQUIRED", + "MEDIA_ENGINE_SET_VIDEO_HOOK": "MEDIA_ENGINE_SET_VIDEO_HOOK", + "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE": "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE", + "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING": "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING", + "MEDIA_ENGINE_SOUNDSHARE_FAILED": "MEDIA_ENGINE_SOUNDSHARE_FAILED", + "MEDIA_ENGINE_SOUNDSHARE_TRACE": "MEDIA_ENGINE_SOUNDSHARE_TRACE", + "MEDIA_ENGINE_VIDEO_STATE_CHANGED": "MEDIA_ENGINE_VIDEO_STATE_CHANGED", + "MEDIA_ENGINE_SET_OPEN_H264": "MEDIA_ENGINE_SET_OPEN_H264", + "MEDIA_ENGINE_SET_HARDWARE_H264": "MEDIA_ENGINE_SET_HARDWARE_H264", + "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS": "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS", + "MEDIA_ENGINE_START_AEC_DUMP": "MEDIA_ENGINE_START_AEC_DUMP", + "MEDIA_ENGINE_STOP_AEC_DUMP": "MEDIA_ENGINE_STOP_AEC_DUMP", + "USER_SETTINGS_UPDATE": "USER_SETTINGS_UPDATE", + "USER_REQUIRED_ACTION_UPDATE": "USER_REQUIRED_ACTION_UPDATE", + "USER_CONNECTIONS_UPDATE": "USER_CONNECTIONS_UPDATE", + "USER_CONNECTIONS_INTEGRATION_JOINING": "USER_CONNECTIONS_INTEGRATION_JOINING", + "USER_CONNECTION_UPDATE": "USER_CONNECTION_UPDATE", + "LOAD_RECENT_MENTIONS": "LOAD_RECENT_MENTIONS", + "LOAD_RECENT_MENTIONS_SUCCESS": "LOAD_RECENT_MENTIONS_SUCCESS", + "LOAD_RECENT_MENTIONS_FAILURE": "LOAD_RECENT_MENTIONS_FAILURE", + "SET_RECENT_MENTIONS_FILTER": "SET_RECENT_MENTIONS_FILTER", + "TRUNCATE_MENTIONS": "TRUNCATE_MENTIONS", + "USER_NOTE_UPDATE": "USER_NOTE_UPDATE", + "USER_NOTE_LOAD_START": "USER_NOTE_LOAD_START", + "USER_NOTE_LOADED": "USER_NOTE_LOADED", + "KEYBINDS_ADD_KEYBIND": "KEYBINDS_ADD_KEYBIND", + "KEYBINDS_SET_KEYBIND": "KEYBINDS_SET_KEYBIND", + "KEYBINDS_DELETE_KEYBIND": "KEYBINDS_DELETE_KEYBIND", + "KEYBINDS_ENABLE_ALL_KEYBINDS": "KEYBINDS_ENABLE_ALL_KEYBINDS", + "NOTIFICATIONS_SET_DESKTOP_TYPE": "NOTIFICATIONS_SET_DESKTOP_TYPE", + "NOTIFICATIONS_SET_TTS_TYPE": "NOTIFICATIONS_SET_TTS_TYPE", + "NOTIFICATIONS_SET_DISABLED_SOUNDS": "NOTIFICATIONS_SET_DISABLED_SOUNDS", + "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE": "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE", + "NOTIFICATIONS_SET_TASKBAR_FLASH": "NOTIFICATIONS_SET_TASKBAR_FLASH", + "NOTIFICATIONS_SET_PERMISSION_STATE": "NOTIFICATIONS_SET_PERMISSION_STATE", + "NOTIFICATION_CREATE": "NOTIFICATION_CREATE", + "NOTIFICATION_CLICK": "NOTIFICATION_CLICK", + "PUSH_NOTIFICATION_CLICK": "PUSH_NOTIFICATION_CLICK", + "NOTICE_SHOW": "NOTICE_SHOW", + "NOTICE_DISMISS": "NOTICE_DISMISS", + "NOTICE_DISABLE": "NOTICE_DISABLE", + "RTC_CONNECTION_STATE": "RTC_CONNECTION_STATE", + "RTC_CONNECTION_VIDEO": "RTC_CONNECTION_VIDEO", + "RTC_CONNECTION_PING": "RTC_CONNECTION_PING", + "RTC_CONNECTION_LOSS_RATE": "RTC_CONNECTION_LOSS_RATE", + "DRAFT_SAVE": "DRAFT_SAVE", + "DRAFT_CHANGE": "DRAFT_CHANGE", + "DISPLAYED_INVITE_SHOW": "DISPLAYED_INVITE_SHOW", + "DISPLAYED_INVITE_CLEAR": "DISPLAYED_INVITE_CLEAR", + "INVITE_RESOLVE": "INVITE_RESOLVE", + "INVITE_RESOLVE_SUCCESS": "INVITE_RESOLVE_SUCCESS", + "INVITE_RESOLVE_FAILURE": "INVITE_RESOLVE_FAILURE", + "INVITE_ACCEPT": "INVITE_ACCEPT", + "INVITE_ACCEPT_SUCCESS": "INVITE_ACCEPT_SUCCESS", + "INVITE_ACCEPT_FAILURE": "INVITE_ACCEPT_FAILURE", + "INVITE_APP_OPENING": "INVITE_APP_OPENING", + "INVITE_APP_OPENED": "INVITE_APP_OPENED", + "INVITE_APP_NOT_OPENED": "INVITE_APP_NOT_OPENED", + "NATIVE_APP_MODAL_OPENING": "NATIVE_APP_MODAL_OPENING", + "NATIVE_APP_MODAL_OPENED": "NATIVE_APP_MODAL_OPENED", + "NATIVE_APP_MODAL_OPEN_FAILED": "NATIVE_APP_MODAL_OPEN_FAILED", + "LOAD_USER_AFFINITIES": "LOAD_USER_AFFINITIES", + "LOAD_USER_AFFINITIES_SUCCESS": "LOAD_USER_AFFINITIES_SUCCESS", + "LOAD_USER_AFFINITIES_FAILURE": "LOAD_USER_AFFINITIES_FAILURE", + "LOAD_GUILD_AFFINITIES_SUCCESS": "LOAD_GUILD_AFFINITIES_SUCCESS", + "LOAD_GUILD_AFFINITIES_FAILURE": "LOAD_GUILD_AFFINITIES_FAILURE", + "LOAD_INVITE_SUGGESTIONS": "LOAD_INVITE_SUGGESTIONS", + "INVITE_SUGGESTIONS_SEARCH": "INVITE_SUGGESTIONS_SEARCH", + "GIFT_CODE_RESOLVE": "GIFT_CODE_RESOLVE", + "GIFT_CODE_RESOLVE_SUCCESS": "GIFT_CODE_RESOLVE_SUCCESS", + "GIFT_CODE_RESOLVE_FAILURE": "GIFT_CODE_RESOLVE_FAILURE", + "GIFT_CODE_REDEEM": "GIFT_CODE_REDEEM", + "GIFT_CODE_REDEEM_SUCCESS": "GIFT_CODE_REDEEM_SUCCESS", + "GIFT_CODE_REDEEM_FAILURE": "GIFT_CODE_REDEEM_FAILURE", + "GIFT_CODES_FETCH": "GIFT_CODES_FETCH", + "GIFT_CODES_FETCH_SUCCESS": "GIFT_CODES_FETCH_SUCCESS", + "GIFT_CODES_FETCH_FAILURE": "GIFT_CODES_FETCH_FAILURE", + "GIFT_CODE_CREATE": "GIFT_CODE_CREATE", + "GIFT_CODE_CREATE_START": "GIFT_CODE_CREATE_START", + "GIFT_CODE_CREATE_SUCCESS": "GIFT_CODE_CREATE_SUCCESS", + "GIFT_CODE_CREATE_FAILURE": "GIFT_CODE_CREATE_FAILURE", + "GIFT_CODE_REVOKE": "GIFT_CODE_REVOKE", + "GIFT_CODE_REVOKE_SUCCESS": "GIFT_CODE_REVOKE_SUCCESS", + "GIFT_CODE_REVOKE_FAILURE": "GIFT_CODE_REVOKE_FAILURE", + "GIFT_CODE_MODAL_OPEN": "GIFT_CODE_MODAL_OPEN", + "GIFT_CODE_MODAL_CLOSE": "GIFT_CODE_MODAL_CLOSE", + "GIFT_CODE_UPDATE": "GIFT_CODE_UPDATE", + "GUILD_BAN_ADD": "GUILD_BAN_ADD", + "GUILD_BAN_REMOVE": "GUILD_BAN_REMOVE", + "GUILD_MEMBER_ADD": "GUILD_MEMBER_ADD", + "GUILD_MEMBER_UPDATE": "GUILD_MEMBER_UPDATE", + "GUILD_MEMBER_REMOVE": "GUILD_MEMBER_REMOVE", + "GUILD_ROLE_CREATE": "GUILD_ROLE_CREATE", + "GUILD_ROLE_UPDATE": "GUILD_ROLE_UPDATE", + "GUILD_ROLE_DELETE": "GUILD_ROLE_DELETE", + "GUILD_INTEGRATIONS_UPDATE": "GUILD_INTEGRATIONS_UPDATE", + "FEATURED_HELP_ARTICLES": "FEATURED_HELP_ARTICLES", + "CHECKING_FOR_UPDATES": "CHECKING_FOR_UPDATES", + "MODULE_INSTALLED": "MODULE_INSTALLED", + "UPDATE_NOT_AVAILABLE": "UPDATE_NOT_AVAILABLE", + "UPDATE_AVAILABLE": "UPDATE_AVAILABLE", + "UPDATE_ERROR": "UPDATE_ERROR", + "UPDATE_DOWNLOADED": "UPDATE_DOWNLOADED", + "UPDATE_MANUALLY": "UPDATE_MANUALLY", + "UPDATER_HISTORY_RESPONSE": "UPDATER_HISTORY_RESPONSE", + "RUNNING_GAMES_CHANGE": "RUNNING_GAMES_CHANGE", + "RUNNING_STREAMER_TOOLS_CHANGE": "RUNNING_STREAMER_TOOLS_CHANGE", + "CANDIDATE_GAMES_CHANGE": "CANDIDATE_GAMES_CHANGE", + "OVERLAY_GAMES_CHANGE": "OVERLAY_GAMES_CHANGE", + "IDLE": "IDLE", + "AFK": "AFK", + "PERMISSION_CLEAR_VAD_WARNING": "PERMISSION_CLEAR_VAD_WARNING", + "SET_VAD_PERMISSION": "SET_VAD_PERMISSION", + "SET_NATIVE_PERMISSION": "SET_NATIVE_PERMISSION", + "PERMISSION_CLEAR_SUPPRESS_WARNING": "PERMISSION_CLEAR_SUPPRESS_WARNING", + "PERMISSION_CLEAR_PTT_ADMIN_WARNING": "PERMISSION_CLEAR_PTT_ADMIN_WARNING", + "PERMISSION_REQUEST_ELEVATED_PROCESS": "PERMISSION_REQUEST_ELEVATED_PROCESS", + "PERMISSION_CLEAR_ELEVATED_PROCESS": "PERMISSION_CLEAR_ELEVATED_PROCESS", + "PERMISSION_CONTINUE_NONELEVATED_PROCESS": "PERMISSION_CONTINUE_NONELEVATED_PROCESS", + "MOBILE_SURVEY_DISMISS": "MOBILE_SURVEY_DISMISS", + "MOBILE_SURVEY_ACK": "MOBILE_SURVEY_ACK", + "INSTANT_INVITE_CREATE": "INSTANT_INVITE_CREATE", + "INSTANT_INVITE_CREATE_SUCCESS": "INSTANT_INVITE_CREATE_SUCCESS", + "INSTANT_INVITE_CREATE_FAILURE": "INSTANT_INVITE_CREATE_FAILURE", + "INSTANT_INVITE_REVOKE_SUCCESS": "INSTANT_INVITE_REVOKE_SUCCESS", + "INTEGRATION_QUERY": "INTEGRATION_QUERY", + "INTEGRATION_QUERY_SUCCESS": "INTEGRATION_QUERY_SUCCESS", + "INTEGRATION_QUERY_FAILURE": "INTEGRATION_QUERY_FAILURE", + "OVERLAY_INITIALIZE": "OVERLAY_INITIALIZE", + "OVERLAY_READY": "OVERLAY_READY", + "OVERLAY_CRASHED": "OVERLAY_CRASHED", + "OVERLAY_MOUNTED": "OVERLAY_MOUNTED", + "OVERLAY_FOCUSED": "OVERLAY_FOCUSED", + "OVERLAY_SET_ENABLED": "OVERLAY_SET_ENABLED", + "OVERLAY_SELECT_CALL": "OVERLAY_SELECT_CALL", + "OVERLAY_SELECT_CHANNEL": "OVERLAY_SELECT_CHANNEL", + "OVERLAY_SET_DISPLAY_NAME_MODE": "OVERLAY_SET_DISPLAY_NAME_MODE", + "OVERLAY_SET_DISPLAY_USER_MODE": "OVERLAY_SET_DISPLAY_USER_MODE", + "OVERLAY_SET_AVATAR_SIZE_MODE": "OVERLAY_SET_AVATAR_SIZE_MODE", + "OVERLAY_SET_NOTIFICATION_POSITION_MODE": "OVERLAY_SET_NOTIFICATION_POSITION_MODE", + "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE": "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE", + "OVERLAY_SET_INPUT_LOCKED": "OVERLAY_SET_INPUT_LOCKED", + "OVERLAY_SET_UI_LOCKED": "OVERLAY_SET_UI_LOCKED", + "OVERLAY_SET_TEXT_WIDGET_OPACITY": "OVERLAY_SET_TEXT_WIDGET_OPACITY", + "OVERLAY_CALL_PRIVATE_CHANNEL": "OVERLAY_CALL_PRIVATE_CHANNEL", + "OVERLAY_SET_NOT_IDLE": "OVERLAY_SET_NOT_IDLE", + "OVERLAY_JOIN_GAME": "OVERLAY_JOIN_GAME", + "CREATE_OVERLAY_NOTIFICATION": "CREATE_OVERLAY_NOTIFICATION", + "OVERLAY_UPDATE_NOTIFICATION_STATUS": "OVERLAY_UPDATE_NOTIFICATION_STATUS", + "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT": "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT", + "OVERLAY_INCOMPATIBLE_APP": "OVERLAY_INCOMPATIBLE_APP", + "OVERLAY_START_SESSION": "OVERLAY_START_SESSION", + "OVERLAY_ACTIVATE_REGION": "OVERLAY_ACTIVATE_REGION", + "OVERLAY_DEACTIVATE_ALL_REGIONS": "OVERLAY_DEACTIVATE_ALL_REGIONS", + "OVERLAY_SET_PREVIEW_IN_GAME_MODE": "OVERLAY_SET_PREVIEW_IN_GAME_MODE", + "USER_GUILD_SETTINGS_UPDATE": "USER_GUILD_SETTINGS_UPDATE", + "STREAMER_MODE_UPDATE": "STREAMER_MODE_UPDATE", + "STREAMING_UPDATE": "STREAMING_UPDATE", + "USER_SETTINGS_MODAL_OPEN": "USER_SETTINGS_MODAL_OPEN", + "USER_SETTINGS_MODAL_INIT": "USER_SETTINGS_MODAL_INIT", + "USER_SETTINGS_MODAL_CLOSE": "USER_SETTINGS_MODAL_CLOSE", + "USER_SETTINGS_MODAL_SUBMIT": "USER_SETTINGS_MODAL_SUBMIT", + "USER_SETTINGS_MODAL_SUBMIT_FAILURE": "USER_SETTINGS_MODAL_SUBMIT_FAILURE", + "USER_SETTINGS_MODAL_SUBMIT_COMPLETE": "USER_SETTINGS_MODAL_SUBMIT_COMPLETE", + "USER_SETTINGS_MODAL_RESET": "USER_SETTINGS_MODAL_RESET", + "USER_SETTINGS_MODAL_SET_SECTION": "USER_SETTINGS_MODAL_SET_SECTION", + "USER_SETTINGS_MODAL_UPDATE_ACCOUNT": "USER_SETTINGS_MODAL_UPDATE_ACCOUNT", + "USER_SETTINGS_MODAL_UPDATE_AUTHORIZED_APPS": "USER_SETTINGS_MODAL_UPDATE_AUTHORIZED_APPS", + "RTC_DEBUG_MODAL_OPEN": "RTC_DEBUG_MODAL_OPEN", + "RTC_DEBUG_MODAL_CLOSE": "RTC_DEBUG_MODAL_CLOSE", + "RTC_DEBUG_MODAL_SET_SECTION": "RTC_DEBUG_MODAL_SET_SECTION", + "RTC_DEBUG_MODAL_UPDATE": "RTC_DEBUG_MODAL_UPDATE", + "RTC_DEBUG_MODAL_OPEN_REPLAY": "RTC_DEBUG_MODAL_OPEN_REPLAY", + "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH": "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH", + "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT": "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT", + "RTC_DEBUG_SET_RECORDING_FLAG": "RTC_DEBUG_SET_RECORDING_FLAG", + "USER_SETTINGS_ACCOUNT_INIT": "USER_SETTINGS_ACCOUNT_INIT", + "USER_SETTINGS_ACCOUNT_CLOSE": "USER_SETTINGS_ACCOUNT_CLOSE", + "USER_SETTINGS_ACCOUNT_TOGGLE_EDITING_PROFILE": "USER_SETTINGS_ACCOUNT_TOGGLE_EDITING_PROFILE", + "USER_SETTINGS_ACCOUNT_TOGGLE_EDITING_PASSWORD": "USER_SETTINGS_ACCOUNT_TOGGLE_EDITING_PASSWORD", + "USER_SETTINGS_ACCOUNT_UPDATE_INFO": "USER_SETTINGS_ACCOUNT_UPDATE_INFO", + "USER_SETTINGS_ACCOUNT_SUBMIT": "USER_SETTINGS_ACCOUNT_SUBMIT", + "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS": "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS", + "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE": "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE", + "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS": "HYPESQUAD_ONLINE_MEMBERSHIP_JOIN_SUCCESS", + "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS": "HYPESQUAD_ONLINE_MEMBERSHIP_LEAVE_SUCCESS", + "CREATE_GUILD_MODAL_OPEN": "CREATE_GUILD_MODAL_OPEN", + "CREATE_GUILD_MODAL_SET_SCREEN": "CREATE_GUILD_MODAL_SET_SCREEN", + "CREATE_GUILD_MODAL_UPDATE": "CREATE_GUILD_MODAL_UPDATE", + "CREATE_GUILD_MODAL_CLOSE": "CREATE_GUILD_MODAL_CLOSE", + "CREATE_GUILD_MODAL_SUBMIT": "CREATE_GUILD_MODAL_SUBMIT", + "CREATE_GUILD_MODAL_SUBMIT_FAILURE": "CREATE_GUILD_MODAL_SUBMIT_FAILURE", + "GUILD_SETTINGS_INIT": "GUILD_SETTINGS_INIT", + "GUILD_SETTINGS_OPEN": "GUILD_SETTINGS_OPEN", + "GUILD_SETTINGS_CLOSE": "GUILD_SETTINGS_CLOSE", + "GUILD_SETTINGS_UPDATE": "GUILD_SETTINGS_UPDATE", + "GUILD_SETTINGS_CANCEL_CHANGES": "GUILD_SETTINGS_CANCEL_CHANGES", + "GUILD_SETTINGS_SUBMIT": "GUILD_SETTINGS_SUBMIT", + "GUILD_SETTINGS_SUBMIT_SUCCESS": "GUILD_SETTINGS_SUBMIT_SUCCESS", + "GUILD_SETTINGS_SUBMIT_FAILURE": "GUILD_SETTINGS_SUBMIT_FAILURE", + "GUILD_SETTINGS_SET_SECTION": "GUILD_SETTINGS_SET_SECTION", + "GUILD_SETTINGS_SET_SEARCH_QUERY": "GUILD_SETTINGS_SET_SEARCH_QUERY", + "GUILD_SETTINGS_LOADED_BANS": "GUILD_SETTINGS_LOADED_BANS", + "GUILD_SETTINGS_LOADED_INVITES": "GUILD_SETTINGS_LOADED_INVITES", + "GUILD_SETTINGS_LOADED_INTEGATIONS": "GUILD_SETTINGS_LOADED_INTEGATIONS", + "GUILD_SETTINGS_ROLE_SELECT": "GUILD_SETTINGS_ROLE_SELECT", + "GUILD_SETTINGS_SET_EMBED": "GUILD_SETTINGS_SET_EMBED", + "GUILD_SETTINGS_SET_VANITY_URL": "GUILD_SETTINGS_SET_VANITY_URL", + "GUILD_SETTINGS_SET_MFA_SUCCESS": "GUILD_SETTINGS_SET_MFA_SUCCESS", + "GUILD_SETTINGS_SET_AUDIT_LOG": "GUILD_SETTINGS_SET_AUDIT_LOG", + "GUILD_SETTINGS_DISCOVERY_INIT": "GUILD_SETTINGS_DISCOVERY_INIT", + "GUILD_SETTINGS_DISCOVERY_CLOSE": "GUILD_SETTINGS_DISCOVERY_CLOSE", + "GUILD_SETTINGS_DISCOVERY_RESET": "GUILD_SETTINGS_DISCOVERY_RESET", + "GUILD_SETTINGS_DISCOVERY_UPDATE": "GUILD_SETTINGS_DISCOVERY_UPDATE", + "GUILD_SETTINGS_DISCOVERY_SUBMIT": "GUILD_SETTINGS_DISCOVERY_SUBMIT", + "GUILD_SETTINGS_DISCOVERY_SUBMIT_SUCCESS": "GUILD_SETTINGS_DISCOVERY_SUBMIT_SUCCESS", + "GUILD_SETTINGS_DISCOVERY_SUBMIT_FAILURE": "GUILD_SETTINGS_DISCOVERY_SUBMIT_FAILURE", + "GUILD_SETTINGS_VANITY_URL_CLOSE": "GUILD_SETTINGS_VANITY_URL_CLOSE", + "GUILD_SETTINGS_VANITY_URL_RESET": "GUILD_SETTINGS_VANITY_URL_RESET", + "GUILD_SETTINGS_VANITY_URL_SET": "GUILD_SETTINGS_VANITY_URL_SET", + "GUILD_SETTINGS_VANITY_URL_ERROR": "GUILD_SETTINGS_VANITY_URL_ERROR", + "GUILD_SETTINGS_ROLES_INIT": "GUILD_SETTINGS_ROLES_INIT", + "GUILD_SETTINGS_ROLES_SORT_UPDATE": "GUILD_SETTINGS_ROLES_SORT_UPDATE", + "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS": "GUILD_SETTINGS_ROLES_UPDATE_PERMISSIONS", + "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS": "GUILD_SETTINGS_ROLES_CLEAR_PERMISSIONS", + "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS": "GUILD_SETTINGS_ROLES_UPDATE_SETTINGS", + "GUILD_SETTINGS_ROLES_UPDATE_NAME": "GUILD_SETTINGS_ROLES_UPDATE_NAME", + "GUILD_SETTINGS_ROLES_UPDATE_COLOR": "GUILD_SETTINGS_ROLES_UPDATE_COLOR", + "GUILD_SETTINGS_ROLES_SAVE_SUCCESS": "GUILD_SETTINGS_ROLES_SAVE_SUCCESS", + "GUILD_SETTINGS_ROLES_SUBMITTING": "GUILD_SETTINGS_ROLES_SUBMITTING", + "GUILD_SETTINGS_MODAL_ROLES_START_REORDER": "GUILD_SETTINGS_MODAL_ROLES_START_REORDER", + "GUILD_SETTINGS_MODAL_ROLES_STOP_REORDER": "GUILD_SETTINGS_MODAL_ROLES_STOP_REORDER", + "GUILD_SETTINGS_MODAL_ROLES_EDIT_ORDER": "GUILD_SETTINGS_MODAL_ROLES_EDIT_ORDER", + "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_START_EDITING": "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_START_EDITING", + "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_STOP_EDITING": "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_STOP_EDITING", + "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_CANCEL": "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_CANCEL", + "GUILD_SETTINGS_MODAL_ROLES_PERMISSION_ALLOW": "GUILD_SETTINGS_MODAL_ROLES_PERMISSION_ALLOW", + "GUILD_SETTINGS_MODAL_ROLES_PERMISSION_DENY": "GUILD_SETTINGS_MODAL_ROLES_PERMISSION_DENY", + "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_SUBMITTING": "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_SUBMITTING", + "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_SUBMITTING_SUCCESS": "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_SUBMITTING_SUCCESS", + "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_SUBMITTING_FAILURE": "GUILD_SETTINGS_MODAL_ROLES_PERMISSIONS_SUBMITTING_FAILURE", + "GUILD_SETTINGS_MODAL_CHANNELS_INIT": "GUILD_SETTINGS_MODAL_CHANNELS_INIT", + "GUILD_SETTINGS_MODAL_CHANNELS_TERMINATE": "GUILD_SETTINGS_MODAL_CHANNELS_TERMINATE", + "GUILD_SETTINGS_MODAL_CHANNELS_START_REORDER": "GUILD_SETTINGS_MODAL_CHANNELS_START_REORDER", + "GUILD_SETTINGS_MODAL_CHANNELS_STOP_REORDER": "GUILD_SETTINGS_MODAL_CHANNELS_STOP_REORDER", + "GUILD_SETTINGS_MODAL_CHANNELS_ADD_CHANNEL": "GUILD_SETTINGS_MODAL_CHANNELS_ADD_CHANNEL", + "GUILD_SETTINGS_MODAL_CHANNELS_ADD_CHANNEL_FAILURE": "GUILD_SETTINGS_MODAL_CHANNELS_ADD_CHANNEL_FAILURE", + "GUILD_SETTINGS_MODAL_MEMBERS_START_EDITING": "GUILD_SETTINGS_MODAL_MEMBERS_START_EDITING", + "GUILD_SETTINGS_MODAL_MEMBERS_STOP_EDITING": "GUILD_SETTINGS_MODAL_MEMBERS_STOP_EDITING", + "GUILD_SETTINGS_MODAL_MEMBERS_TOGGLE_ROLE": "GUILD_SETTINGS_MODAL_MEMBERS_TOGGLE_ROLE", + "GUILD_SETTINGS_MODAL_MEMBERS_ROLES_SAVE": "GUILD_SETTINGS_MODAL_MEMBERS_ROLES_SAVE", + "GUILD_SETTINGS_MODAL_MEMBERS_ROLES_SAVE_COMPLETE": "GUILD_SETTINGS_MODAL_MEMBERS_ROLES_SAVE_COMPLETE", + "GUILD_SETTINGS_MODAL_MEMBERS_CHANGE_NICKNAME": "GUILD_SETTINGS_MODAL_MEMBERS_CHANGE_NICKNAME", + "GUILD_SETTINGS_MODAL_MEMBERS_CHANGE_NICKNAME_SUCCESS": "GUILD_SETTINGS_MODAL_MEMBERS_CHANGE_NICKNAME_SUCCESS", + "GUILD_SETTINGS_MODAL_MEMBERS_CHANGE_NICKNAME_FAILURE": "GUILD_SETTINGS_MODAL_MEMBERS_CHANGE_NICKNAME_FAILURE", + "GUILD_SETTINGS_MODAL_LOCAL_SORT_CHANGE": "GUILD_SETTINGS_MODAL_LOCAL_SORT_CHANGE", + "PREMIUM_PAYMENT_MODAL_OPEN": "PREMIUM_PAYMENT_MODAL_OPEN", + "PREMIUM_PAYMENT_MODAL_CLOSE": "PREMIUM_PAYMENT_MODAL_CLOSE", + "PREMIUM_PAYMENT_SUBSCRIBE_START": "PREMIUM_PAYMENT_SUBSCRIBE_START", + "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS": "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS", + "PREMIUM_PAYMENT_SUBSCRIBE_FAIL": "PREMIUM_PAYMENT_SUBSCRIBE_FAIL", + "PREMIUM_PAYMENT_UPDATE_SUCCESS": "PREMIUM_PAYMENT_UPDATE_SUCCESS", + "PREMIUM_PAYMENT_UPDATE_FAIL": "PREMIUM_PAYMENT_UPDATE_FAIL", + "PREMIUM_PAYMENT_ERROR_CLEAR": "PREMIUM_PAYMENT_ERROR_CLEAR", + "PREMIUM_PAYMENT_UPDATE_IS_GIFT": "PREMIUM_PAYMENT_UPDATE_IS_GIFT", + "PREMIUM_PAYMENT_UPDATE_GIFT_PLAN": "PREMIUM_PAYMENT_UPDATE_GIFT_PLAN", + "PREMIUM_PAYMENT_SELECT_PLAN": "PREMIUM_PAYMENT_SELECT_PLAN", + "PREMIUM_EXPIRATION_MODAL_CLOSE": "PREMIUM_EXPIRATION_MODAL_CLOSE", + "BILLING_PAYMENT_SOURCE_CREATE_START": "BILLING_PAYMENT_SOURCE_CREATE_START", + "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS": "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS", + "BILLING_PAYMENT_SOURCE_CREATE_FAIL": "BILLING_PAYMENT_SOURCE_CREATE_FAIL", + "BILLING_PAYMENT_SOURCE_UPDATE_START": "BILLING_PAYMENT_SOURCE_UPDATE_START", + "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS": "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS", + "BILLING_PAYMENT_SOURCE_UPDATE_FAIL": "BILLING_PAYMENT_SOURCE_UPDATE_FAIL", + "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR": "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR", + "BILLING_PAYMENT_SOURCE_REMOVE_START": "BILLING_PAYMENT_SOURCE_REMOVE_START", + "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS": "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS", + "BILLING_PAYMENT_SOURCE_REMOVE_FAIL": "BILLING_PAYMENT_SOURCE_REMOVE_FAIL", + "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR": "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR", + "BILLING_PAYMENT_SOURCES_FETCH_START": "BILLING_PAYMENT_SOURCES_FETCH_START", + "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS": "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS", + "BILLING_PAYMENT_SOURCES_FETCH_FAIL": "BILLING_PAYMENT_SOURCES_FETCH_FAIL", + "BILLING_PAYMENTS_FETCH_START": "BILLING_PAYMENTS_FETCH_START", + "BILLING_PAYMENTS_FETCH_SUCCESS": "BILLING_PAYMENTS_FETCH_SUCCESS", + "BILLING_PAYMENTS_FETCH_FAIL": "BILLING_PAYMENTS_FETCH_FAIL", + "PAYMENT_AUTHENTICATION_MODAL_CLOSE": "PAYMENT_AUTHENTICATION_MODAL_CLOSE", + "PAYMENT_AUTHENTICATION_ERROR": "PAYMENT_AUTHENTICATION_ERROR", + "PAYMENT_AUTHENTICATION_CLEAR_ERROR": "PAYMENT_AUTHENTICATION_CLEAR_ERROR", + "BILLING_SUBSCRIPTION_FETCH_START": "BILLING_SUBSCRIPTION_FETCH_START", + "BILLING_SUBSCRIPTION_FETCH_SUCCESS": "BILLING_SUBSCRIPTION_FETCH_SUCCESS", + "BILLING_SUBSCRIPTION_FETCH_FAIL": "BILLING_SUBSCRIPTION_FETCH_FAIL", + "BILLING_SUBSCRIPTION_UPDATE_START": "BILLING_SUBSCRIPTION_UPDATE_START", + "BILLING_SUBSCRIPTION_UPDATE_SUCCESS": "BILLING_SUBSCRIPTION_UPDATE_SUCCESS", + "BILLING_SUBSCRIPTION_UPDATE_FAIL": "BILLING_SUBSCRIPTION_UPDATE_FAIL", + "BILLING_SUBSCRIPTION_CANCEL_START": "BILLING_SUBSCRIPTION_CANCEL_START", + "BILLING_SUBSCRIPTION_CANCEL_SUCCESS": "BILLING_SUBSCRIPTION_CANCEL_SUCCESS", + "BILLING_SUBSCRIPTION_CANCEL_FAIL": "BILLING_SUBSCRIPTION_CANCEL_FAIL", + "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE": "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE", + "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE": "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE", + "NEW_PAYMENT_SOURCE_CLEAR_ERROR": "NEW_PAYMENT_SOURCE_CLEAR_ERROR", + "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE": "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE", + "NOTIFICATION_SETTINGS_MODAL_OPEN": "NOTIFICATION_SETTINGS_MODAL_OPEN", + "NOTIFICATION_SETTINGS_MODAL_CLOSE": "NOTIFICATION_SETTINGS_MODAL_CLOSE", + "CREATE_CHANNEL_MODAL_OPEN": "CREATE_CHANNEL_MODAL_OPEN", + "CREATE_CHANNEL_MODAL_CLOSE": "CREATE_CHANNEL_MODAL_CLOSE", + "CREATE_CHANNEL_MODAL_SUBMIT": "CREATE_CHANNEL_MODAL_SUBMIT", + "CREATE_CHANNEL_MODAL_SUBMIT_FAILURE": "CREATE_CHANNEL_MODAL_SUBMIT_FAILURE", + "CHANNEL_SETTINGS_OPEN": "CHANNEL_SETTINGS_OPEN", + "CHANNEL_SETTINGS_INIT": "CHANNEL_SETTINGS_INIT", + "CHANNEL_SETTINGS_CLOSE": "CHANNEL_SETTINGS_CLOSE", + "CHANNEL_SETTINGS_UPDATE": "CHANNEL_SETTINGS_UPDATE", + "CHANNEL_SETTINGS_SUBMIT": "CHANNEL_SETTINGS_SUBMIT", + "CHANNEL_SETTINGS_SUBMIT_SUCCESS": "CHANNEL_SETTINGS_SUBMIT_SUCCESS", + "CHANNEL_SETTINGS_SUBMIT_FAILURE": "CHANNEL_SETTINGS_SUBMIT_FAILURE", + "CHANNEL_SETTINGS_SET_SECTION": "CHANNEL_SETTINGS_SET_SECTION", + "CHANNEL_SETTINGS_OVERWRITE_SELECT": "CHANNEL_SETTINGS_OVERWRITE_SELECT", + "CHANNEL_SETTINGS_LOADED_INVITES": "CHANNEL_SETTINGS_LOADED_INVITES", + "SET_CHANNEL_BITRATE": "SET_CHANNEL_BITRATE", + "PRIVACY_SETTINGS_MODAL_OPEN": "PRIVACY_SETTINGS_MODAL_OPEN", + "PRIVACY_SETTINGS_MODAL_CLOSE": "PRIVACY_SETTINGS_MODAL_CLOSE", + "CHANGE_NICKNAME_MODAL_OPEN": "CHANGE_NICKNAME_MODAL_OPEN", + "CHANGE_NICKNAME_MODAL_CLOSE": "CHANGE_NICKNAME_MODAL_CLOSE", + "CHANGE_NICKNAME_MODAL_SUBMIT": "CHANGE_NICKNAME_MODAL_SUBMIT", + "CHANGE_NICKNAME_MODAL_SUBMIT_FAILURE": "CHANGE_NICKNAME_MODAL_SUBMIT_FAILURE", + "CHANGE_VANITY_URL_MODAL_OPEN": "CHANGE_VANITY_URL_MODAL_OPEN", + "CHANGE_VANITY_URL_MODAL_CLOSE": "CHANGE_VANITY_URL_MODAL_CLOSE", + "CHANGE_VANITY_URL_MODAL_SUBMIT": "CHANGE_VANITY_URL_MODAL_SUBMIT", + "CHANGE_VANITY_URL_MODAL_SUBMIT_FAILURE": "CHANGE_VANITY_URL_MODAL_SUBMIT_FAILURE", + "USER_PROFILE_MODAL_OPEN": "USER_PROFILE_MODAL_OPEN", + "USER_PROFILE_MODAL_CLOSE": "USER_PROFILE_MODAL_CLOSE", + "USER_PROFILE_MODAL_SET_SECTION": "USER_PROFILE_MODAL_SET_SECTION", + "USER_PROFILE_MODAL_PUSH": "USER_PROFILE_MODAL_PUSH", + "USER_PROFILE_MODAL_POP": "USER_PROFILE_MODAL_POP", + "USER_PROFILE_MODAL_FETCH_SUCCESS": "USER_PROFILE_MODAL_FETCH_SUCCESS", + "LOAD_MUTUAL_FRIENDS": "LOAD_MUTUAL_FRIENDS", + "PRUNE_GUILD_MODAL_OPEN": "PRUNE_GUILD_MODAL_OPEN", + "PRUNE_GUILD_MODAL_UPDATE": "PRUNE_GUILD_MODAL_UPDATE", + "PRUNE_GUILD_MODAL_CLOSE": "PRUNE_GUILD_MODAL_CLOSE", + "STATUS_PAGE_INCIDENT": "STATUS_PAGE_INCIDENT", + "STATUS_PAGE_SCHEDULED_MAINTENANCE": "STATUS_PAGE_SCHEDULED_MAINTENANCE", + "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK": "STATUS_PAGE_SCHEDULED_MAINTENANCE_ACK", + "GUILD_VERIFICATION_CHECK": "GUILD_VERIFICATION_CHECK", + "RUNNING_GAME_ADD_OVERRIDE": "RUNNING_GAME_ADD_OVERRIDE", + "RUNNING_GAME_TOGGLE_BLOCK": "RUNNING_GAME_TOGGLE_BLOCK", + "RUNNING_GAME_TOGGLE_OVERLAY": "RUNNING_GAME_TOGGLE_OVERLAY", + "RUNNING_GAME_EDIT_NAME": "RUNNING_GAME_EDIT_NAME", + "RUNNING_GAME_DELETE_ENTRY": "RUNNING_GAME_DELETE_ENTRY", + "UPLOAD_MODAL_POP_FILE": "UPLOAD_MODAL_POP_FILE", + "UPLOAD_MODAL_PUSH_FILES": "UPLOAD_MODAL_PUSH_FILES", + "UPLOAD_MODAL_CLEAR_ALL_FILES": "UPLOAD_MODAL_CLEAR_ALL_FILES", + "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN": "PRIVATE_CHANNEL_RECIPIENTS_INVITE_OPEN", + "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE": "PRIVATE_CHANNEL_RECIPIENTS_INVITE_CLOSE", + "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY": "PRIVATE_CHANNEL_RECIPIENTS_INVITE_QUERY", + "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT": "PRIVATE_CHANNEL_RECIPIENTS_INVITE_SELECT", + "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER": "PRIVATE_CHANNEL_RECIPIENTS_ADD_USER", + "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER": "PRIVATE_CHANNEL_RECIPIENTS_REMOVE_USER", + "CHANNEL_RTC_SELECT_PARTICIPANT": "CHANNEL_RTC_SELECT_PARTICIPANT", + "CHANNEL_RTC_UPDATE_LAYOUT": "CHANNEL_RTC_UPDATE_LAYOUT", + "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN": "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN", + "CHANNEL_RTC_ACTIVE_CHANNELS": "CHANNEL_RTC_ACTIVE_CHANNELS", + "REPORT_MESSAGE_MODAL_OPEN": "REPORT_MESSAGE_MODAL_OPEN", + "ACCESSIBILITY_SET_FONT_SIZE": "ACCESSIBILITY_SET_FONT_SIZE", + "ACCESSIBILITY_SET_ZOOM": "ACCESSIBILITY_SET_ZOOM", + "ACCESSIBILITY_RESET_TO_DEFAULT": "ACCESSIBILITY_RESET_TO_DEFAULT", + "ACCESSIBILITY_KEYBOARD_MODE_ENABLE": "ACCESSIBILITY_KEYBOARD_MODE_ENABLE", + "ACCESSIBILITY_KEYBOARD_MODE_DISABLE": "ACCESSIBILITY_KEYBOARD_MODE_DISABLE", + "ACCESSIBILITY_COLORBLIND_TOGGLE": "ACCESSIBILITY_COLORBLIND_TOGGLE", + "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE": "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE", + "ACCESSIBILITY_SUPPORT_CHANGED": "ACCESSIBILITY_SUPPORT_CHANGED", + "ACCESSIBILITY_DETECTION_MODAL_SEEN": "ACCESSIBILITY_DETECTION_MODAL_SEEN", + "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING": "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING", + "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED": "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED", + "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION": "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION", + "GUILD_SUBSCRIPTIONS_MEMBERS_ADD": "GUILD_SUBSCRIPTIONS_MEMBERS_ADD", + "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE": "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE", + "GUILD_SUBSCRIPTIONS_CHANNEL": "GUILD_SUBSCRIPTIONS_CHANNEL", + "GUILD_SUBSCRIPTIONS_FLUSH": "GUILD_SUBSCRIPTIONS_FLUSH", + "ALERT_OPEN": "ALERT_OPEN", + "ALERT_CLOSE": "ALERT_CLOSE", + "SCREEN_UPDATE": "SCREEN_UPDATE", + "DRAWER_OPEN": "DRAWER_OPEN", + "DRAWER_CLOSE": "DRAWER_CLOSE", + "DRAWER_DRAG_START": "DRAWER_DRAG_START", + "DRAWER_DRAG_END": "DRAWER_DRAG_END", + "DRAWER_ENABLE": "DRAWER_ENABLE", + "DRAWER_DISABLE": "DRAWER_DISABLE", + "DRAWER_SELECT_TAB": "DRAWER_SELECT_TAB", + "BROWSER_UPDATE": "BROWSER_UPDATE", + "KEYBOARD_TOGGLE": "KEYBOARD_TOGGLE", + "KEYBOARD_CHANGE": "KEYBOARD_CHANGE", + "APP_STATE_UPDATE": "APP_STATE_UPDATE", + "MENTION_MODAL_OPEN": "MENTION_MODAL_OPEN", + "MENTION_MODAL_CLOSE": "MENTION_MODAL_CLOSE", + "SEARCH_MODAL_OPEN": "SEARCH_MODAL_OPEN", + "SEARCH_MODAL_CLOSE": "SEARCH_MODAL_CLOSE", + "CREATE_INVITE_MODAL_INIT": "CREATE_INVITE_MODAL_INIT", + "CREATE_INVITE_MODAL_OPEN": "CREATE_INVITE_MODAL_OPEN", + "CREATE_INVITE_MODAL_UPDATE_SETTINGS": "CREATE_INVITE_MODAL_UPDATE_SETTINGS", + "CREATE_INVITE_MODAL_RESET_SETTINGS": "CREATE_INVITE_MODAL_RESET_SETTINGS", + "CREATE_INVITE_MODAL_GENERATE_INVITE": "CREATE_INVITE_MODAL_GENERATE_INVITE", + "CREATE_INVITE_MODAL_GENERATE_INVITE_SUCCESS": "CREATE_INVITE_MODAL_GENERATE_INVITE_SUCCESS", + "CREATE_INVITE_MODAL_GENERATE_INVITE_FAILURE": "CREATE_INVITE_MODAL_GENERATE_INVITE_FAILURE", + "CREATE_INVITE_MODAL_CLOSE": "CREATE_INVITE_MODAL_CLOSE", + "ADD_IMAGE_TO_UPLOAD": "ADD_IMAGE_TO_UPLOAD", + "REMOVE_IMAGE_TO_UPLOAD": "REMOVE_IMAGE_TO_UPLOAD", + "ADD_ALL_IMAGES_TO_UPLOAD": "ADD_ALL_IMAGES_TO_UPLOAD", + "REMOVE_ALL_IMAGES_TO_UPLOAD": "REMOVE_ALL_IMAGES_TO_UPLOAD", + "PREMIUM_IAP_INIT": "PREMIUM_IAP_INIT", + "PREMIUM_IAP_PURCHASE_PRODUCT_START": "PREMIUM_IAP_PURCHASE_PRODUCT_START", + "PREMIUM_IAP_PURCHASE_PRODUCT_SUCCESS": "PREMIUM_IAP_PURCHASE_PRODUCT_SUCCESS", + "PREMIUM_IAP_PURCHASE_PRODUCT_FAILURE": "PREMIUM_IAP_PURCHASE_PRODUCT_FAILURE", + "PREMIUM_IAP_RESTORE_PURCHASES_START": "PREMIUM_IAP_RESTORE_PURCHASES_START", + "PREMIUM_IAP_RESTORE_PURCHASES_END": "PREMIUM_IAP_RESTORE_PURCHASES_END", + "CALL_CREATE": "CALL_CREATE", + "CALL_UPDATE": "CALL_UPDATE", + "CALL_DELETE": "CALL_DELETE", + "CALL_CONNECT": "CALL_CONNECT", + "CALL_RING": "CALL_RING", + "CALL_ENQUEUE_RING": "CALL_ENQUEUE_RING", + "CALL_MODAL_OPEN": "CALL_MODAL_OPEN", + "CALL_MODAL_CLOSE": "CALL_MODAL_CLOSE", + "INCOMING_CALL_MOVE": "INCOMING_CALL_MOVE", + "INVITE_MODAL_OPEN": "INVITE_MODAL_OPEN", + "INVITE_MODAL_CLOSE": "INVITE_MODAL_CLOSE", + "INVITE_MODAL_ERROR": "INVITE_MODAL_ERROR", + "SHOW_KEYBOARD_SHORTCUTS": "SHOW_KEYBOARD_SHORTCUTS", + "HIDE_KEYBOARD_SHORTCUTS": "HIDE_KEYBOARD_SHORTCUTS", + "ACTIVATE_RAGING_DEMON": "ACTIVATE_RAGING_DEMON", + "DEACTIVATE_RAGING_DEMON": "DEACTIVATE_RAGING_DEMON", + "CHANNEL_NOTICE_SHOW": "CHANNEL_NOTICE_SHOW", + "CHANNEL_NOTICE_HIDE": "CHANNEL_NOTICE_HIDE", + "PREMIUM_GUILD_GRACE_PERIOD_NOTICE_DISMISS": "PREMIUM_GUILD_GRACE_PERIOD_NOTICE_DISMISS", + "PUBLIC_UPSELL_NOTICE_DISMISS": "PUBLIC_UPSELL_NOTICE_DISMISS", + "WEBHOOKS_UPDATE": "WEBHOOKS_UPDATE", + "WEBHOOKS_FETCHING": "WEBHOOKS_FETCHING", + "WEBHOOK_CREATE": "WEBHOOK_CREATE", + "WEBHOOK_DELETE": "WEBHOOK_DELETE", + "WEBHOOK_UPDATE": "WEBHOOK_UPDATE", + "MASKED_LINK_ADD_TRUSTED_DOMAIN": "MASKED_LINK_ADD_TRUSTED_DOMAIN", + "MASKED_LINK_ADD_TRUSTED_PROTOCOL": "MASKED_LINK_ADD_TRUSTED_PROTOCOL", + "SEARCH_EDITOR_STATE_CHANGE": "SEARCH_EDITOR_STATE_CHANGE", + "SEARCH_EDITOR_STATE_CLEAR": "SEARCH_EDITOR_STATE_CLEAR", + "SEARCH_START": "SEARCH_START", + "SEARCH_INDEXING": "SEARCH_INDEXING", + "SEARCH_CLEAR": "SEARCH_CLEAR", + "SEARCH_FINISH": "SEARCH_FINISH", + "SEARCH_ENSURE_SEARCH_STATE": "SEARCH_ENSURE_SEARCH_STATE", + "SEARCH_AUTOCOMPLETE_QUERY_UPDATE": "SEARCH_AUTOCOMPLETE_QUERY_UPDATE", + "SEARCH_CLEAR_HISTORY": "SEARCH_CLEAR_HISTORY", + "SEARCH_SET_SHOW_BLOCKED_RESULTS": "SEARCH_SET_SHOW_BLOCKED_RESULTS", + "USER_SUBSCRIPTIONS_UPDATE": "USER_SUBSCRIPTIONS_UPDATE", + "USER_PAYMENT_SOURCES_UPDATE": "USER_PAYMENT_SOURCES_UPDATE", + "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_CREATE": "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_CREATE", + "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_UPDATE": "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_UPDATE", + "PAYMENT_UPDATE": "PAYMENT_UPDATE", + "QUICKSWITCHER_SHOW": "QUICKSWITCHER_SHOW", + "QUICKSWITCHER_HIDE": "QUICKSWITCHER_HIDE", + "QUICKSWITCHER_SEARCH": "QUICKSWITCHER_SEARCH", + "QUICKSWITCHER_SELECT": "QUICKSWITCHER_SELECT", + "QUICKSWITCHER_SWITCH_TO": "QUICKSWITCHER_SWITCH_TO", + "LAYER_PUSH": "LAYER_PUSH", + "LAYER_POP": "LAYER_POP", + "LAYER_POP_ALL": "LAYER_POP_ALL", + "AUDIT_LOG_FETCH_START": "AUDIT_LOG_FETCH_START", + "AUDIT_LOG_FETCH_SUCCESS": "AUDIT_LOG_FETCH_SUCCESS", + "AUDIT_LOG_FETCH_FAIL": "AUDIT_LOG_FETCH_FAIL", + "AUDIT_LOG_FETCH_NEXT_PAGE_START": "AUDIT_LOG_FETCH_NEXT_PAGE_START", + "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS": "AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS", + "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL": "AUDIT_LOG_FETCH_NEXT_PAGE_FAIL", + "AUDIT_LOG_FILTER_BY_ACTION": "AUDIT_LOG_FILTER_BY_ACTION", + "AUDIT_LOG_FILTER_BY_USER": "AUDIT_LOG_FILTER_BY_USER", + "SCREENSHARE_MODAL_OPEN": "SCREENSHARE_MODAL_OPEN", + "SCREENSHARE_MODAL_CLOSE": "SCREENSHARE_MODAL_CLOSE", + "SCREENSHARE_MODAL_SELECT_SOURCE_TYPE": "SCREENSHARE_MODAL_SELECT_SOURCE_TYPE", + "EMAIL_VERIFICATION_MODAL_OPEN": "EMAIL_VERIFICATION_MODAL_OPEN", + "EMAIL_VERIFICATION_MODAL_CLOSE": "EMAIL_VERIFICATION_MODAL_CLOSE", + "CHANNEL_SETTINGS_PERMISSIONS_INIT": "CHANNEL_SETTINGS_PERMISSIONS_INIT", + "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION": "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION", + "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION": "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION", + "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING": "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING", + "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS": "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS", + "VERIFICATION_ADDING_PHONE": "VERIFICATION_ADDING_PHONE", + "VERIFICATION_ADD_PHONE_SUCCESS": "VERIFICATION_ADD_PHONE_SUCCESS", + "VERIFICATION_ADD_PHONE_FAILURE": "VERIFICATION_ADD_PHONE_FAILURE", + "VERIFICATION_ADD_PHONE_RESET": "VERIFICATION_ADD_PHONE_RESET", + "VERIFICATION_VERIFYING_PHONE": "VERIFICATION_VERIFYING_PHONE", + "VERIFICATION_VERIFY_PHONE_SUCCESS": "VERIFICATION_VERIFY_PHONE_SUCCESS", + "VERIFICATION_VERIFY_PHONE_FAILURE": "VERIFICATION_VERIFY_PHONE_FAILURE", + "VERIFICATION_SELECT_COUNTRY": "VERIFICATION_SELECT_COUNTRY", + "VERIFICATION_OPEN_COUNTRY_SELECTOR": "VERIFICATION_OPEN_COUNTRY_SELECTOR", + "VERIFICATION_CLOSE_COUNTRY_SELECTOR": "VERIFICATION_CLOSE_COUNTRY_SELECTOR", + "RPC_SERVER_READY": "RPC_SERVER_READY", + "PICTURE_IN_PICTURE_OPEN": "PICTURE_IN_PICTURE_OPEN", + "PICTURE_IN_PICTURE_CLOSE": "PICTURE_IN_PICTURE_CLOSE", + "PICTURE_IN_PICTURE_MOVE": "PICTURE_IN_PICTURE_MOVE", + "CATEGORY_COLLAPSE": "CATEGORY_COLLAPSE", + "CATEGORY_EXPAND": "CATEGORY_EXPAND", + "CATEGORY_COLLAPSE_ALL": "CATEGORY_COLLAPSE_ALL", + "CATEGORY_EXPAND_ALL": "CATEGORY_EXPAND_ALL", + "SURVEY_HIDE": "SURVEY_HIDE", + "APP_VIEW_SET_HOME_LINK": "APP_VIEW_SET_HOME_LINK", + "SPOTIFY_PROFILE_UPDATE": "SPOTIFY_PROFILE_UPDATE", + "SPOTIFY_PLAYER_STATE": "SPOTIFY_PLAYER_STATE", + "SPOTIFY_PLAYER_PLAY": "SPOTIFY_PLAYER_PLAY", + "SPOTIFY_PLAYER_PAUSE": "SPOTIFY_PLAYER_PAUSE", + "SPOTIFY_ACCOUNT_ACCESS_TOKEN": "SPOTIFY_ACCOUNT_ACCESS_TOKEN", + "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE": "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE", + "SPOTIFY_SET_DEVICES": "SPOTIFY_SET_DEVICES", + "SPOTIFY_SET_PROTOCOL_REGISTERED": "SPOTIFY_SET_PROTOCOL_REGISTERED", + "SPOTIFY_SET_ACTIVE_DEVICE": "SPOTIFY_SET_ACTIVE_DEVICE", + "I18N_LOAD_START": "I18N_LOAD_START", + "I18N_LOAD_SUCCESS": "I18N_LOAD_SUCCESS", + "I18N_LOAD_ERROR": "I18N_LOAD_ERROR", + "CLAIM_ACCOUNT_MODAL_OPEN": "CLAIM_ACCOUNT_MODAL_OPEN", + "CLAIM_ACCOUNT_BIRTHDAY_SUBMITTED": "CLAIM_ACCOUNT_BIRTHDAY_SUBMITTED", + "CLAIM_ACCOUNT_BIRTHDAY_SUCCESS": "CLAIM_ACCOUNT_BIRTHDAY_SUCCESS", + "CLAIM_ACCOUNT_BIRTHDAY_FAILURE": "CLAIM_ACCOUNT_BIRTHDAY_FAILURE", + "CLAIM_ACCOUNT_SUBMITTED": "CLAIM_ACCOUNT_SUBMITTED", + "CLAIM_ACCOUNT_SUCCESS": "CLAIM_ACCOUNT_SUCCESS", + "CLAIM_ACCOUNT_FAILURE": "CLAIM_ACCOUNT_FAILURE", + "CLAIM_ACCOUNT_MODAL_CLOSE": "CLAIM_ACCOUNT_MODAL_CLOSE", + "LOGIN_MODAL_OPEN": "LOGIN_MODAL_OPEN", + "LOGIN_MODAL_CLOSE": "LOGIN_MODAL_CLOSE", + "REGISTER_MODAL_OPEN": "REGISTER_MODAL_OPEN", + "REGISTER_MODAL_CLOSE": "REGISTER_MODAL_CLOSE", + "DEVELOPER_OPTIONS_UPDATE_SETTINGS": "DEVELOPER_OPTIONS_UPDATE_SETTINGS", + "STRIPE_TOKEN_FAILURE": "STRIPE_TOKEN_FAILURE", + "BRAINTREE_POPUP_BRIDGE_CALLBACK_START": "BRAINTREE_POPUP_BRIDGE_CALLBACK_START", + "BRAINTREE_POPUP_BRIDGE_CALLBACK_END": "BRAINTREE_POPUP_BRIDGE_CALLBACK_END", + "BRAINTREE_POPUP_BRIDGE_CALLBACK": "BRAINTREE_POPUP_BRIDGE_CALLBACK", + "BRAINTREE_POPUP_BRIDGE_STATE_UPDATE": "BRAINTREE_POPUP_BRIDGE_STATE_UPDATE", + "BRAINTREE_CREATE_CLIENT_FAIL": "BRAINTREE_CREATE_CLIENT_FAIL", + "BRAINTREE_CREATE_CLIENT_SUCCESS": "BRAINTREE_CREATE_CLIENT_SUCCESS", + "BRAINTREE_CREATE_PAYPAL_CLIENT_FAIL": "BRAINTREE_CREATE_PAYPAL_CLIENT_FAIL", + "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS": "BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS", + "BRAINTREE_TEARDOWN_PAYPAL_CLIENT": "BRAINTREE_TEARDOWN_PAYPAL_CLIENT", + "BRAINTREE_TOKENIZE_PAYPAL_START": "BRAINTREE_TOKENIZE_PAYPAL_START", + "BRAINTREE_TOKENIZE_PAYPAL_FAIL": "BRAINTREE_TOKENIZE_PAYPAL_FAIL", + "BRAINTREE_TOKENIZE_PAYPAL_FAIL_WINDOW_CLOSED": "BRAINTREE_TOKENIZE_PAYPAL_FAIL_WINDOW_CLOSED", + "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS": "BRAINTREE_TOKENIZE_PAYPAL_SUCCESS", + "SPELLCHECK_TOGGLE": "SPELLCHECK_TOGGLE", + "SPELLCHECK_LEARN_WORD": "SPELLCHECK_LEARN_WORD", + "LIBRARY_FETCH_SUCCESS": "LIBRARY_FETCH_SUCCESS", + "LIBRARY_FETCH_FAIL": "LIBRARY_FETCH_FAIL", + "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS": "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS", + "LIBRARY_APPLICATION_FLAGS_UPDATE_START": "LIBRARY_APPLICATION_FLAGS_UPDATE_START", + "LIBRARY_TABLE_SORT_UPDATE": "LIBRARY_TABLE_SORT_UPDATE", + "LIBRARY_APPLICATION_FILTER_UPDATE": "LIBRARY_APPLICATION_FILTER_UPDATE", + "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE": "LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE", + "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE": "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE", + "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE": "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE", + "LIBRARY_APPLICATION_DELETE": "LIBRARY_APPLICATION_DELETE", + "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED": "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED", + "LIBRARY_APPLICATION_UPDATE": "LIBRARY_APPLICATION_UPDATE", + "SCANNED_LOCAL_APPLICATION_SCAN_START": "SCANNED_LOCAL_APPLICATION_SCAN_START", + "SCANNED_LOCAL_APPLICATION_SCAN_SUCCESS": "SCANNED_LOCAL_APPLICATION_SCAN_SUCCESS", + "SCANNED_LOCAL_APPLICATION_SCAN_FAIL": "SCANNED_LOCAL_APPLICATION_SCAN_FAIL", + "SCANNED_LOCAL_APPLICATION_ADD": "SCANNED_LOCAL_APPLICATION_ADD", + "SCANNED_LOCAL_APPLICATION_UPDATE_FLAGS": "SCANNED_LOCAL_APPLICATION_UPDATE_FLAGS", + "HOMEPAGE_NUF_NEXT": "HOMEPAGE_NUF_NEXT", + "HOMEPAGE_NUF_DISMISS": "HOMEPAGE_NUF_DISMISS", + "CERTIFIED_DEVICES_SET": "CERTIFIED_DEVICES_SET", + "CERTIFIED_DEVICE_RECOMMENDATIONS_IGNORE": "CERTIFIED_DEVICE_RECOMMENDATIONS_IGNORE", + "CONNECTED_DEVICE_SET": "CONNECTED_DEVICE_SET", + "CONNECTED_DEVICE_IGNORE": "CONNECTED_DEVICE_IGNORE", + "CONNECTED_DEVICE_NEVER_SHOW_MODAL": "CONNECTED_DEVICE_NEVER_SHOW_MODAL", + "SET_CONSENT_REQUIRED": "SET_CONSENT_REQUIRED", + "UPDATE_CONSENTS": "UPDATE_CONSENTS", + "LOBBY_CONNECT": "LOBBY_CONNECT", + "LOBBY_DISCONNECT": "LOBBY_DISCONNECT", + "LOBBY_CREATE": "LOBBY_CREATE", + "LOBBY_DELETE": "LOBBY_DELETE", + "LOBBY_UPDATE": "LOBBY_UPDATE", + "LOBBY_MEMBER_CONNECT": "LOBBY_MEMBER_CONNECT", + "LOBBY_MEMBER_DISCONNECT": "LOBBY_MEMBER_DISCONNECT", + "LOBBY_MEMBER_UPDATE": "LOBBY_MEMBER_UPDATE", + "LOBBY_MESSAGE": "LOBBY_MESSAGE", + "LOBBY_VOICE_CONNECT": "LOBBY_VOICE_CONNECT", + "LOBBY_VOICE_DISCONNECT": "LOBBY_VOICE_DISCONNECT", + "LOBBY_VOICE_STATE_UPDATE": "LOBBY_VOICE_STATE_UPDATE", + "LOBBY_VOICE_SERVER_UPDATE": "LOBBY_VOICE_SERVER_UPDATE", + "ACTIVITY_INVITE_MODAL_OPEN": "ACTIVITY_INVITE_MODAL_OPEN", + "ACTIVITY_INVITE_MODAL_QUERY": "ACTIVITY_INVITE_MODAL_QUERY", + "ACTIVITY_INVITE_MODAL_SEND": "ACTIVITY_INVITE_MODAL_SEND", + "ACTIVITY_INVITE_MODAL_CLOSE": "ACTIVITY_INVITE_MODAL_CLOSE", + "VOICE_SETTINGS_MODAL_OPEN": "VOICE_SETTINGS_MODAL_OPEN", + "VOICE_SETTINGS_MODAL_CLOSE": "VOICE_SETTINGS_MODAL_CLOSE", + "DISPATCH_APPLICATION_INSTALL": "DISPATCH_APPLICATION_INSTALL", + "DISPATCH_APPLICATION_UPDATE": "DISPATCH_APPLICATION_UPDATE", + "DISPATCH_APPLICATION_UNINSTALL": "DISPATCH_APPLICATION_UNINSTALL", + "DISPATCH_APPLICATION_CANCEL": "DISPATCH_APPLICATION_CANCEL", + "DISPATCH_APPLICATION_REPAIR": "DISPATCH_APPLICATION_REPAIR", + "DISPATCH_APPLICATION_MOVE_UP": "DISPATCH_APPLICATION_MOVE_UP", + "DISPATCH_APPLICATION_REMOVE_FINISHED": "DISPATCH_APPLICATION_REMOVE_FINISHED", + "DISPATCH_APPLICATION_STATE_UPDATE": "DISPATCH_APPLICATION_STATE_UPDATE", + "DISPATCH_APPLICATION_ERROR": "DISPATCH_APPLICATION_ERROR", + "DISPATCH_APPLICATION_LAUNCH_SETUP_START": "DISPATCH_APPLICATION_LAUNCH_SETUP_START", + "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE": "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE", + "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE": "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE", + "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS": "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS", + "APPLICATION_BUILD_FETCH_START": "APPLICATION_BUILD_FETCH_START", + "APPLICATION_BUILD_FETCH_SUCCESS": "APPLICATION_BUILD_FETCH_SUCCESS", + "APPLICATION_BUILD_NOT_FOUND": "APPLICATION_BUILD_NOT_FOUND", + "APPLICATION_BUILD_SIZE_FETCH_START": "APPLICATION_BUILD_SIZE_FETCH_START", + "APPLICATION_BUILD_SIZE_FETCH_SUCCESS": "APPLICATION_BUILD_SIZE_FETCH_SUCCESS", + "APPLICATION_BUILD_SIZE_FETCH_FAIL": "APPLICATION_BUILD_SIZE_FETCH_FAIL", + "APPLICATION_BRANCHES_FETCH_SUCCESS": "APPLICATION_BRANCHES_FETCH_SUCCESS", + "APPLICATION_BRANCHES_FETCH_FAIL": "APPLICATION_BRANCHES_FETCH_FAIL", + "OWNED_APPLICATION_BRANCHES_FETCH_SUCCESS": "OWNED_APPLICATION_BRANCHES_FETCH_SUCCESS", + "OWNED_APPLICATION_BRANCHES_FETCH_FAIL": "OWNED_APPLICATION_BRANCHES_FETCH_FAIL", + "APPLICATION_STORE_LOCATION_CHANGE": "APPLICATION_STORE_LOCATION_CHANGE", + "APPLICATION_STORE_DIRECTORY_UNMOUNT": "APPLICATION_STORE_DIRECTORY_UNMOUNT", + "APPLICATION_STORE_RESET_NAVIGATION": "APPLICATION_STORE_RESET_NAVIGATION", + "APPLICATION_STORE_MATURE_AGREE": "APPLICATION_STORE_MATURE_AGREE", + "APPLICATION_STORE_DIRECTORY_MUTE": "APPLICATION_STORE_DIRECTORY_MUTE", + "APPLICATION_STORE_DIRECTORY_UNMUTE": "APPLICATION_STORE_DIRECTORY_UNMUTE", + "APPLICATION_STORE_SET_HIDE_LIBRARY": "APPLICATION_STORE_SET_HIDE_LIBRARY", + "APPLICATION_STORE_SET_SEARCH_QUERY": "APPLICATION_STORE_SET_SEARCH_QUERY", + "APPLICATION_STORE_SAVE_FILTERS": "APPLICATION_STORE_SAVE_FILTERS", + "APPLICATION_STORE_CLEAR_DATA": "APPLICATION_STORE_CLEAR_DATA", + "APPLICATION_STORE_DIRECTORY_SEARCH_UPDATE": "APPLICATION_STORE_DIRECTORY_SEARCH_UPDATE", + "APPLICATION_STORE_ACCEPT_STORE_TERMS": "APPLICATION_STORE_ACCEPT_STORE_TERMS", + "APPLICATION_STORE_ACCEPT_EULA": "APPLICATION_STORE_ACCEPT_EULA", + "APPLICATION_STORE_DIRECTORY_FETCH_SUCCESS": "APPLICATION_STORE_DIRECTORY_FETCH_SUCCESS", + "APPLICATION_STORE_DIRECTORY_FETCH_FAILURE": "APPLICATION_STORE_DIRECTORY_FETCH_FAILURE", + "APPLICATION_STORE_DIRECTORY_LAYOUT_FETCH_START": "APPLICATION_STORE_DIRECTORY_LAYOUT_FETCH_START", + "APPLICATION_STORE_DIRECTORY_LAYOUT_FETCH_SUCCESS": "APPLICATION_STORE_DIRECTORY_LAYOUT_FETCH_SUCCESS", + "STORE_LISTINGS_FETCH_SUCCESS": "STORE_LISTINGS_FETCH_SUCCESS", + "STORE_LISTING_FETCH_SUCCESS": "STORE_LISTING_FETCH_SUCCESS", + "SKU_FETCH_START": "SKU_FETCH_START", + "SKU_FETCH_SUCCESS": "SKU_FETCH_SUCCESS", + "SKU_FETCH_FAIL": "SKU_FETCH_FAIL", + "SKUS_FETCH_SUCCESS": "SKUS_FETCH_SUCCESS", + "EULA_FETCH_SUCCESS": "EULA_FETCH_SUCCESS", + "DEVELOPER_TEST_MODE_AUTHORIZATION_START": "DEVELOPER_TEST_MODE_AUTHORIZATION_START", + "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS": "DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS", + "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL": "DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL", + "DEVELOPER_TEST_MODE_RESET": "DEVELOPER_TEST_MODE_RESET", + "DEVELOPER_TEST_MODE_RESET_ERROR": "DEVELOPER_TEST_MODE_RESET_ERROR", + "SKU_PURCHASE_MODAL_OPEN": "SKU_PURCHASE_MODAL_OPEN", + "SKU_PURCHASE_MODAL_CLOSE": "SKU_PURCHASE_MODAL_CLOSE", + "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS": "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS", + "SKU_PURCHASE_START": "SKU_PURCHASE_START", + "SKU_PURCHASE_SUCCESS": "SKU_PURCHASE_SUCCESS", + "SKU_PURCHASE_FAIL": "SKU_PURCHASE_FAIL", + "SKU_PURCHASE_SHOW_CONFIRMATION_STEP": "SKU_PURCHASE_SHOW_CONFIRMATION_STEP", + "SKU_PURCHASE_CLEAR_ERROR": "SKU_PURCHASE_CLEAR_ERROR", + "SKU_PURCHASE_UPDATE_IS_GIFT": "SKU_PURCHASE_UPDATE_IS_GIFT", + "PURCHASE_CONFIRMATION_MODAL_OPEN": "PURCHASE_CONFIRMATION_MODAL_OPEN", + "PURCHASE_CONFIRMATION_MODAL_CLOSE": "PURCHASE_CONFIRMATION_MODAL_CLOSE", + "ENTITLEMENT_FETCH_APPLICATION_START": "ENTITLEMENT_FETCH_APPLICATION_START", + "ENTITLEMENT_FETCH_APPLICATION_SUCCESS": "ENTITLEMENT_FETCH_APPLICATION_SUCCESS", + "ENTITLEMENT_FETCH_APPLICATION_FAIL": "ENTITLEMENT_FETCH_APPLICATION_FAIL", + "ENTITLEMENT_CREATE": "ENTITLEMENT_CREATE", + "ENTITLEMENT_UPDATE": "ENTITLEMENT_UPDATE", + "ENTITLEMENT_DELETE": "ENTITLEMENT_DELETE", + "ENTITLEMENTS_GIFTABLE_FETCH": "ENTITLEMENTS_GIFTABLE_FETCH", + "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS": "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS", + "ENTITLEMENTS_GIFTABLE_FETCH_FAIL": "ENTITLEMENTS_GIFTABLE_FETCH_FAIL", + "PREMIUM_REQUIRED_MODAL_OPEN": "PREMIUM_REQUIRED_MODAL_OPEN", + "PREMIUM_REQUIRED_MODAL_CLOSE": "PREMIUM_REQUIRED_MODAL_CLOSE", + "PREMIUM_SWITCH_PLAN_MODAL_OPEN": "PREMIUM_SWITCH_PLAN_MODAL_OPEN", + "PREMIUM_SWITCH_PLAN_MODAL_CLOSE": "PREMIUM_SWITCH_PLAN_MODAL_CLOSE", + "LAYOUT_CREATE": "LAYOUT_CREATE", + "LAYOUT_SET_PINNED": "LAYOUT_SET_PINNED", + "LAYOUT_UPDATE_WIDGET": "LAYOUT_UPDATE_WIDGET", + "LAYOUT_SET_TOP_WIDGET": "LAYOUT_SET_TOP_WIDGET", + "LAYOUT_DELETE_WIDGET": "LAYOUT_DELETE_WIDGET", + "LAYOUT_DELETE_ALL_WIDGETS": "LAYOUT_DELETE_ALL_WIDGETS", + "LAYOUT_CREATE_WIDGETS": "LAYOUT_CREATE_WIDGETS", + "CLEAR_IN_APP_NOTIFICATION": "CLEAR_IN_APP_NOTIFICATION", + "ENQUEUE_IN_APP_NOTIFICATION": "ENQUEUE_IN_APP_NOTIFICATION", + "VIEW_HISTORY_MARK_VIEW": "VIEW_HISTORY_MARK_VIEW", + "GIF_PICKER_INITIALIZE": "GIF_PICKER_INITIALIZE", + "GIF_PICKER_SELECT": "GIF_PICKER_SELECT", + "GIF_PICKER_QUERY": "GIF_PICKER_QUERY", + "GIF_PICKER_QUERY_SUCCESS": "GIF_PICKER_QUERY_SUCCESS", + "GIF_PICKER_QUERY_FAILURE": "GIF_PICKER_QUERY_FAILURE", + "GIF_PICKER_TRENDING_FETCH_SUCCESS": "GIF_PICKER_TRENDING_FETCH_SUCCESS", + "GIF_PICKER_SUGGESTIONS_SUCCESS": "GIF_PICKER_SUGGESTIONS_SUCCESS", + "GIF_FAVORITE_ADD": "GIF_FAVORITE_ADD", + "GIF_FAVORITE_REMOVE": "GIF_FAVORITE_REMOVE", + "HIDE_GUILD_TOOLTIP": "HIDE_GUILD_TOOLTIP", + "SUBSCRIPTION_PLANS_FETCH": "SUBSCRIPTION_PLANS_FETCH", + "SUBSCRIPTION_PLANS_FETCH_SUCCESS": "SUBSCRIPTION_PLANS_FETCH_SUCCESS", + "SUBSCRIPTION_PLANS_FETCH_FAILURE": "SUBSCRIPTION_PLANS_FETCH_FAILURE", + "BILLING_USER_TRIAL_ELIGIBILITY_FETCH_SUCCESS": "BILLING_USER_TRIAL_ELIGIBILITY_FETCH_SUCCESS", + "BILLING_USER_TRIAL_VIEW": "BILLING_USER_TRIAL_VIEW", + "GUILD_DISCOVERY_FETCH_START": "GUILD_DISCOVERY_FETCH_START", + "GUILD_DISCOVERY_FETCH_SUCCESS": "GUILD_DISCOVERY_FETCH_SUCCESS", + "GUILD_DISCOVERY_FETCH_FAILURE": "GUILD_DISCOVERY_FETCH_FAILURE", + "GUILD_DISCOVERY_FETCH_EXPERIMENT": "GUILD_DISCOVERY_FETCH_EXPERIMENT", + "GUILD_DISCOVERY_POPULAR_FETCH_START": "GUILD_DISCOVERY_POPULAR_FETCH_START", + "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS": "GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS", + "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE": "GUILD_DISCOVERY_POPULAR_FETCH_FAILURE", + "GUILD_DISCOVERY_SEARCH_FETCH_START": "GUILD_DISCOVERY_SEARCH_FETCH_START", + "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS": "GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS", + "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE": "GUILD_DISCOVERY_SEARCH_FETCH_FAILURE", + "GUILD_DISCOVERY_SELECT_CATEGORY": "GUILD_DISCOVERY_SELECT_CATEGORY", + "GUILD_DISCOVERY_SEARCH_INIT": "GUILD_DISCOVERY_SEARCH_INIT", + "GUILD_DISCOVERY_CLEAR_SEARCH": "GUILD_DISCOVERY_CLEAR_SEARCH", + "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS": "GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS", + "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL": "GUILD_DISCOVERY_SEARCH_COUNTS_FAIL", + "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS": "GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS", + "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER": "GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER", + "GUILD_DISCOVERY_METADATA_FETCH_FAIL": "GUILD_DISCOVERY_METADATA_FETCH_FAIL", + "GUILD_DISCOVERY_CATEGORY_ADD": "GUILD_DISCOVERY_CATEGORY_ADD", + "GUILD_DISCOVERY_CATEGORY_DELETE": "GUILD_DISCOVERY_CATEGORY_DELETE", + "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL": "GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL", + "GUILD_UPDATE_DISCOVERY_METADATA": "GUILD_UPDATE_DISCOVERY_METADATA", + "GUILD_UPDATE_DISCOVERY_METADATA_FAIL": "GUILD_UPDATE_DISCOVERY_METADATA_FAIL", + "DISCOVER_GUILDS_FETCH_START": "DISCOVER_GUILDS_FETCH_START", + "DISCOVER_GUILDS_FETCH_SUCCESS": "DISCOVER_GUILDS_FETCH_SUCCESS", + "DISCOVER_GUILDS_FETCH_FAILURE": "DISCOVER_GUILDS_FETCH_FAILURE", + "DISCOVER_CHECKLIST_FETCH_START": "DISCOVER_CHECKLIST_FETCH_START", + "DISCOVER_CHECKLIST_FETCH_SUCCESS": "DISCOVER_CHECKLIST_FETCH_SUCCESS", + "DISCOVER_CHECKLIST_FETCH_FAILURE": "DISCOVER_CHECKLIST_FETCH_FAILURE", + "GUILD_POPOUT_FETCH_START": "GUILD_POPOUT_FETCH_START", + "GUILD_POPOUT_FETCH_SUCCESS": "GUILD_POPOUT_FETCH_SUCCESS", + "GUILD_POPOUT_FETCH_FAILURE": "GUILD_POPOUT_FETCH_FAILURE", + "NEWS_EDITOR_MODAL_OPEN": "NEWS_EDITOR_MODAL_OPEN", + "NEWS_EDITOR_MODAL_CLOSE": "NEWS_EDITOR_MODAL_CLOSE", + "STREAM_START": "STREAM_START", + "STREAM_SET_PAUSED": "STREAM_SET_PAUSED", + "STREAM_STOP": "STREAM_STOP", + "STREAM_CLOSE": "STREAM_CLOSE", + "STREAM_WATCH": "STREAM_WATCH", + "STREAM_CREATE": "STREAM_CREATE", + "STREAM_SERVER_UPDATE": "STREAM_SERVER_UPDATE", + "STREAM_UPDATE": "STREAM_UPDATE", + "STREAM_TIMED_OUT": "STREAM_TIMED_OUT", + "STREAM_DELETE": "STREAM_DELETE", + "STREAM_STATS_UPDATE": "STREAM_STATS_UPDATE", + "STREAM_PREVIEW_FETCH_START": "STREAM_PREVIEW_FETCH_START", + "STREAM_PREVIEW_FETCH_SUCCESS": "STREAM_PREVIEW_FETCH_SUCCESS", + "STREAM_PREVIEW_FETCH_FAIL": "STREAM_PREVIEW_FETCH_FAIL", + "STREAM_LAYOUT_UPDATE": "STREAM_LAYOUT_UPDATE", + "STREAM_SET_HACKY_MAC_MODE": "STREAM_SET_HACKY_MAC_MODE", + "GUILD_STREAM_START": "GUILD_STREAM_START", + "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS": "DETECTED_OFF_PLATFORM_PREMIUM_PERKS_DISMISS", + "POPOUT_WINDOW_OPEN": "POPOUT_WINDOW_OPEN", + "POPOUT_WINDOW_CLOSE": "POPOUT_WINDOW_CLOSE", + "POPOUT_WINDOW_SET_ALWAYS_ON_TOP": "POPOUT_WINDOW_SET_ALWAYS_ON_TOP", + "TRENDING_APPLICATIONS_FETCH": "TRENDING_APPLICATIONS_FETCH", + "TRENDING_APPLICATIONS_FETCH_SUCCESS": "TRENDING_APPLICATIONS_FETCH_SUCCESS", + "TRENDING_APPLICATIONS_FETCH_FAIL": "TRENDING_APPLICATIONS_FETCH_FAIL", + "HOTSPOT_HIDE": "HOTSPOT_HIDE", + "CHANNEL_FOLLOWER_STATS_FETCH_START": "CHANNEL_FOLLOWER_STATS_FETCH_START", + "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS": "CHANNEL_FOLLOWER_STATS_FETCH_SUCCESS", + "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE": "CHANNEL_FOLLOWER_STATS_FETCH_FAILURE", + "CHANNEL_FOLLOWER_MESSAGE_STATS_FETCH_START": "CHANNEL_FOLLOWER_MESSAGE_STATS_FETCH_START", + "CHANNEL_FOLLOWER_MESSAGE_STATS_FETCH_SUCCESS": "CHANNEL_FOLLOWER_MESSAGE_STATS_FETCH_SUCCESS", + "CHANNEL_FOLLOWER_MESSAGE_STATS_FETCH_FAILURE": "CHANNEL_FOLLOWER_MESSAGE_STATS_FETCH_FAILURE", + "CHANNEL_FOLLOWER_CREATED": "CHANNEL_FOLLOWER_CREATED", + "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED": "CHANNEL_FOLLOWING_PUBLISH_BUMP_DISMISSED", + "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY": "CHANNEL_FOLLOWING_PUBLISH_BUMP_HIDE_PERMANENTLY", + "SHOW_ACTION_SHEET": "SHOW_ACTION_SHEET", + "HIDE_ACTION_SHEET": "HIDE_ACTION_SHEET", + "SHOW_ACTION_SHEET_QUICK_SWITCHER": "SHOW_ACTION_SHEET_QUICK_SWITCHER", + "HIDE_ACTION_SHEET_QUICK_SWITCHER": "HIDE_ACTION_SHEET_QUICK_SWITCHER", + "TOAST_OPEN": "TOAST_OPEN", + "TOAST_CLOSE": "TOAST_CLOSE", + "GLOBAL_CLIPBOARD_PASTE": "GLOBAL_CLIPBOARD_PASTE", + "NOW_PLAYING_MOUNTED": "NOW_PLAYING_MOUNTED", + "NOW_PLAYING_UNMOUNTED": "NOW_PLAYING_UNMOUNTED", + "GUILD_TEMPLATE_RESOLVE": "GUILD_TEMPLATE_RESOLVE", + "GUILD_TEMPLATE_RESOLVE_SUCCESS": "GUILD_TEMPLATE_RESOLVE_SUCCESS", + "GUILD_TEMPLATE_RESOLVE_FAILURE": "GUILD_TEMPLATE_RESOLVE_FAILURE", + "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS": "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS", + "GUILD_TEMPLATE_ACCEPT": "GUILD_TEMPLATE_ACCEPT", + "GUILD_TEMPLATE_ACCEPT_SUCCESS": "GUILD_TEMPLATE_ACCEPT_SUCCESS", + "GUILD_TEMPLATE_ACCEPT_FAILURE": "GUILD_TEMPLATE_ACCEPT_FAILURE", + "GUILD_TEMPLATE_CREATE_SUCCESS": "GUILD_TEMPLATE_CREATE_SUCCESS", + "GUILD_TEMPLATE_SYNC_SUCCESS": "GUILD_TEMPLATE_SYNC_SUCCESS", + "GUILD_TEMPLATE_DELETE_SUCCESS": "GUILD_TEMPLATE_DELETE_SUCCESS", + "GUILD_TEMPLATE_MODAL_SHOW": "GUILD_TEMPLATE_MODAL_SHOW", + "GUILD_TEMPLATE_MODAL_HIDE": "GUILD_TEMPLATE_MODAL_HIDE", + "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH": "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH", + "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE": "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE", + "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE": "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE", + "GUILD_TEMPLATE_PROMOTION_SETTINGS_DOT_HIDE": "GUILD_TEMPLATE_PROMOTION_SETTINGS_DOT_HIDE", + "PULSE_START": "PULSE_START", + "PULSE_STOP": "PULSE_STOP", + "GUILD_PROGRESS_INITIALIZE": "GUILD_PROGRESS_INITIALIZE", + "GUILD_PROGRESS_DISMISS": "GUILD_PROGRESS_DISMISS", + "WELCOME_SCREEN_UPDATE": "WELCOME_SCREEN_UPDATE", + "WELCOME_SCREEN_VIEW": "WELCOME_SCREEN_VIEW", + "WELCOME_SCREEN_SUBMIT": "WELCOME_SCREEN_SUBMIT", + "WELCOME_SCREEN_SUBMIT_SUCCESS": "WELCOME_SCREEN_SUBMIT_SUCCESS", + "WELCOME_SCREEN_SUBMIT_FAILURE": "WELCOME_SCREEN_SUBMIT_FAILURE", + "WELCOME_SCREEN_SETTINGS_RESET": "WELCOME_SCREEN_SETTINGS_RESET", + "WELCOME_SCREEN_SETTINGS_UPDATE": "WELCOME_SCREEN_SETTINGS_UPDATE", + "AGE_GATE_MARK_UNDERAGE_ANONYMOUS": "AGE_GATE_MARK_UNDERAGE_ANONYMOUS", + "AGE_GATE_MODAL_OPEN": "AGE_GATE_MODAL_OPEN", + "AGE_GATE_MODAL_CLOSE": "AGE_GATE_MODAL_CLOSE", + "AGE_GATE_SUCCESS_MODAL_OPEN": "AGE_GATE_SUCCESS_MODAL_OPEN", + "AGE_GATE_FAILURE_MODAL_OPEN": "AGE_GATE_FAILURE_MODAL_OPEN", + "AGE_GATE_NSFW_MODAL_OPEN": "AGE_GATE_NSFW_MODAL_OPEN", + "DOMAIN_MIGRATION_START": "DOMAIN_MIGRATION_START", + "DOMAIN_MIGRATION_FAILURE": "DOMAIN_MIGRATION_FAILURE", + "DOMAIN_MIGRATION_SKIP": "DOMAIN_MIGRATION_SKIP" + }, + LoginStates: { + "NONE": "NONE", + "LOGGING_IN": "LOGGING_IN", + "ACCOUNT_SCHEDULED_FOR_DELETION": "ACCOUNT_SCHEDULED_FOR_DELETION", + "ACCOUNT_DISABLED": "ACCOUNT_DISABLED", + "MFA_STEP": "MFA_STEP", + "LOGGING_IN_MFA": "LOGGING_IN_MFA", + "MFA_SMS_STEP": "MFA_SMS_STEP", + "LOGGING_IN_MFA_SMS": "LOGGING_IN_MFA_SMS", + "LOGIN_AGE_GATE": "LOGIN_AGE_GATE" + }, + RegistrationStates: { + "NONE": "NONE", + "REGISTERING": "REGISTERING", + "REGISTER_AGE_GATE": "REGISTER_AGE_GATE", + "REGISTER_WITH_ERROR": "REGISTER_WITH_ERROR" + }, + FormStates: { + "OPEN": "OPEN", + "SUBMITTING": "SUBMITTING", + "CLOSED": "CLOSED" + }, + KeybindActions: { + "SERVER_NEXT": "SERVER_NEXT", + "SERVER_PREV": "SERVER_PREV", + "CHANNEL_NEXT": "CHANNEL_NEXT", + "CHANNEL_PREV": "CHANNEL_PREV", + "UNREAD_NEXT": "UNREAD_NEXT", + "UNREAD_PREV": "UNREAD_PREV", + "MENTION_CHANNEL_NEXT": "MENTION_CHANNEL_NEXT", + "MENTION_CHANNEL_PREV": "MENTION_CHANNEL_PREV", + "TOGGLE_SETTINGS": "TOGGLE_SETTINGS", + "TOGGLE_HELP": "TOGGLE_HELP", + "TOGGLE_USERS": "TOGGLE_USERS", + "TOGGLE_INBOX": "TOGGLE_INBOX", + "MARK_TOP_INBOX_CHANNEL_READ": "MARK_TOP_INBOX_CHANNEL_READ", + "TOGGLE_CHANNEL_PINS": "TOGGLE_CHANNEL_PINS", + "TOGGLE_PREVIOUS_GUILD": "TOGGLE_PREVIOUS_GUILD", + "TOGGLE_MUTE": "TOGGLE_MUTE", + "TOGGLE_DEAFEN": "TOGGLE_DEAFEN", + "TOGGLE_HOTKEYS": "TOGGLE_HOTKEYS", + "TOGGLE_CATEGORY_COLLAPSED": "TOGGLE_CATEGORY_COLLAPSED", + "UPLOAD_FILE": "UPLOAD_FILE", + "SEARCH_EMOJIS": "SEARCH_EMOJIS", + "SEARCH_GIFS": "SEARCH_GIFS", + "MARK_CHANNEL_READ": "MARK_CHANNEL_READ", + "MARK_SERVER_READ": "MARK_SERVER_READ", + "MENTION_NEXT": "MENTION_NEXT", + "MENTION_PREV": "MENTION_PREV", + "CREATE_DM_GROUP": "CREATE_DM_GROUP", + "CREATE_GUILD": "CREATE_GUILD", + "RETURN_TO_AUDIO_CHANNEL": "RETURN_TO_AUDIO_CHANNEL", + "CALL_ACCEPT": "CALL_ACCEPT", + "CALL_DECLINE": "CALL_DECLINE", + "CALL_START": "CALL_START", + "SCROLL_UP": "SCROLL_UP", + "SCROLL_DOWN": "SCROLL_DOWN", + "TEXTAREA_FOCUS": "TEXTAREA_FOCUS", + "CLOSE_MODAL": "CLOSE_MODAL", + "SUBMIT": "SUBMIT", + "EDIT_LAST_MESSAGE": "EDIT_LAST_MESSAGE", + "JUMP_TO_GUILD": "JUMP_TO_GUILD", + "JUMP_TO_FIRST_UNREAD": "JUMP_TO_FIRST_UNREAD", + "JUMP_TO_PRESENT": "JUMP_TO_PRESENT", + "FOCUS_SEARCH": "FOCUS_SEARCH", + "QUICKSWITCHER_SHOW": "QUICKSWITCHER_SHOW", + "QUICKSWITCHER_HIDE": "QUICKSWITCHER_HIDE", + "ZOOM_IN": "ZOOM_IN", + "ZOOM_OUT": "ZOOM_OUT", + "ZOOM_RESET": "ZOOM_RESET", + "CAROUSEL_NEXT": "CAROUSEL_NEXT", + "CAROUSEL_PREV": "CAROUSEL_PREV", + "MODAL_CAROUSEL_NEXT": "MODAL_CAROUSEL_NEXT", + "MODAL_CAROUSEL_PREV": "MODAL_CAROUSEL_PREV" + }, + KeybindCustomActions: { + "UNASSIGNED": "UNASSIGNED", + "PUSH_TO_TALK": "PUSH_TO_TALK", + "PUSH_TO_TALK_PRIORITY": "PUSH_TO_TALK_PRIORITY", + "PUSH_TO_MUTE": "PUSH_TO_MUTE", + "TOGGLE_MUTE": "TOGGLE_MUTE", + "TOGGLE_DEAFEN": "TOGGLE_DEAFEN", + "TOGGLE_OVERLAY": "TOGGLE_OVERLAY", + "TOGGLE_VOICE_MODE": "TOGGLE_VOICE_MODE", + "TOGGLE_OVERLAY_INPUT_LOCK": "TOGGLE_OVERLAY_INPUT_LOCK", + "TOGGLE_STREAMER_MODE": "TOGGLE_STREAMER_MODE", + "TOGGLE_PRIORITY_SPEAKER": "TOGGLE_PRIORITY_SPEAKER", + "TOGGLE_GO_LIVE_STREAMING": "TOGGLE_GO_LIVE_STREAMING", + "OVERLAY_ACTIVATE_REGION_TEXT_WIDGET": "OVERLAY_ACTIVATE_REGION_TEXT_WIDGET" + }, + ModuleUpdaterEventTypes: { + "CHECKING_FOR_UPDATES": "checking-for-updates", + "INSTALLED_MODULE": "installed-module", + "UPDATE_CHECK_FINISHED": "update-check-finished", + "DOWNLOADING_MODULE": "downloading-module", + "DOWNLOADING_MODULE_PROGRESS": "downloading-module-progress", + "DOWNLOADING_MODULES_FINISHED": "downloading-modules-finished", + "UPDATE_MANUALLY": "update-manually", + "DOWNLOADED_MODULE": "downloaded-module", + "INSTALLING_MODULES_FINISHED": "installing-modules-finished", + "INSTALLING_MODULE": "installing-module", + "INSTALLING_MODULE_PROGRESS": "installing-module-progress", + "NO_PENDING_UPDATES": "no-pending-updates" + }, + RecentMentionsFilters: { + "ALL_SERVERS": "ALL_SERVERS", + "THIS_SERVER": "THIS_SERVER" + }, + RTCDebugSections: { + "TRANSPORT": "TRANSPORT", + "OUTBOUND": "OUTBOUND", + "SCREENSHARE": "SCREENSHARE", + "INBOUND": "INBOUND", + "STREAMS_OUTBOUND": "STREAMS_OUTBOUND", + "STREAMS_INBOUND": "STREAMS_INBOUND" + }, + GuildSettingsSections: { + "LANDING": "LANDING", + "OVERVIEW": "OVERVIEW", + "MEMBERS": "MEMBERS", + "MEMBER_EDIT": "MEMBER_EDIT", + "MEMBER_KICK": "MEMBER_KICK", + "MEMBER_BAN": "MEMBER_BAN", + "CHANNELS": "CHANNELS", + "ROLES": "ROLES", + "ROLE_EDIT": "ROLE_EDIT", + "ROLE_PERMISSIONS": "ROLE_PERMISSIONS", + "BANS": "BANS", + "INSTANT_INVITES": "INSTANT_INVITES", + "GUILD_TEMPLATES": "GUILD_TEMPLATES", + "EMBED": "EMBED", + "INTEGRATIONS": "INTEGRATIONS", + "INTEGRATION_SETTINGS": "INTEGRATION_SETTINGS", + "SECURITY": "SECURITY", + "VANITY_URL": "VANITY_URL", + "EMOJI": "EMOJI", + "WEBHOOKS": "WEBHOOKS", + "AUDIT_LOG": "AUDIT_LOG", + "AUDIT_LOG_FILTER": "AUDIT_LOG_FILTER", + "MODERATION": "MODERATION", + "DELETE": "DELETE", + "DISCOVERY": "DISCOVERY", + "GUILD_PREMIUM": "GUILD_PREMIUM", + "FOLLOWER_ANALYTICS": "FOLLOWER_ANALYTICS", + "ANALYTICS": "ANALYTICS", + "PUBLIC": "PUBLIC", + "PUBLIC_WELCOME": "PUBLIC_WELCOME", + "EDIT_WEBHOOK": "EDIT_WEBHOOK" + }, + ChannelSettingsSections: { + "OVERVIEW": "OVERVIEW", + "PERMISSIONS": "PERMISSIONS", + "INSTANT_INVITES": "INSTANT_INVITES", + "WEBHOOKS": "WEBHOOKS", + "DELETE": "DELETE", + "NOTIFICATIONS": "NOTIFICATIONS", + "PINNED_MESSAGES": "PINNED_MESSAGES", + "PINNED_CHAT": "PINNED_CHAT", + "NEW_PERMISSION": "NEW_PERMISSION", + "PERMISSION_OVERRIDES": "PERMISSION_OVERRIDES", + "CHANGE_CATEGORY": "CHANGE_CATEGORY", + "EDIT_WEBHOOK": "EDIT_WEBHOOK" + }, + ChannelSections: { + "NONE": "NONE", + "MEMBERS": "MEMBERS", + "SEARCH": "SEARCH" + }, + FriendsSections: { + "ADD_FRIEND": "ADD_FRIEND", + "ALL": "ALL", + "ONLINE": "ONLINE", + "PENDING": "PENDING", + "BLOCKED": "BLOCKED" + }, + UserProfileSections: { + "USER_INFO": "USER_INFO", + "MUTUAL_GUILDS": "MUTUAL_GUILDS", + "MUTUAL_FRIENDS": "MUTUAL_FRIENDS" + }, + SearchSections: { + "SEARCH": "SEARCH", + "CHANNEL": "CHANNEL" + }, + MessagePreviewSections: { + "MESSAGE": "MESSAGE" + }, + DesktopNotificationTypes: { + "NEVER": "NEVER", + "ALL": "ALL" + }, + NotificationPermissionTypes: { + "NEVER": "NEVER", + "ENABLED": "ENABLED", + "BLOCKED": "BLOCKED" + }, + TTSNotificationTypes: { + "NEVER": "NEVER", + "ALL_CHANNELS": "ALL_CHANNELS", + "SELECTED_CHANNEL": "SELECTED_CHANNEL" + }, + InputModes: { + "PUSH_TO_TALK": "PUSH_TO_TALK", + "VOICE_ACTIVITY": "VOICE_ACTIVITY" + }, + ChannelTypes: { + "0": "GUILD_TEXT", + "1": "DM", + "2": "GUILD_VOICE", + "3": "GROUP_DM", + "4": "GUILD_CATEGORY", + "5": "GUILD_ANNOUNCEMENT", + "6": "GUILD_STORE", + "DM": 1, + "GROUP_DM": 3, + "GUILD_TEXT": 0, + "GUILD_VOICE": 2, + "GUILD_CATEGORY": 4, + "GUILD_ANNOUNCEMENT": 5, + "GUILD_STORE": 6 + }, + NoticeTypes: { + "GENERIC": "GENERIC", + "UNCLAIMED_ACCOUNT": "UNCLAIMED_ACCOUNT", + "UNVERIFIED_ACCOUNT": "UNVERIFIED_ACCOUNT", + "DOWNLOAD_NAG": "DOWNLOAD_NAG", + "NOTIFICATION_NAG": "NOTIFICATION_NAG", + "VOICE_DISABLED": "VOICE_DISABLED", + "SCHEDULED_MAINTENANCE": "SCHEDULED_MAINTENANCE", + "NO_INPUT_DETECTED": "NO_INPUT_DETECTED", + "STREAMER_MODE": "STREAMER_MODE", + "SURVEY": "SURVEY", + "CORRUPT_INSTALLATION": "CORRUPT_INSTALLATION", + "VIDEO_UNSUPPORTED_BROWSER": "VIDEO_UNSUPPORTED_BROWSER", + "ACTIVITY_JOIN_REQUEST": "ACTIVITY_JOIN_REQUEST", + "CONNECT_SPOTIFY": "CONNECT_SPOTIFY", + "SPOTIFY_AUTO_PAUSED": "SPOTIFY_AUTO_PAUSED", + "PREMIUM_PROMO": "PREMIUM_PROMO", + "MFA_SMS_BACKUP": "MFA_SMS_BACKUP", + "HARDWARE_MUTE": "HARDWARE_MUTE", + "DISPATCH_ERROR": "DISPATCH_ERROR", + "DISPATCH_INSTALL_SCRIPT_PROGRESS": "DISPATCH_INSTALL_SCRIPT_PROGRESS", + "APPLICATION_TEST_MODE": "APPLICATION_TEST_MODE", + "PREMIUM_GRANDFATHERED_EXTENDED": "PREMIUM_GRANDFATHERED_EXTENDED", + "PREMIUM_GRANDFATHERED_ENDING": "PREMIUM_GRANDFATHERED_ENDING", + "PREMIUM_GRANDFATHERED_ENDED": "PREMIUM_GRANDFATHERED_ENDED", + "DETECTED_OFF_PLATFORM_PREMIUM_PERK": "DETECTED_OFF_PLATFORM_PREMIUM_PERK", + "DETECTED_OFF_PLATFORM_PREMIUM_PERK_UPSELL": "DETECTED_OFF_PLATFORM_PREMIUM_PERK_UPSELL", + "PREMIUM_XBOX_GAME_PASS_PROMOTION": "PREMIUM_XBOX_GAME_PASS_PROMOTION", + "FUNIMATION_PROMOTION": "FUNIMATION_PROMOTION", + "LURKING_GUILD": "LURKING_GUILD" + }, + InviteStates: { + "RESOLVING": "RESOLVING", + "RESOLVED": "RESOLVED", + "EXPIRED": "EXPIRED", + "BANNED": "BANNED", + "ACCEPTING": "ACCEPTING", + "ACCEPTED": "ACCEPTED", + "APP_OPENING": "APP_OPENING", + "APP_OPENED": "APP_OPENED", + "APP_NOT_OPENED": "APP_NOT_OPENED" + }, + NativeAppStates: { + "OPENING": "OPENING", + "OPEN": "OPEN", + "OPEN_FAIL": "OPEN_FAIL" + }, + CreateGuildModalScreens: { + "0": "Choose", + "1": "CreateGuild", + "2": "JoinGuild", + "3": "AcceptInvite", + "Choose": 0, + "CreateGuild": 1, + "JoinGuild": 2, + "AcceptInvite": 3 + }, + GuildFeatures: { + "INVITE_SPLASH": "INVITE_SPLASH", + "VIP_REGIONS": "VIP_REGIONS", + "VANITY_URL": "VANITY_URL", + "MORE_EMOJI": "MORE_EMOJI", + "VERIFIED": "VERIFIED", + "COMMERCE": "COMMERCE", + "DISCOVERABLE": "DISCOVERABLE", + "PUBLIC": "PUBLIC", + "PUBLIC_DISABLED": "PUBLIC_DISABLED", + "FEATURABLE": "FEATURABLE", + "NEWS": "NEWS", + "PARTNERED": "PARTNERED", + "ANIMATED_ICON": "ANIMATED_ICON", + "BANNER": "BANNER", + "ENABLED_DISCOVERABLE_BEFORE": "ENABLED_DISCOVERABLE_BEFORE", + "WELCOME_SCREEN_ENABLED": "WELCOME_SCREEN_ENABLED" + }, + SystemChannelFlags: { + "SUPPRESS_JOIN_NOTIFICATIONS": 1, + "SUPPRESS_PREMIUM_SUBSCRIPTIONS": 2 + }, + RTCConnectionStates: { + "DISCONNECTED": "DISCONNECTED", + "AWAITING_ENDPOINT": "AWAITING_ENDPOINT", + "AUTHENTICATING": "AUTHENTICATING", + "CONNECTING": "CONNECTING", + "RTC_DISCONNECTED": "RTC_DISCONNECTED", + "RTC_CONNECTING": "RTC_CONNECTING", + "RTC_CONNECTED": "RTC_CONNECTED", + "NO_ROUTE": "NO_ROUTE", + "ICE_CHECKING": "ICE_CHECKING" + }, + RTCConnectionQuality: { + "UNKNOWN": "unknown", + "BAD": "bad", + "AVERAGE": "average", + "FINE": "fine" + }, + ConnectionStatus: { + "CONNECTED": "connected", + "CONNECTING": "connecting", + "ERROR": "error" + }, + RTCReceivedVideoQuality: { + "OFF": "off", + "FULL": "full" + }, + RTCVoiceExperiments: { + "BWE_CONSERVATIVE_LINK_ESTIMATE": "bwe_conservative_link_estimate", + "BWE_REMOTE_LOCUS_CLIENT": "bwe_remote_locus_client" + }, + ExplicitContentFilterTypes: { + "0": "DISABLED", + "1": "NON_FRIENDS", + "2": "FRIENDS_AND_NON_FRIENDS", + "DISABLED": 0, + "NON_FRIENDS": 1, + "FRIENDS_AND_NON_FRIENDS": 2 + }, + PageAnalyticsLocations: { + "LOGIN": "Login", + "REGISTER": "Register", + "INVITE": "Accept Invite Page", + "VERIFY": "Verify Email", + "DISABLE_EMAIL_NOTIFICATIONS": "Disable Email Notifications", + "AUTHORIZE_IP": "Authorize Ip", + "RESET": "Reset", + "HANDOFF": "Handoff", + "UNKNOWN": "Unknown", + "LANDING": "Landing" + }, + MessageStates: { + "SENT": "SENT", + "SENDING": "SENDING", + "SEND_FAILED": "SEND_FAILED" + }, + MessageTypes: { + "DEFAULT": 0, + "RECIPIENT_ADD": 1, + "RECIPIENT_REMOVE": 2, + "CALL": 3, + "CHANNEL_NAME_CHANGE": 4, + "CHANNEL_ICON_CHANGE": 5, + "CHANNEL_PINNED_MESSAGE": 6, + "USER_JOIN": 7, + "USER_PREMIUM_GUILD_SUBSCRIPTION": 8, + "USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1": 9, + "USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2": 10, + "USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3": 11, + "CHANNEL_FOLLOW_ADD": 12, + "GUILD_STREAM": 13, + "GUILD_DISCOVERY_DISQUALIFIED": 14, + "GUILD_DISCOVERY_REQUALIFIED": 15 + }, + MessageTypesDeletable: { + "0": true, + "6": true, + "7": true, + "8": true, + "9": true, + "10": true, + "11": true, + "12": true + }, + MessageFlags: { + "CROSSPOSTED": 1, + "IS_CROSSPOST": 2, + "SUPPRESS_EMBEDS": 4, + "SOURCE_MESSAGE_DELETED": 8, + "URGENT": 16 + }, + OverlayDisplayNames: { + "ALWAYS": "ALWAYS", + "NEVER": "NEVER", + "ONLY_WHILE_SPEAKING": "ONLY_WHILE_SPEAKING" + }, + OverlayDisplayUsers: { + "ALWAYS": "ALWAYS", + "ONLY_WHILE_SPEAKING": "ONLY_WHILE_SPEAKING" + }, + OverlayWidgets: { + "GUILDS": "GUILDS", + "VOICE": "VOICE", + "TEXT": "TEXT", + "GUILDS_TEXT": "GUILDS_TEXT", + "LOBBY_VOICE": "LOBBY_VOICE" + }, + OverlayWidgetLayoutPolicy: { + "REQUIRED": "REQUIRED", + "OPTIONAL": "OPTIONAL", + "OPTIONAL_DEFAULT": "OPTIONAL_DEFAULT" + }, + OverlayWidgetTypes: { + "DEFAULT": "DEFAULT", + "PINNED": "PINNED", + "UNPINNED": "UNPINNED", + "IN_GAME": "IN_GAME", + "IN_GAME_TEXT": "IN_GAME_TEXT", + "IN_GAME_ACTIVE": "IN_GAME_ACTIVE", + "IN_GAME_PREVIEW": "IN_GAME_PREVIEW" + }, + OverlayAvatarSizes: { + "LARGE": "large", + "SMALL": "small" + }, + OverlayNotificationTypes: { + "0": "GENERIC", + "1": "TEXT", + "2": "INCOMING_CALL", + "GENERIC": 0, + "TEXT": 1, + "INCOMING_CALL": 2 + }, + OverlayNotificationStatus: { + "0": "ACTIVE", + "1": "TIMED_OUT", + "2": "DISMISSED", + "ACTIVE": 0, + "TIMED_OUT": 1, + "DISMISSED": 2 + }, + OverlayNotificationPositions: { + "TOP_LEFT": "topLeft", + "TOP_RIGHT": "topRight", + "BOTTOM_LEFT": "bottomLeft", + "BOTTOM_RIGHT": "bottomRight", + "DISABLED": "disabled" + }, + OverlayNotificationTextChatTypes: { + "ENABLED": "ENABLED", + "DISABLED": "DISABLED" + }, + OverlayEventTypes: { + "CONNECT": "CONNECT", + "DISPATCH": "DISPATCH", + "LOG_MESSAGES": "LOG_MESSAGES", + "STORAGE_SYNC": "STORAGE_SYNC" + }, + OverlayActiveRegions: { + "TEXT_WIDGET": "TEXT_WIDGET" + }, + TextareaTypes: { + "NORMAL": "normal", + "EDIT": "edit", + "FORM": "form" + }, + VerificationLevels: { + "0": "NONE", + "1": "LOW", + "2": "MEDIUM", + "3": "HIGH", + "4": "VERY_HIGH", + "NONE": 0, + "LOW": 1, + "MEDIUM": 2, + "HIGH": 3, + "VERY_HIGH": 4 + }, + VerificationCriteria: { + "ACCOUNT_AGE": 5, + "MEMBER_AGE": 10 + }, + MFALevels: { + "0": "NONE", + "1": "ELEVATED", + "NONE": 0, + "ELEVATED": 1 + }, + GuildExplicitContentFilterTypes: { + "0": "DISABLED", + "1": "MEMBERS_WITHOUT_ROLES", + "2": "ALL_MEMBERS", + "DISABLED": 0, + "MEMBERS_WITHOUT_ROLES": 1, + "ALL_MEMBERS": 2 + }, + RelationshipTypes: { + "0": "NONE", + "1": "FRIEND", + "2": "BLOCKED", + "3": "PENDING_INCOMING", + "4": "PENDING_OUTGOING", + "5": "IMPLICIT", + "NONE": 0, + "FRIEND": 1, + "BLOCKED": 2, + "PENDING_INCOMING": 3, + "PENDING_OUTGOING": 4, + "IMPLICIT": 5 + }, + GiftCodeModalStates: { + "CONFIRM": "CONFIRM", + "SUCCESS": "SUCCESS", + "ERROR": "ERROR" + }, + Endpoints: { + "USER_ACTIVITY_STATISTICS": "/users/@me/activities/statistics/applications", + "ACTIVITIES": "/activities", + "LOBBIES": "/lobbies", + "LOBBY_SEARCH": "/lobbies/search", + "NETWORKING_TOKEN": "/networking/token", + "USER_GAMES_NOTIFICATIONS": "/users/@me/settings/game-notifications", + "USER_GAMES_NOTIFICATIONS_OVERRIDES": "/users/@me/settings/game-notifications/overrides", + "UNVERIFIED_APPLICATIONS": "/unverified-applications", + "UNVERIFIED_APPLICATIONS_ICONS": "/unverified-applications/icons", + "BULK_ACK": "/read-states/ack-bulk", + "GUILDS": "/guilds", + "CHANNELS": "/channels", + "TUTORIAL_INDICATORS": "/tutorial/indicators", + "TUTORIAL_INDICATORS_SUPPRESS": "/tutorial/indicators/suppress", + "USERS": "/users", + "ME": "/users/@me", + "DELETE_ACCOUNT": "/users/@me/delete", + "DISABLE_ACCOUNT": "/users/@me/disable", + "DEVICES": "/users/@me/devices", + "SETTINGS": "/users/@me/settings", + "SETTINGS_CONSENT": "/users/@me/consent", + "PHONE": "/users/@me/phone", + "VERIFY_PHONE": "/users/@me/phone/verify", + "CONNECTIONS": "/users/@me/connections", + "CONNECTION_SYNC_CONTACTS": "/users/@me/connections/contacts/@me/external-friend-list-entries", + "NOTES": "/users/@me/notes", + "MENTIONS": "/users/@me/mentions", + "CAPTCHA": "/users/@me/captcha/verify", + "EXPERIMENTS": "/experiments", + "LOGIN": "/auth/login", + "LOGIN_MFA": "/auth/mfa/totp", + "LOGIN_SMS": "/auth/mfa/sms", + "LOGIN_SMS_SEND": "/auth/mfa/sms/send", + "REMOTE_AUTH_INITIALIZE": "/users/@me/remote-auth", + "REMOTE_AUTH_CANCEL": "/users/@me/remote-auth/cancel", + "REMOTE_AUTH_FINISH": "/users/@me/remote-auth/finish", + "LOGOUT": "/auth/logout", + "REGISTER": "/auth/register", + "TRACK": "/science", + "SSO": "/sso", + "VERIFY": "/auth/verify", + "AUTHORIZE_IP": "/auth/authorize-ip", + "VERIFY_RESEND": "/auth/verify/resend", + "FORGOT_PASSWORD": "/auth/forgot", + "RESET_PASSWORD": "/auth/reset", + "ICE": "/voice/ice", + "DEBUG_LOGS": "/native/debug-logs", + "REPORT": "/report", + "REPORT_V2": "/reports", + "REPORT_OPTIONS": "/report/options", + "INTEGRATIONS": "/integrations", + "GATEWAY": "/gateway", + "APPLICATIONS_DETECTABLE": "/applications/detectable", + "OAUTH2_AUTHORIZE": "/oauth2/authorize", + "OAUTH2_AUTHORIZE_WEBHOOK_CHANNELS": "/oauth2/authorize/webhook-channels", + "OAUTH2_CURRENT_AUTH": "/oauth2/@me", + "OAUTH2_TOKENS": "/oauth2/tokens", + "OAUTH2_WHITELIST_ACCEPT": "/oauth2/whitelist/accept", + "MFA_TOTP_ENABLE": "/users/@me/mfa/totp/enable", + "MFA_TOTP_DISABLE": "/users/@me/mfa/totp/disable", + "MFA_SMS_ENABLE": "/users/@me/mfa/sms/enable", + "MFA_SMS_DISABLE": "/users/@me/mfa/sms/disable", + "MFA_CODES": "/users/@me/mfa/codes", + "DISABLE_EMAIL_NOTIFICATIONS": "/users/disable-email-notifications", + "GUILD_PREMIUM_SUBSCRIPTION_COOLDOWN": "/users/@me/guilds/premium/subscriptions/cooldown", + "USER_GUILD_PREMIUM_SUBSCRIPTIONS": "/users/@me/guilds/premium/subscriptions", + "USER_PREMIUM_GUILD_SUBSCRIPTION_SLOTS": "/users/@me/guilds/premium/subscription-slots", + "BILLING_STRIPE_SETUP_INTENT_SECRET": "/users/@me/billing/stripe/setup-intents", + "BILLING_PAYMENT_SOURCES": "/users/@me/billing/payment-sources", + "BILLING_PAYMENTS": "/users/@me/billing/payments", + "BILLING_BRAINTREE_POPUP_BRIDGE": "/billing/braintree/popup-bridge", + "BILLING_BRAINTREE_POPUP_BRIDGE_CALLBACK": "/billing/braintree/popup-bridge/callback", + "BILLING_SUBSCRIPTIONS": "/users/@me/billing/subscriptions", + "BILLING_APPLY_APPLE_RECEIPT": "/billing/apple/apply-receipt", + "BILLING_INVOICE_PREVIEW": "/users/@me/billing/invoices/preview", + "USER_AGREEMENTS": "/users/@me/agreements", + "HANDOFF": "/auth/handoff", + "HANDOFF_EXCHANGE": "/auth/handoff/exchange", + "LIBRARY": "/users/@me/library", + "AUTH_CONSENT_REQUIRED": "/auth/consent-required", + "USER_HARVEST": "/users/@me/harvest", + "APPLICATION_BRANCHES": "/branches", + "APPLICATIONS_PUBLIC": "/applications/public", + "APPLICATIONS_TRENDING": "/applications/trending/global", + "STORE_PUBLISHED_LISTINGS_APPLICATIONS": "/store/published-listings/applications", + "STORE_PUBLISHED_LISTINGS_SKUS": "/store/published-listings/skus", + "ENTITLEMENTS_GIFTABLE": "/users/@me/entitlements/gifts", + "PROMOTIONS": "/promotions", + "PROMOTION_ACK": "/promotions/ack", + "HYPESQUAD_ONLINE": "/hypesquad/online", + "GIFS_SEARCH": "/gifs/search", + "GIFS_TRENDING": "/gifs/trending", + "GIFS_TRENDING_GIFS": "/gifs/trending-gifs", + "GIFS_SELECT": "/gifs/select", + "GIFS_SUGGEST": "/gifs/suggest", + "USER_GIFT_CODE_CREATE": "/users/@me/entitlements/gift-codes", + "USER_GIFT_CODES": "/users/@me/entitlements/gift-codes", + "GUILD_DISCOVERY": "/discoverable-guilds", + "GUILD_DISCOVERY_CATEGORIES": "/discovery/categories", + "USER_AFFINITIES": "/users/@me/affinities/users", + "GUILD_AFFINITIES": "/users/@me/affinities/guilds", + "XBOX_GAME_PASS_PROMOTION": "/promotions/xbox-game-pass", + "XBOX_GAME_PASS_PROMOTION_REDEEM": "/promotions/xbox-game-pass/redeem", + "FUNIMATION_PROMOTION": "/promotions/funimation", + "FUNIMATION_PROMOTION_REDEEM": "/promotions/funimation/redeem" + }, + Routes: { + "INDEX": "/", + "APP": "/app", + "ACTIVITY": "/activity", + "APPLICATION_LIBRARY": "/library", + "APPLICATION_LIBRARY_INVENTORY": "/library/inventory", + "APPLICATION_LIBRARY_SETTINGS": "/library/settings", + "APPLICATION_STORE": "/store", + "BILLING_PREFIX": "/billing", + "BILLING_LOGIN_HANDOFF": "/billing/login/handoff", + "BILLING_PREMIUM_SUBSCRIBE": "/billing/premium/subscribe", + "BILLING_PAYMENT_SOURCES_CREATE": "/billing/payment-sources/create", + "BILLING_PREMIUM_SWITCH_PLAN": "/billing/premium/switch-plan", + "BILLING_GUILD_SUBSCRIPTIONS_PURCHASE": "/billing/guild-subscriptions/purchase", + "BILLING_PAYMENTS": "/billing/payments", + "FRIENDS": "/channels/@me", + "ME": "/channels/@me", + "LOGIN": "/login", + "LOGIN_HANDOFF": "/login/handoff", + "REGISTER": "/register", + "VERIFY": "/verify", + "RESET": "/reset", + "APPS": "/apps", + "CONNECT_AUTHORIZE": "/connect/authorize", + "OAUTH2_AUTHORIZE": "/oauth2/authorize", + "OAUTH2_AUTHORIZED": "/oauth2/authorized", + "OAUTH2_ERROR": "/oauth2/error", + "GUILD_CREATE": "/guilds/create", + "DISABLE_EMAIL_NOTIFICATIONS": "/disable-email-notifications", + "AUTHORIZE_IP": "/authorize-ip", + "HANDOFF": "/handoff", + "DOMAIN_MIGRATION": "/domain-migration", + "XBOX_EDU": "/connections/xbox/intro", + "XBOX_PIN": "/connections/xbox/pin", + "BILLING_BRAINTREE_POPUP_BRIDGE_CALLBACK": "/billing/braintree/popup-bridge/callback", + "OAUTH2_WHITELIST_ACCEPT": "/oauth2/whitelist/accept", + "GUILD_DISCOVERY": "/guild-discovery", + "POPOUT_WINDOW": "/popout" + }, + RPC_SCOPE_CONFIG: { + "ANY": "$any", + "ALL": "$all" + }, + RPC_PRIVATE_SCOPE: "RPC_PRIVATE_SCOPE", + RPC_PRIVATE_LIMITED_SCOPE: "RPC_PRIVATE_LIMITED_SCOPE", + RPC_LOCAL_SCOPE: "RPC_LOCAL_SCOPE", + RPCDeepLinks: { + "USER_SETTINGS": "USER_SETTINGS", + "CHANGELOG": "CHANGELOG", + "LIBRARY": "LIBRARY", + "STORE_HOME": "STORE_HOME", + "STORE_LISTING": "STORE_LISTING" + }, + RPCErrors: { + "UNKNOWN_ERROR": 1000, + "SERVICE_UNAVAILABLE": 1001, + "TRANSACTION_ABORTED": 1002, + "INVALID_PAYLOAD": 4000, + "INVALID_COMMAND": 4002, + "INVALID_GUILD": 4003, + "INVALID_EVENT": 4004, + "INVALID_CHANNEL": 4005, + "INVALID_PERMISSIONS": 4006, + "INVALID_CLIENTID": 4007, + "INVALID_ORIGIN": 4008, + "INVALID_TOKEN": 4009, + "INVALID_USER": 4010, + "INVALID_INVITE": 4011, + "INVALID_ACTIVITY_JOIN_REQUEST": 4012, + "INVALID_LOBBY": 4013, + "INVALID_LOBBY_SECRET": 4014, + "INVALID_ENTITLEMENT": 4015, + "INVALID_GIFT_CODE": 4016, + "INVALID_GUILD_TEMPLATE": 4017, + "OAUTH2_ERROR": 5000, + "SELECT_CHANNEL_TIMED_OUT": 5001, + "GET_GUILD_TIMED_OUT": 5002, + "SELECT_VOICE_FORCE_REQUIRED": 5003, + "CAPTURE_SHORTCUT_ALREADY_LISTENING": 5004, + "INVALID_ACTIVITY_SECRET": 5005, + "NO_ELIGIBLE_ACTIVITY": 5006, + "LOBBY_FULL": 5007, + "PURCHASE_CANCELED": 5008, + "PURCHASE_ERROR": 5009, + "UNAUTHORIZED_FOR_ACHIEVEMENT": 5010, + "RATE_LIMITED": 5011 + }, + DispatchErrorCodes: { + "APPLICATION_NOT_FOUND": 101, + "DISK_LOW": 2022, + "DISK_PERMISSION_DENIED": 2025, + "POST_INSTALL_FAILED": 2025, + "REDISTRIBUTABLE_INSTALL_FAILED": 2026, + "APPLICATION_LOAD_FAILED": 2034, + "DESERIALIZATION_FAILED": 2047, + "INTERRUPTED": 2055, + "MAX_REQUEST_RETRIES_EXCEEDED": 2058, + "AUTHENTICATION_FAILED": 2063, + "IO_PERMISSION_DENIED": 2064, + "NO_MANIFESTS": 2065, + "POST_INSTALL_CANCELLED": 2066, + "API_ERROR": 2069, + "FILE_NAME_TOO_LONG": 2072, + "NOT_ENTITLED": 2073, + "APPLICATION_LOCK_FAILED": 2076, + "NOT_DIRECTORY": 2077, + "INVALID_DRIVE": 2078, + "DISK_FULL": 2080 + }, + GameLaunchStatuses: { + "LAUNCH_TARGET_NOT_FOUND": 4 + }, + TransportTypes: { + "IPC": "ipc", + "WEBSOCKET": "ws", + "HTTP": "http" + }, + ActivityFlags: { + "INSTANCE": 1, + "JOIN": 2, + "SPECTATE": 4, + "SYNC": 16, + "PLAY": 32 + }, + UserNotificationSettings: { + "0": "ALL_MESSAGES", + "1": "ONLY_MENTIONS", + "2": "NO_MESSAGES", + "3": "NULL", + "ALL_MESSAGES": 0, + "ONLY_MENTIONS": 1, + "NO_MESSAGES": 2, + "NULL": 3 + }, + NotificationSettingsUpdateType: { + "GUILD": "guild", + "CHANNEL": "channel" + }, + Durations: { + "SECOND": 1, + "MINUTE": 60, + "HOUR": 3600, + "DAY": 86400 + }, + ME: "@me", + MAX_MESSAGES_PER_CHANNEL: 50, + MAX_MENTIONS_PER_FETCH: 25, + MAX_LOADED_MESSAGES: 200, + TRUNCATED_MESSAGE_VIEW_SIZE: 100, + MAX_MESSAGE_CACHE_SIZE: 250, + MAX_MESSAGE_LENGTH: 2000, + MAX_MESSAGE_PASTE_LENGTH: 3000, + MAX_TTS_LENGTH: 200, + MAX_PINS_PER_CHANNEL: 50, + IDLE_DURATION: 600000, + TYPING_TIMEOUT: 10000, + TYPING_DELAY_LOCAL: 1500, + MAX_TYPING_USERS: 5, + SLOWMODE_COOLDOWN_BUFFER_MS: 100, + SLOWMODE_VALUES: (0 | 5 | 10 | 15 | 30 | 60 | 120 | 300 | 600 | 900 | 1800 | 3600 | 7200 | 21600)[], + MAX_ROLE_LENGTH: 32, + MAX_ATTACHMENT_SIZE: 8388608, + MAX_PREMIUM_TIER_1_ATTACHMENT_SIZE: 52428800, + MAX_PREMIUM_TIER_2_ATTACHMENT_SIZE: 104857600, + MAX_PREMIUM_GUILD_TIER_2_ATTACHMENT_SIZE: 52428800, + MAX_PREMIUM_GUILD_TIER_3_ATTACHMENT_SIZE: 104857600, + EMBED_LIFETIME: 7200000, + GAME_REPORT_VERSION: 3, + MAX_GAMES_NEWS: 100, + SPOILER_ATTACHMENT_PREFIX: "SPOILER_", + MARKDOWN_SPOILER_WRAPPER(...args: any[]):any, + MARKDOWN_SPOILER_REGEXP: {}, + MARKDOWN_SPOILER_REGEXP_GLOBAL: {}, + IMAGE_RE: {}, + ChannelStreamTypes: { + "MESSAGE": "MESSAGE", + "MESSAGE_GROUP_BLOCKED": "MESSAGE_GROUP_BLOCKED", + "DIVIDER": "DIVIDER", + "JUMP_TARGET": "JUMP_TARGET", + "MESSAGE_GROUP": "MESSAGE_GROUP", + "DIVIDER_TIME_STAMP": "DIVIDER_TIME_STAMP", + "DIVIDER_NEW_MESSAGES": "DIVIDER_NEW_MESSAGES" + }, + ChannelModes: { + "VIDEO": "video", + "VOICE": "voice" + }, + ActivityTypes: { + "0": "PLAYING", + "1": "STREAMING", + "2": "LISTENING", + "3": "WATCHING", + "4": "CUSTOM_STATUS", + "PLAYING": 0, + "STREAMING": 1, + "LISTENING": 2, + "WATCHING": 3, + "CUSTOM_STATUS": 4 + }, + ActivityActionTypes: { + "1": "JOIN", + "2": "SPECTATE", + "3": "LISTEN", + "4": "WATCH", + "5": "JOIN_REQUEST", + "JOIN": 1, + "SPECTATE": 2, + "LISTEN": 3, + "WATCH": 4, + "JOIN_REQUEST": 5 + }, + ActivityCardTypes: { + "GAME": "game", + "USER": "user", + "GROUP": "group" + }, + ActivityActionStates: { + "LOADING": "LOADING", + "COMPLETE": "COMPLETE", + "FAILED": "FAILED" + }, + FeaturedGuildLocations: { + "GUILD_DISCOVERY": "GUILD_DISCOVERY" + }, + GuildDiscoverySections: { + "FEATURED": "featured", + "GAMES_YOU_PLAY": "gamesYouPlay", + "SEARCH": "search", + "MISC": "misc" + }, + AVATAR_SIZE: 128, + AVATAR_MAX_SIZE: 1024, + SPLASH_SIZE: 2048, + MAX_PTT_RELEASE_DELAY: 2000, + EMOJI_CATEGORY_RECENT: "recent", + EMOJI_CATEGORY_CUSTOM: "custom", + BITRATE_MIN: 8000, + BITRATE_DEFAULT: 64000, + BITRATE_MAX: 96000, + NON_USER_BOT_DISCRIMINATOR: "0000", + LOCAL_BOT_ID: "1", + MAX_VOICE_USER_LIMIT: 99, + MAX_MUTUAL_GUILDS: 5, + MAX_GROUP_DM_PARTICIPANTS: 10, + MAX_GROUP_DM_STAFF_PARTICIPANTS: 25, + PLACEHOLDER_TAG: "#0000", + LEFT_PANEL_WIDTH: 320, + DEVICE_TOKEN: "DEVICE_TOKEN", + DEVICE_VOIP_TOKEN: "DEVICE_VOIP_TOKEN", + DEVICE_PUSH_PROVIDER: null, + DEVICE_PUSH_VOIP_PROVIDER: null, + FIRST_RUN_DATE_KEY: "first_run_date_key", + MarketingURLs: { + "API_DOCS": "//discord.com/developers/docs/intro", + "API_DOCS_GAME_AND_SERVER_MANAGEMENT": "//discord.com/developers/docs/game-and-server-management/alpha-and-beta-testing", + "API_DOCS_NEWS_CHANNELS": "//discord.com/developers/docs/game-and-server-management/special-channels#news-channels", + "DEVELOPER_PORTAL": "//discord.com/developers", + "COMPANY": "//discord.com/company", + "PARTNERS": "//discord.com/partners", + "HYPESQUAD": "//discord.com/hypesquad", + "TERMS": "//discord.com/terms", + "PRIVACY": "//discord.com/privacy", + "GUIDELINES": "//discord.com/guidelines", + "ACKNOWLEDGEMENTS": "//discord.com/acknowledgements", + "DOWNLOAD": "//discord.com/download", + "CONTACT": "http://dis.gd/contact", + "KRISP": "https://api.krisp.ai/v2/resource/link/discord", + "STREAMKIT": "//discord.com/streamkit", + "WHY_DISCORD": "//discord.com/why-discord" + }, + RelativeMarketingURLs: { + "DEVELOPER_PORTAL": "/developers" + }, + TWITCH_CLIENT_ID: "33kozedd0zs6fbauka98psnc7zwom2s", + MAX_AUTOCOMPLETE_RESULTS: 10, + SMALL_GUILD_MEMBER_THRESHOLD: 30, + SEARCH_PAGE_SIZE: 25, + IS_SEARCH_FILTER_TOKEN: {}, + IS_SEARCH_ANSWER_TOKEN: {}, + EMOJI_MAX_SLOTS: 50, + EMOJI_MAX_SLOTS_MORE: 200, + EMOJI_MAX_LENGTH: 32, + EMOJI_RE: {}, + EMOJI_MAX_FILESIZE_KB: 256, + MAX_GUILD_FOLDER_NAME_LENGTH: 32, + SearchTypes: { + "GUILD": "GUILD", + "CHANNEL": "CHANNEL", + "GIF": "GIF", + "GUILD_DISCOVERY": "GUILD_DISCOVERY" + }, + SearchModes: { + "NEWEST": "newest", + "OLDEST": "oldest", + "MOST_RELEVANT": "most_relevant" + }, + EmojiSprites: { + "NonDiversityPerRow": 42, + "DiversityPerRow": 10, + "PickerPerRow": 11, + "PickerCount": 50 + }, + DIVERSITY_SURROGATES: ("🏻" | "🏼" | "🏽" | "🏾" | "🏿")[], + AbortCodes: { + "UNKNOWN_ACCOUNT": 10001, + "UNKNOWN_APPLICATION": 10002, + "UNKNOWN_CHANNEL": 10003, + "UNKNOWN_GUILD": 10004, + "UNKNOWN_INTEGRATION": 10005, + "UNKNOWN_INVITE": 10006, + "UNKNOWN_MEMBER": 10007, + "UNKNOWN_MESSAGE": 10008, + "UNKNOWN_OVERWRITE": 10009, + "UNKNOWN_PLATFORM": 10010, + "UNKNOWN_ROLE": 10011, + "UNKNOWN_TOKEN": 10012, + "UNKNOWN_USER": 10013, + "UNKNOWN_EMOJI": 10014, + "UNKNOWN_WEBHOOK": 10015, + "UNKNOWN_GIFT_CODE": 10038, + "BOT_DISALLOWED": 20001, + "BOT_REQUIRED": 20002, + "RPC_PROXY_DISALLOWED": 20003, + "EXPLICIT_CONTENT": 20009, + "ACCOUNT_SCHEDULED_FOR_DELETION": 20011, + "USER_NOT_AUTHORIZED_FOR_APPLICATION": 20012, + "ACCOUNT_DISABLED": 20013, + "SLOWMODE_RATE_LIMITED": 20016, + "CHANNEL_FOLLOWING_EDIT_RATE_LIMITED": 20022, + "UNDER_MINIMUM_AGE": 20024, + "TOO_MANY_USER_GUILDS": 30001, + "TOO_MANY_BOT_GUILDS": 30001, + "TOO_MANY_FRIENDS": 30002, + "TOO_MANY_PINS_IN_CHANNEL": 30003, + "TOO_MANY_RECIPIENTS": 30004, + "TOO_MANY_GUILD_ROLES": 30005, + "TOO_MANY_USING_USERNAME": 30006, + "TOO_MANY_WEBHOOKS": 30007, + "TOO_MANY_EMOJI": 30008, + "TOO_MANY_REACTIONS": 30010, + "TOO_MANY_ANIMATED_EMOJI": 30018, + "NOT_ENOUGH_GUILD_MEMBERS": 30029, + "UNAUTHORIZED": 40001, + "EMAIL_VERIFICATION_REQUIRED": 40002, + "RATE_LIMIT_DM_OPEN": 40003, + "SEND_MESSAGE_TEMPORARILY_DISABLED": 40004, + "USER_BANNED": 40007, + "CONNECTION_REVOKED": 40012, + "DELETE_ACCOUNT_TRANSFER_TEAM_OWNERSHIP": 40028, + "INVALID_ACCESS": 50001, + "INVALID_ACCOUNT_TYPE": 50002, + "INVALID_ACTION_DM": 50003, + "INVALID_EMBED_DISABLED": 50004, + "INVALID_MESSAGE_AUTHOR": 50005, + "INVALID_MESSAGE_EMPTY": 50006, + "INVALID_MESSAGE_SEND_USER": 50007, + "INVALID_MESSAGE_SEND_NON_TEXT": 50008, + "INVALID_MESSAGE_VERIFICATION_LEVEL": 50009, + "INVALID_OAUTH_APP_BOT": 50010, + "INVALID_OAUTH_APP_LIMIT": 50011, + "INVALID_OAUTH_STATE": 50012, + "INVALID_PERMISSIONS": 50013, + "INVALID_TOKEN": 50014, + "INVALID_NOTE": 50015, + "INVALID_BULK_DELETE_COUNT": 50016, + "INVALID_MFA_LEVEL": 50017, + "INVALID_PASSWORD": 50018, + "INVALID_PIN_MESSAGE_CHANNEL": 50019, + "INVALID_INVITE_CODE": 50020, + "INVALID_PHONE_NUMBER": 50022, + "INVALID_CLIENT_ID": 50023, + "INVALID_CHANNEL_TYPE": 50024, + "INVALID_OAUTH2_ACCESS_TOKEN": 50025, + "INVALID_OAUTH2_MISSING_SCOPE": 50026, + "INVALID_WEBHOOK_TOKEN": 50027, + "INVALID_GIFT_REDEMPTION_EXHAUSTED": 50050, + "INVALID_GIFT_REDEMPTION_OWNED": 50051, + "INVALID_GIFT_SELF_REDEMPTION": 50054, + "INVALID_GIFT_REDEMPTION_SUBSCRIPTION_MANAGED": 100021, + "INVALID_GIFT_REDEMPTION_SUBSCRIPTION_INCOMPATIBLE": 100023, + "INVALID_GIFT_REDEMPTION_INVOICE_OPEN": 100024, + "MFA_ENABLED": 60001, + "MFA_DISABLED": 60002, + "MFA_REQUIRED": 60003, + "MFA_UNVERIFIED": 60004, + "MFA_INVALID_SECRET": 60005, + "MFA_INVALID_TICKET": 60006, + "MFA_INVALID_CODE": 60008, + "MFA_INVALID_SESSION": 60009, + "PHONE_NUMBER_UNABLE_TO_SEND": 70003, + "RELATIONSHIP_INCOMING_DISABLED": 80000, + "RELATIONSHIP_INCOMING_BLOCKED": 80001, + "RELATIONSHIP_INVALUD_USER_BOT": 80002, + "RELATIONSHIP_INVALID_SELF": 80003, + "RELATIONSHIP_INVALID_DISCORD_TAG": 80004, + "REACTION_BLOCKED": 90001, + "LISTING_ALREADY_JOINED": 120000, + "LISTING_TOO_MANY_MEMBERS": 120001, + "LISTING_JOIN_BLOCKED": 120002 + }, + CLYDE_ERROR_MESSAGES: { + "20016": "BOT_DM_SEND_MESSAGE_TEMPORARILY_DISABLED", + "40002": "BOT_REQUIRES_EMAIL_VERIFICATION", + "40003": "BOT_DM_RATE_LIMITED", + "40004": "BOT_DM_SEND_MESSAGE_TEMPORARILY_DISABLED", + "50007": "BOT_DM_SEND_FAILED", + "DEFAULT": "BOT_DM_SEND_FAILED" + }, + AnalyticsLocations: { + "GUILD_CREATE_INVITE_SUGGESTION": "Guild Create Invite Suggestion", + "ADD_FRIENDS_TO_DM": "Add Friends to DM", + "CAROUSEL_PROMOTION_UNIT": "Carousel Promotion Unit", + "MESSAGE_EMBED": "Message Embed", + "GAME_POPOUT": "Game Popout", + "GAME_MODAL": "Game Modal", + "PROFILE_POPOUT": "Profile Popout", + "QUICK_LAUNCHER": "Quick Launcher", + "TRAY_CONTEXT_MENU": "Tray Context Menu", + "QUICK_SWITCHER": "Quick Switcher", + "APPLICATION_LIBRARY": "Application Library", + "APPLICATION_LIBRARY_UPDATES": "Application Library Updates", + "APPLICATION_STORE": "Application Store", + "APPLICATION_STORE_HEADER": "Application Store Header", + "APPLICATION_STORE_TILE": "Application Store Tile", + "APPLICATION_STORE_HERO": "Application Store Hero", + "APPLICATION_STORE_PAYMENT_MODAL": "Application Store Purchase Modal", + "APPLICATION_STORE_LISTING_BACK_BUTTON": "Application Store Listing Back Button", + "APPLICATION_STORE_LISTING_DETAILS": "Application Store Listing Details", + "APPLICATION_STORE_RELATED_CONTENT": "Application Store Related Content", + "APPLICATION_STORE_PREMIUM_CAROUSEL": "Application Store Premium Carousel", + "APPLICATION_STORE_WARNING": "Application Store Warning", + "APPLICATION_CONTEXT_MENU_TOGGLE_INSTALL": "Application Context Menu Toggle Install", + "APPLICATION_CONTEXT_MENU_PLAY": "Application Context Menu Play", + "APPLICATION_TEST_MODE_NOTICE": "Application Test Mode Notice", + "HOME_BUTTON": "Home Button", + "HOME_NAVIGATION": "Home Navigation", + "IN_APPLICATION_PURCHASE_OVERLAY": "In-Application Purchase - Overlay", + "IN_APPLICATION_PURCHASE_FALLBACK": "In-Application Purchase - App", + "URI_SCHEME": "URI Scheme", + "CREATE_JOIN_GUILD_MODAL": "Create or Join Guild Modal", + "LOCKED_OVERLAY": "Locked Overlay", + "UNLOCKED_OVERLAY": "Unlocked Overlay", + "OVERLAY_NUDGE": "Overlay Nudge", + "PROMOTION_CARD": "Promotion Card", + "SHARE_NEWS_MODAL": "Share News Modal", + "ACTIVITY_PANEL": "Activity Panel", + "VOICE_PANEL": "Voice Panel", + "GO_LIVE_MODAL": "Go Live Modal", + "STREAM": "Stream", + "INTENT_DISCOVERY": "Intent Discovery", + "REGISTRATION": "Registration", + "LARGE_SERVER_INTENT_DISCOVERY": "Large Game Server Intent Discovery" + }, + AnalyticsGameOpenTypes: { + "SPECTATE": "spectate", + "JOIN": "join", + "ASK_TO_JOIN": "ask to join", + "LAUNCH": "launch" + }, + AnalyticsUserStatusTypes: { + "ONLINE_DESKTOP": "online-desktop", + "ONLINE_MOBILE": "online-mobile-only" + }, + AnalyticsOverlayLocations: { + "OVERLAY_UNLOCKED": "overlay_unlocked", + "OVERLAY_UNLOCKED_PINNED": "overlay_unlocked_pinned", + "OVERLAY_LOCKED_ACTIVATED": "overlay_locked_activated" + }, + AnalyticsPages: { + "AUTH": "Auth", + "STORE_LISTING": "Store Listing", + "STORE_DIRECTORY_HOME": "Store Directory Home", + "STORE_DIRECTORY_BROWSE": "Store Directory Browse", + "CHANNEL_STORE_LISTING": "Channel Store Listing", + "LIBRARY": "Library", + "LIBRARY_SETTINGS": "Library Settings", + "USER_SETTINGS": "User Settings", + "USER_PROFILE": "User Profile", + "GUILD_CHANNEL": "Guild Channel", + "DM_CHANNEL": "DM Channel", + "FRIENDS_LIST": "Friends List", + "DIRECT": "Direct", + "IN_APP": "In App", + "GUILD_DISCOVERY": "Guild Discovery", + "QUICK_SWITCHER": "Quick Switcher", + "DISCOVER_HOMEPAGE": "Discover Homepage", + "PREMIUM_GUILD_USER_MODAL": "User-Facing Premium Guild Subscription Fullscreen Modal", + "PUBLIC_GUILD": "Public Guild", + "NSFW_CHANNEL": "NSFW Channel" + }, + AnalyticsSections: { + "HERO": "Hero", + "BODY": "Body", + "NAVIGATION": "Navigation", + "TABS": "Tabs", + "NOTIFICATION_BAR": "Notification Bar", + "PROFILE_MODAL": "Profile Modal", + "EMOJI_PICKER_POPOUT": "Emoji Picker Popout", + "FILE_UPLOAD_POPOUT": "File Upload Popout", + "GUILD_POPOUT": "Guild Popout", + "PROFILE_POPOUT": "Profile Popout", + "SCREENSHARE_POPOUT": "Screenshare Popout", + "GAME_MODAL": "Game Modal", + "GAME_POPOUT": "Game Popout", + "IOS_TWO_FA_MODAL": "Two Factor Auth Modal", + "IOS_TWO_FA_LANDING": "Two Factor Auth Landing", + "IOS_TWO_FA_SCAN": "Two Factor Auth Scan Code", + "IOS_TWO_FA_ENTER_CODE": "Two Factor Auth Enter Code", + "IOS_TWO_FA_SUCCESS": "Two Factor Auth Enable Success", + "IOS_TWO_FA_ADD_SMS": "Two Factor Auth Add SMS", + "IOS_TWO_FA_VERIFY_SMS": "Two Factor Auth Verify SMS", + "PREMIUM_GUILD_SUBSCRIBE_MODAL": "Premium Guild Subscribe Modal", + "PREMIUM_GUILD_UNSUBSCRIBE_MODAL": "Premium Guild Unsubscribe Modal", + "PREMIUM_GUILD_PURCHASE_MODAL": "Premium Guild Purchase Modal", + "CHANNEL_NOTICE": "Channel Notice", + "CUSTOM_STATUS_MODAL": "Custom Status Modal", + "PAYMENT_AUTHENTICATION_MODAL": "Payment Authentication", + "NOISE_CANCELLATION_POPOUT": "Noise Cancellation Popout", + "IOS_AGE_GATE_MODAL": "iOS Public Server Age Gate", + "DESKTOP_AGE_GATE_MODAL": "Desktop Public Server Age Gate", + "CLAIM_ACCOUNT_MODAL": "Claim Account", + "INBOX": "Inbox", + "CHANNEL": "Channel", + "CHANNEL_TEXT_AREA": "Channel Text Area", + "CHANNEL_LIST": "Channel List", + "ACTIVITY_PANEL": "Activity Panel", + "MEMBER_LIST": "Member List", + "ACCOUNT_PANEL": "Account Panel", + "CHANNEL_WELCOME_CTA": "Channel Welcome CTA", + "ACTIVITY_FEED_GAME_POPOUT": "Game Popout", + "ACTIVITY_FEED_NOW_PLAYING": "Now Playing", + "ACTIVITY_FEED_NOW_PLAYING_HOVER_POPOUT": "Now Playing Hover Popout", + "LIBRARY_INSTALL_MODULE": "Install Module", + "LIBRARY_APPLICATION_LIST": "Application List", + "LIBRARY_PREMIUM_APPLICATIONS": "Library Premium Applications", + "LIBRARY_GAME_MODAL": "Game Modal", + "LIBRARY_INVENTORY_CODE_REDEMPTION": "Code Redemption", + "LIBRARY_INVENTORY_GIFTS_LIST": "Gifts List", + "STORE_LISTING_BUY_GAME": "Buy Game", + "STORE_LISTING_BUY": "Buy", + "SETTINGS_ACCOUNT": "My Account", + "SETTINGS_EDIT_ACCOUNT": "Edit Account", + "SETTINGS_CHANGE_PASSWORD": "Change Password", + "SETTINGS_BACKUP_CODES": "Backup Codes", + "SETTINGS_PRIVACY_AND_SAFETY": "Privacy & Safety", + "SETTINGS_AUTHORIZED_APPS": "Authorized Apps", + "SETTINGS_CONNECTIONS": "Connections", + "SETTINGS_CONNECTIONS_XBOX": "Connections Xbox", + "SETTINGS_BILLING": "Billing", + "SETTINGS_PREMIUM": "Discord Nitro", + "SETTINGS_PREMIUM_GIFTING": "Nitro Gifting", + "PREMIUM_GUILD_SUBSCRIPTION": "Nitro Server Boost", + "SETTINGS_HYPESQUAD_ONLINE": "Hypesquad Online", + "SETTINGS_VOICE_AND_VIDEO": "Voice & Video", + "SETTINGS_OVERLAY": "Overlay", + "SETTINGS_NOTIFICATIONS": "Notifications", + "SETTINGS_KEYBINDS": "Keybinds", + "SETTINGS_GAME_ACTIVITY": "Game Activity", + "SETTINGS_TEXT_AND_IMAGES": "Text & Images", + "SETTINGS_APPEARANCE": "Appearance", + "SETTINGS_STREAMER_MODE": "Streamer Mode", + "SETTINGS_LANGUAGE": "Language", + "SETTINGS_CHANGELOG": "Change Log", + "SETTINGS_EXPERIMENTS": "Experiments", + "SETTINGS_DEVELOPER_OPTIONS": "Developer Options", + "SETTINGS_WINDOWS": "Windows", + "SETTINGS_LINUX": "Linux", + "SETTINGS_BLOCKED_USERS": "Blocked Users", + "SETTINGS_INVENTORY": "Library Inventory", + "SETTINGS_CUSTOM_STATUS": "Custom Status", + "SETTINGS_BROWSER": "Browser", + "SETTINGS_OVERVIEW": "Overview", + "SETTINGS_CUSTOM_STATUS_EMOJI_PICKER": "Custom Status Emoji Picker", + "SETTINGS_DESKTOP_APP": "Desktop Only", + "SETTINGS_PUBLIC_WELCOME": "Welcome Screen Settings", + "APPLICATION_EMBED": "Application Embed", + "GIFT_CODE_EMBED": "Gift Code Embed", + "GUILD_HEADER": "Guild Header", + "GUILD_HEADER_POPOUT": "Guild Header Popout", + "STREAM_VIEWER_POPOUT": "Stream Viewer Popout", + "DISCOVER_SEARCH": "Search", + "DISCOVER_GAMES_YOU_PLAY": "Games You Play", + "DISCOVER_POPULAR": "Popular", + "DISCOVER_COLLECTION_GAMING": "Gaming", + "DISCOVER_COLLECTION_COMICS_HEROES": "Comics / Heroes", + "DISCOVER_COLLECTION_ANIME": "Anime", + "DISCOVER_COLLECTION_MUSIC": "Music", + "DISCOVER_COLLECTION_ESPORTS": "electronic-Sports", + "PREMIUM_GUILD_USER_MODAL_CTA_BAR": "CTA Bar", + "PREMIUM_GUILD_USER_MODAL_PROGRESS_BAR": "Progress Bar", + "REGISTER": "Register", + "LOGIN": "Login", + "OVERLAY": "Overlay" + }, + AnalyticsObjects: { + "TOOLTIP": "Tooltip", + "CARD": "Card", + "CAROUSEL": "Carousel", + "NAVIGATION_LINK": "Nav Link", + "SUBSCRIBE_TO_TIER_BUTTON": "Subscribe up to Tier Button", + "BUTTON_BROWSE": "Button Browse", + "BUTTON_HOME": "Button Home", + "BUTTON_BACK": "Button Back", + "BUTTON_CTA": "Button CTA", + "BUTTON_ICON": "Button Icon", + "MENU_LINK": "Menu Link", + "WEB_URL": "Web URL", + "LIST_ITEM": "List Item", + "CONTEXT_MENU": "Context Menu", + "SEARCH": "Search", + "ALTERNATIVE_SKU": "Alternative Sku", + "HOVER_MENU": "Hover Menu", + "AVATAR": "Avatar", + "CHANNEL": "Channel", + "BADGE": "Badge" + }, + AnalyticsObjectTypes: { + "GIFT": "gift", + "BUY": "buy", + "BOX_ART": "box_art", + "PERK": "perk", + "TIER_1": "tier_1", + "TIER_2": "tier_2", + "TIER_3": "tier_3", + "TRIAL": "trial" + }, + DIRECT_ANALYTICS_LOCATION: { + "page": "Direct", + "object": "Web URL" + }, + UserSettingsSections: { + "OVERVIEW": "Overview", + "BROWSER": "Browser", + "CHANGE_LOG": "Change Log", + "PREMIUM_GIFTING": "Nitro Gifting", + "BLOCKED_USERS": "Blocked Users", + "CUSTOM_STATUS": "Custom Status", + "CUSTOM_STATUS_EMOJI_PICKER": "Custom Status Emoji Picker", + "ACCOUNT": "My Account", + "ACCOUNT_EDIT": "Edit Account", + "ACCOUNT_CHANGE_PASSWORD": "Change Password", + "ACCOUNT_BACKUP_CODES": "Backup Codes", + "CONNECTIONS": "Connections", + "CONNECTIONS_XBOX": "Connections Xbox", + "AUTHORIZED_APPS": "Authorized Apps", + "TEXT": "Text & Images", + "VOICE": "Voice & Video", + "PRIVACY_AND_SAFETY": "Privacy & Safety", + "NOTIFICATIONS": "Notifications", + "GAME_ACTIVITY": "Game Activity", + "KEYBINDS": "Keybinds", + "APPEARANCE": "Appearance", + "OVERLAY": "Overlay", + "LOCALE": "Language", + "STREAMER_MODE": "Streamer Mode", + "PREMIUM": "Discord Nitro", + "PREMIUM_GUILD_SUBSCRIPTION": "Nitro Server Boost", + "BILLING": "Billing", + "EXPERIMENTS": "Experiments", + "DEVELOPER_OPTIONS": "Developer Options", + "WINDOWS": "Windows", + "LINUX": "Linux", + "HYPESQUAD_ONLINE": "Hypesquad Online", + "DESKTOP_APP": "Desktop Only", + "INVENTORY": "Library Inventory" + }, + TwoFAModalSetupSections: { + "LANDING": "Two Factor Auth Landing", + "SCAN": "Two Factor Auth Scan Code", + "ENTER_CODE": "Two Factor Auth Enter Code", + "SUCCESS": "Two Factor Auth Enable Success", + "ADD_SMS": "Two Factor Auth Add SMS", + "VERIFY_SMS": "Two Factor Auth Verify SMS" + }, + PopoutCallers: { + "CALL": "CALL", + "GROUP_DM": "GROUP_DM" + }, + JoinGuildSources: { + "APPLICATION_STORE": "Application Store Verified Guild Invite - Lurker", + "CHAT_INPUT_BLOCKER": "Chat Input Blocker - Lurker Mode", + "NOTICE_BAR": "Notice - Lurker Mode" + }, + LoginSuccessfulSources: { + "QR_CODE": "QR Code Login" + }, + InstantInviteSources: { + "INVITE_NOTICE": "Invite Notice", + "SETTINGS_INVITE": "Settings Invite", + "CONTEXT_MENU": "Context Menu", + "WELCOME_MESSAGE": "Welcome Message", + "GUILD_CHANNELS": "Guild Channels", + "GUILD_HEADER": "Guild Header", + "GUILD_CONTEXT_MENU": "Guild Context Menu", + "GUILD_CREATE": "Guild Create", + "STREAM_INVITE": "Stream Invite", + "GUILD_PROGRESS": "Guild Progress", + "CHANNEL_WELCOME": "Channel Welcome CTA" + }, + ChannelNoticeCtaSources: { + "GUILD_AFFINITY_SUGGESTION": "Guild Affinity Suggestion", + "GUILD_MFA_WARNING": "Guild MFA Warning", + "GUILD_SUBSCRIPTION_NOTICE": "Guild Subscription Notice", + "QUICK_SWITCHER_NOTICE": "Quick Switcher Notice", + "INVITE_NOTICE": "Invite Notice", + "GRACE_PERIOD_NOTICE": "Grace Period Notice", + "ENABLE_PUBLIC_GUILD_UPSELL_NOTICE": "Enable Public Guild Upsell Notice" + }, + InviteTypes: { + "APPLICATION": "Application", + "SERVER_INVITE": "Server Invite", + "GDM_INVITE": "GDM Invite", + "SPOTIFY": "Spotify", + "STREAM": "Stream" + }, + ComponentActions: { + "MODAL_SUBMIT": "MODAL_SUBMIT", + "MODAL_CLOSE": "MODAL_CLOSE", + "TEXTAREA_FOCUS": "TEXTAREA_FOCUS", + "TEXTAREA_BLUR": "TEXTAREA_BLUR", + "SCROLLTO_PRESENT": "SCROLLTO_PRESENT", + "SCROLLTO_CHANNEL": "SCROLLTO_CHANNEL", + "TOGGLE_CHANNEL_PINS": "TOGGLE_CHANNEL_PINS", + "TOGGLE_INBOX": "TOGGLE_INBOX", + "MARK_TOP_INBOX_CHANNEL_READ": "MARK_TOP_INBOX_CHANNEL_READ", + "TOGGLE_EMOJI_POPOUT": "TOGGLE_EMOJI_POPOUT", + "TOGGLE_GIF_PICKER_POPOUT": "TOGGLE_GIF_PICKER_POPOUT", + "TOGGLE_DM_CREATE": "TOGGLE_DM_CREATE", + "INSERT_TEXT": "INSERT_TEXT", + "SCROLL_PAGE_DOWN": "SCROLL_PAGE_DOWN", + "SCROLL_PAGE_UP": "SCROLL_PAGE_UP", + "FOCUS_FRIEND_SEARCH": "FOCUS_FRIEND_SEARCH", + "BLUR_INPUT": "BLUR_INPUT", + "POPOUT_CLOSE": "POPOUT_CLOSE", + "POPOUT_SHOW": "POPOUT_SHOW", + "POPOUT_HIDE": "POPOUT_HIDE", + "UPLOAD_FILE": "UPLOAD_FILE", + "CALL_ACCEPT": "CALL_ACCEPT", + "CALL_DECLINE": "CALL_DECLINE", + "CALL_START": "CALL_START", + "DDR_ARROW_DOWN": "DDR_ARROW_DOWN", + "DDR_ARROW_UP": "DDR_ARROW_UP", + "SHAKE_APP": "SHAKE_APP", + "EMPHASIZE_NOTICE": "EMPHASIZE_NOTICE", + "EMPHASIZE_SLOWMODE_COOLDOWN": "EMPHASIZE_SLOWMODE_COOLDOWN", + "SET_SEARCH_QUERY": "SET_SEARCH_QUERY", + "FOCUS_SEARCH": "FOCUS_SEARCH", + "PERFORM_SEARCH": "PERFORM_SEARCH", + "QUICKSWITCHER_RESULT_FOCUS": "QUICKSWITCHER_RESULT_FOCUS", + "LAYER_POP_ESCAPE_KEY": "LAYER_POP_ESCAPE_KEY", + "LAYER_POP_START": "LAYER_POP_START", + "LAYER_POP_COMPLETE": "LAYER_POP_COMPLETE", + "CONTEXT_MENU_CLOSE": "CONTEXT_MENU_CLOSE", + "GUILD_SIDEBAR_FORCE_UPDATE": "GUILD_SIDEBAR_FORCE_UPDATE", + "WAVE_EMPHASIZE": "WAVE_EMPHASIZE", + "CHAT_RESIZE": "CHAT_RESIZE", + "CAROUSEL_NEXT": "CAROUSEL_NEXT", + "CAROUSEL_PREV": "CAROUSEL_PREV", + "MODAL_CAROUSEL_NEXT": "MODAL_CAROUSEL_NEXT", + "MODAL_CAROUSEL_PREV": "MODAL_CAROUSEL_PREV", + "CHANNEL_LIST_RECALCULATE": "CHANNEL_LIST_RECALCULATE", + "TRANSITION_JOIN_GUILD": "TRANSITION_JOIN_GUILD", + "TOGGLE_GIF_PICKER": "TOGGLE_GIF_PICKER", + "CLOSE_GIF_PICKER": "CLOSE_GIF_PICKER", + "FAVORITE_GIF": "FAVORITE_GIF", + "SCROLL_TO_VOICE_CHANNEL": "SCROLL_TO_VOICE_CHANNEL", + "GLOBAL_CLIPBOARD_PASTE": "GLOBAL_CLIPBOARD_PASTE", + "INSERT_QUOTE_TEXT": "INSERT_QUOTE_TEXT", + "SEARCH_RESULTS_CLOSE": "SEARCH_RESULTS_CLOSE", + "MESSAGE_UPDATE": "MESSAGE_UPDATE", + "MESSAGE_EDIT_UPDATE": "MESSAGE_EDIT_UPDATE", + "FOCUS_MESSAGES": "FOCUS_MESSAGES" + }, + NAVIGATION_THROTTLE: 50, + PlatformTypes: { + "TWITCH": "twitch", + "YOUTUBE": "youtube", + "SKYPE": "skype", + "STEAM": "steam", + "LEAGUE_OF_LEGENDS": "leagueoflegends", + "BATTLENET": "battlenet", + "REDDIT": "reddit", + "TWITTER": "twitter", + "SPOTIFY": "spotify", + "FACEBOOK": "facebook", + "XBOX": "xbox", + "SAMSUNG": "samsung", + "CONTACTS": "contacts" + }, + ActivityGamePlatforms: { + "DESKTOP": "desktop", + "XBOX": "xbox", + "SAMSUNG": "samsung", + "IOS": "ios", + "ANDROID": "android" + }, + LOCAL_PLATFORM_TYPES: [ + "contacts" + ], + FRIEND_SYNC_PLATFORM_TYPES: [ + "facebook" + ], + ACTIVITY_PLATFORM_TYPES: [ + "spotify", + "xbox" + ], + Arrows: { + "UP": "UP", + "DOWN": "DOWN", + "LEFT": "LEFT", + "RIGHT": "RIGHT" + }, + SurveyUrls: { + "PLATFORM": "https://www.surveymonkey.com/r/ZKPFFWH", + "COMMUNITIES": "https://www.surveymonkey.com/r/2CDQY5L", + "MOBILE": {} + }, + BillingRedirectResultTypes: { + "CANCEL": "cancel", + "PREMIUM": "premium", + "PAYMENT_SOURCE": "paymentSource", + "UNKNOWN": "unknown" + }, + DownloadLinks: { + "DESKTOP": "https://discord.com/api/download", + "IOS": "https://itunes.apple.com/app/discord/id985746746", + "ANDROID": "https://play.google.com/store/apps/details?id=com.discord" + }, + DEFAULT_ROLE_COLOR: 10070709, + ROLE_COLORS: (1752220 | 3066993 | 3447003 | 10181046 | 15277667 | 15844367 | 15105570 | 15158332 | 9807270 | 6323595 | 1146986 | 2067276 | 2123412 | 7419530 | 11342935 | 12745742 | 11027200 | 10038562 | 9936031 | 5533306)[], + DEFAULT_FOLDER_COLOR: 7506394, + PermissionOverrideType: { + "ROLE": "ROLE", + "MEMBER": "MEMBER" + }, + NativeFeatures: { + "VOICE_LEGACY_SUBSYSTEM": "voice_legacy_subsystem", + "DEBUG_LOGGING": "debug_logging", + "POPOUT_WINDOWS": "popout_windows", + "ELEVATED_HOOK": "elevated_hook", + "CREATE_HOST_ON_ATTACH": "create_host_on_attach" + }, + SearchTokenTypes: { + "FILTER_FROM": "FILTER_FROM", + "FILTER_MENTIONS": "FILTER_MENTIONS", + "ANSWER_USERNAME_FROM": "ANSWER_USERNAME_FROM", + "ANSWER_USERNAME_MENTIONS": "ANSWER_USERNAME_MENTIONS", + "FILTER_HAS": "FILTER_HAS", + "ANSWER_HAS": "ANSWER_HAS", + "FILTER_FILE_TYPE": "FILTER_FILE_TYPE", + "ANSWER_FILE_TYPE": "ANSWER_FILE_TYPE", + "FILTER_FILE_NAME": "FILTER_FILE_NAME", + "ANSWER_FILE_NAME": "ANSWER_FILE_NAME", + "FILTER_BEFORE": "FILTER_BEFORE", + "ANSWER_BEFORE": "ANSWER_BEFORE", + "FILTER_AFTER": "FILTER_AFTER", + "ANSWER_AFTER": "ANSWER_AFTER", + "FILTER_ON": "FILTER_ON", + "ANSWER_ON": "ANSWER_ON", + "FILTER_IN": "FILTER_IN", + "ANSWER_IN": "ANSWER_IN" + }, + SearchAutocompleteGroups: { + "HISTORY": "HISTORY", + "SEARCH_OPTIONS": "SEARCH_OPTIONS", + "DATES": "DATES" + }, + SearchPopoutModes: { + "EMPTY": "EMPTY", + "FILTER": "FILTER", + "FILTER_ALL": "FILTER_ALL" + }, + SEARCH_DATE_FORMAT: "YYYY-MM-DD", + SEARCH_MONTH_FORMAT: "MMMM", + SEARCH_POPOUT_ID: "search-popout", + NEW_GROUP_DM_POPOUT_ID: "PrivateChannelRecipientsInvitePopout", + GuildPrivacyTypes: { + "PUBLIC": "PUBLIC", + "PRIVATE": "PRIVATE" + }, + PremiumGuildTiers: { + "0": "NONE", + "1": "TIER_1", + "2": "TIER_2", + "3": "TIER_3", + "NONE": 0, + "TIER_1": 1, + "TIER_2": 2, + "TIER_3": 3 + }, + PremiumGuildSubscriptionsRequired: { + "0": 0, + "1": 2, + "2": 15, + "3": 30 + }, + PremiumGuildLimits: { + "0": { + "emoji": 50, + "bitrate": 96000, + "fileSize": 8388608 + }, + "1": { + "emoji": 100, + "bitrate": 128000, + "fileSize": 8388608 + }, + "2": { + "emoji": 150, + "bitrate": 256000, + "fileSize": 52428800 + }, + "3": { + "emoji": 250, + "bitrate": 384000, + "fileSize": 104857600 + } + }, + UserPremiumGuildSubscriptionLevels: { + "1": "LEVEL_1", + "2": "LEVEL_2", + "3": "LEVEL_3", + "4": "LEVEL_4", + "5": "LEVEL_5", + "6": "LEVEL_6", + "7": "LEVEL_7", + "8": "LEVEL_8", + "9": "LEVEL_9", + "LEVEL_1": 1, + "LEVEL_2": 2, + "LEVEL_3": 3, + "LEVEL_4": 4, + "LEVEL_5": 5, + "LEVEL_6": 6, + "LEVEL_7": 7, + "LEVEL_8": 8, + "LEVEL_9": 9 + }, + UserPremiumGuildSubscriptionMonths: { + "1": 1, + "2": 2, + "3": 3, + "4": 6, + "5": 9, + "6": 12, + "7": 15, + "8": 18, + "9": 24 + }, + PREMIUM_GUILD_SUBSCRIBE_COOLDOWN_DAYS: 7, + PremiumTypes: { + "0": "NONE", + "1": "TIER_1", + "2": "TIER_2", + "NONE": 0, + "TIER_1": 1, + "TIER_2": 2 + }, + PremiumUserLimits: { + "0": { + "fileSize": 8388608 + }, + "1": { + "fileSize": 52428800 + }, + "2": { + "fileSize": 104857600 + } + }, + PREMIUM_SUBSCRIPTION_APPLICATION: "521842831262875670", + PremiumSubscriptionSKUs: { + "NONE": "628379670982688768", + "LEGACY": "521842865731534868", + "TIER_1": "521846918637420545", + "TIER_2": "521847234246082599", + "GUILD": "590663762298667008" + }, + PremiumSubscriptionSKUToPremiumType: { + "521842865731534868": 2, + "521846918637420545": 1, + "521847234246082599": 2 + }, + SubscriptionPlans: { + "NONE_MONTH": "628379151761408000", + "NONE_YEAR": "628381571568631808", + "PREMIUM_MONTH_LEGACY": "511651856145973248", + "PREMIUM_YEAR_LEGACY": "511651860671627264", + "PREMIUM_MONTH_TIER_1": "511651871736201216", + "PREMIUM_YEAR_TIER_1": "511651876987469824", + "PREMIUM_MONTH_TIER_2": "511651880837840896", + "PREMIUM_YEAR_TIER_2": "511651885459963904", + "PREMIUM_MONTH_GUILD": "590665532894740483", + "PREMIUM_YEAR_GUILD": "590665538238152709" + }, + SubscriptionPlanGatewayPlans: { + "628379151761408000": "none_month", + "628381571568631808": "none_year", + "511651856145973248": "premium_month", + "511651860671627264": "premium_year", + "511651871736201216": "premium_month_tier_1", + "511651876987469824": "premium_year_tier_1", + "511651880837840896": "premium_month_tier_2", + "511651885459963904": "premium_year_tier_2", + "590665532894740483": null, + "590665538238152709": null + }, + PREMIUM_PLANS: [ + "511651856145973248", + "511651860671627264", + "511651871736201216", + "511651876987469824", + "511651880837840896", + "511651885459963904" + ], + PREMIUM_GUILD_SUBSCRIPTION_PLANS: [ + "590665532894740483", + "590665538238152709" + ], + SubscriptionIntervalTypes: { + "1": "MONTH", + "2": "YEAR", + "3": "DAY", + "MONTH": 1, + "YEAR": 2, + "DAY": 3 + }, + SubscriptionPlanInfo: { + "628379151761408000": { + "id": "628379151761408000", + "name": "None Monthly", + "price": 0, + "currency": "usd", + "taxInclusive": true, + "skuId": "628379670982688768", + "interval": 1, + "intervalCount": 1 + }, + "628381571568631808": { + "id": "628381571568631808", + "name": "None Yearly", + "price": 0, + "currency": "usd", + "taxInclusive": true, + "skuId": "628379670982688768", + "interval": 2, + "intervalCount": 1 + }, + "511651856145973248": { + "id": "511651856145973248", + "name": "Nitro Monthly (Legacy)", + "price": 499, + "currency": "usd", + "taxInclusive": true, + "premiumType": 2, + "skuId": "521842865731534868", + "interval": 1, + "intervalCount": 1 + }, + "511651860671627264": { + "id": "511651860671627264", + "name": "Nitro Classic Yearly (Legacy)", + "price": 4999, + "currency": "usd", + "taxInclusive": true, + "premiumType": 2, + "skuId": "521842865731534868", + "interval": 2, + "intervalCount": 1 + }, + "511651871736201216": { + "id": "511651871736201216", + "name": "Nitro Classic Monthly", + "price": 499, + "currency": "usd", + "taxInclusive": true, + "premiumType": 1, + "skuId": "521846918637420545", + "interval": 1, + "intervalCount": 1 + }, + "511651876987469824": { + "id": "511651876987469824", + "name": "Nitro Classic Yearly", + "price": 4999, + "currency": "usd", + "taxInclusive": true, + "premiumType": 1, + "skuId": "521846918637420545", + "interval": 2, + "intervalCount": 1 + }, + "511651880837840896": { + "id": "511651880837840896", + "name": "Nitro Monthly", + "price": 999, + "currency": "usd", + "taxInclusive": true, + "premiumType": 2, + "skuId": "521847234246082599", + "interval": 1, + "intervalCount": 1 + }, + "511651885459963904": { + "id": "511651885459963904", + "name": "Nitro Yearly", + "price": 9999, + "currency": "usd", + "taxInclusive": true, + "premiumType": 2, + "skuId": "521847234246082599", + "interval": 2, + "intervalCount": 1 + }, + "590665532894740483": { + "id": "590665532894740483", + "name": "Nitro Server Boost Monthly", + "price": 499, + "premiumUserPrice": 349, + "currency": "usd", + "taxInclusive": true, + "skuId": "590663762298667008", + "interval": 1, + "intervalCount": 1 + }, + "590665538238152709": { + "id": "590665538238152709", + "name": "Nitro Server Boost Yearly", + "price": 4999, + "premiumUserPrice": 3499, + "currency": "usd", + "taxInclusive": true, + "skuId": "590663762298667008", + "interval": 2, + "intervalCount": 1 + } + }, + PREMIUM_YEARLY_DISCOUNT_PERCENT: 16, + PREMIUM_SUBSCRIPTION_TRIAL_ID: "520373071933079552", + SubscriptionTrials: { + "520373071933079552": { + "id": "520373071933079552", + "skus": [ + "521847234246082599" + ] + } + }, + PaymentFlags: { + "GIFT": 1, + "PREORDER": 8 + }, + SubscriptionStatusTypes: { + "0": "UNPAID", + "1": "ACTIVE", + "2": "PAST_DUE", + "3": "CANCELED", + "UNPAID": 0, + "ACTIVE": 1, + "PAST_DUE": 2, + "CANCELED": 3 + }, + PremiumPaymentSubscriptionModes: { + "NEW": "new", + "RESUBSCRIBE": "resubscribe" + }, + SubscriptionTypes: { + "1": "PREMIUM", + "PREMIUM": 1 + }, + PaymentModalPriceChangedError: "Price changed", + MAX_INVOICE_PAYMENT_DAYS: 3, + MAX_IMAGE_WIDTH: 2560, + MAX_IMAGE_HEIGHT: 2560, + AutoCompleteResultTypes: { + "USER": "USER", + "GLOBAL": "GLOBAL", + "ROLE": "ROLE", + "CHANNEL": "CHANNEL", + "EMOJI": "EMOJI", + "SLASH": "SLASH" + }, + Accessibility: { + "FONT_SIZE_DEFAULT": 16, + "FONT_SIZE_MIN": 12, + "FONT_SIZE_MAX": 24, + "FONT_SIZES": [ + 12, + 14, + 15, + 16, + 18, + 20, + 24 + ], + "ZOOM_DEFAULT": 100, + "ZOOM_MIN": 50, + "ZOOM_MAX": 200, + "ZOOM_SCALES": [ + 50, + 67, + 75, + 80, + 90, + 100, + 110, + 125, + 150, + 175, + 200 + ] + }, + INVITE_BANNER_MEMBER_THRESHOLD: 1, + AnalyticEvents: { + "APP_OPENED": "app_opened", + "APP_CRASHED": "app_crashed", + "APP_UI_VIEWED": "app_ui_viewed", + "APP_LAUNCH_COMPLETED": "app_launch_completed", + "APP_LANDING_VIEWED": "app_landing_viewed", + "APP_MODULES_UPDATED": "app_modules_updated", + "REGISTER_VIEWED": "register_viewed", + "LOGIN_VIEWED": "login_viewed", + "READY_PAYLOAD_RECEIVED": "ready_payload_received", + "EXTERNAL_FINGERPRINT_DROPPED": "external_fingerprint_dropped", + "EXTERNAL_DYNAMIC_LINK_RECEIVED": "external_dynamic_link_received", + "INVITE_OPENED": "invite_opened", + "INVITE_VIEWED": "invite_viewed", + "INVITE_RESOLVED": "resolve_invite", + "INVITE_APP_INVOKED": "invite_app_invoked", + "INVITE_APP_OPENED": "invite_app_opened", + "INVITE_LEARN_MORE": "invite_learn_more", + "INVITE_LOGIN": "invite_login", + "INVITE_LOGIN_SUCCESSFUL": "invite_login_successful", + "INSTANT_INVITE_SHARED": "instant_invite_shared", + "COPY_INSTANT_INVITE": "copy_instant_invite", + "VERIFY_ACCOUNT_APP_OPENED": "verify_account_app_opened", + "QUICKSWITCHER_OPENED": "quickswitcher_opened", + "QUICKSWITCHER_CLOSED": "quickswitcher_closed", + "QUICKSWITCHER_RESULT_SELECTED": "quickswitcher_result_selected", + "ENABLE_NOTIFICATIONS": "enable_notifications", + "NOTIFICATION_CLICKED": "notification_clicked", + "NOTIFICATION_RENDERED": "notification_rendered", + "NOTIFICATION_VIEWED": "notification_viewed", + "NOTIFICATION_SETTINGS_UPDATED": "notification_settings_updated", + "ACK_MESSAGES": "ack_messages", + "INBOX_CHANNEL_ACKED": "inbox_channel_acked", + "INBOX_CHANNEL_CLICKED": "inbox_channel_clicked", + "INBOX_CHANNEL_COLLAPSED": "inbox_channel_collapsed", + "VOICE_CHANNEL_SELECTED": "voice_channel_selected", + "JOIN_VOICE_CHANNEL": "join_voice_channel", + "LEAVE_VOICE_CHANNEL": "leave_voice_channel", + "VOICE_CONNECTION_FAILURE": "voice_connection_failure", + "VOICE_CONNECTION_SUCCESS": "voice_connection_success", + "VOICE_DISCONNECT": "voice_disconnect", + "START_SPEAKING": "start_speaking", + "START_LISTENING": "start_listening", + "VOICE_WATCHDOG_TIMEOUT": "voice_watchdog_timeout", + "VOICE_PROCESSING": "voice_processing", + "CALL_REPORT_PROBLEM": "call_report_problem", + "NOISE_CANCELLATION_LINK_CLICKED": "noise_cancellation_link_clicked", + "MEDIA_SESSION_JOINED": "media_session_joined", + "MEMBER_LIST_VIEWED": "member_list_viewed", + "DM_LIST_VIEWED": "dm_list_viewed", + "SETTINGS_PANE_VIEWED": "settings_pane_viewed", + "RICH_CHAT_TEXT_BOX_TOGGLED": "rich_chat_text_box_toggled", + "CHANNEL_NOTICE_VIEWED": "channel_notice_viewed", + "CHANNEL_NOTICE_CLOSED": "channel_notice_closed", + "CHANNEL_NOTICE_CTA_CLICKED": "channel_notice_cta_clicked", + "PREMIUM_PROMOTION_OPENED": "premium_promotion_opened", + "PERMISSIONS_REQUESTED": "permissions_requested", + "PERMISSIONS_ACKED": "permissions_acked", + "LOCAL_SETTINGS_UPDATED": "local_settings_updated", + "APP_NOTICE_VIEWED": "app_notice_viewed", + "APP_NOTICE_CLOSED": "app_notice_closed", + "VIDEO_LAYOUT_TOGGLED": "video_layout_toggled", + "VIDEO_INPUT_TOGGLED": "video_input_toggled", + "AUTHORIZED_APP_CONNECTED": "authorized_app_connected", + "OPEN_MODAL": "open_modal", + "OPEN_POPOUT": "open_popout", + "MODAL_DISMISSED": "modal_dismissed", + "HOVER_MENU_OPENED": "hover_menu_opened", + "CREATE_GUILD_VIEWED": "create_guild_viewed", + "JOIN_GUILD_VIEWED": "join_guild_viewed", + "GUILD_TEMPLATE_SELECTED": "guild_template_selected", + "GAME_NEWS_CHANGED": "game_news_changed", + "GAME_NEWS_OPENED": "game_news_opened", + "APPLICATION_OPENED": "application_opened", + "LAUNCH_GAME": "launch_game", + "ACTIVITY_UPDATED": "activity_updated", + "BROWSER_HANDOFF_SUCCEEDED": "browser_handoff_succeeded", + "SHOW_TUTORIAL": "show_tutorial", + "CLOSE_TUTORIAL": "close_tutorial", + "DISMISS_ALL_TUTORIALS": "dismiss_all_tutorials", + "INVITE_SENT": "invite_sent", + "HOOK_RESULT": "hook_result", + "OVERLAY_TOGGLED": "overlay_toggled", + "OVERLAY_HOOK_RESULT": "overlay_hook_result", + "OVERLAY_INITIALIZED": "overlay_initialized", + "OVERLAY_LOCKED": "overlay_locked", + "OVERLAY_UNLOCKED": "overlay_unlocked", + "OVERLAY_PIN_TOGGLED": "overlay_pin_toggled", + "OVERLAY_LAYOUT_UPDATED": "overlay_layout_updated", + "OVERLAY_SETTINGS_UPDATED": "overlay_settings_updated", + "OVERLAY_PERF_INFO": "overlay_perf_info", + "SPOTIFY_AUTO_PAUSED": "spotify_auto_paused", + "SPOTIFY_BUTTON_CLICKED": "spotify_button_clicked", + "SPOTIFY_LISTEN_ALONG_STARTED": "spotify_listen_along_started", + "SPOTIFY_LISTEN_ALONG_ENDED": "spotify_listen_along_ended", + "STREAMER_MODE_TOGGLE": "streamer_mode_toggle", + "UPDATE_STREAMER_MODE_SETTINGS": "update_streamer_mode_settings", + "INVITE_SUGGESTION_OPENED": "invite_suggestion_opened", + "GUILD_VIEWED": "guild_viewed", + "FRIENDS_LIST_VIEWED": "friends_list_viewed", + "FRIEND_ADD_VIEWED": "friend_add_viewed", + "FRIEND_ADD_NEARBY_CONNECTED": "friend_add_nearby_connected", + "FRIEND_REQUEST_FAILED": "friend_request_failed", + "CONNECTED_ACCOUNT_INITIATED": "connected_account_initiated", + "DOWNLOAD_APP": "download_app", + "PAYMENT_FLOW_STARTED": "payment_flow_started", + "PAYMENT_FLOW_COMPLETED": "payment_flow_completed", + "PAYMENT_FLOW_STEP": "payment_flow_step", + "PAYMENT_FLOW_FAILED": "payment_flow_failed", + "PREMIUM_UPGRADE_STARTED": "premium_upgrade_started", + "CHANNEL_MEMBER_KICKED": "channel_member_kicked", + "CHANNEL_OPENED": "channel_opened", + "NUO_TRANSITION_KEY": "nuo_transition", + "NUO_GUILD_DATA": "nuo_guild_info", + "SOUNDSHARE_ATTACHED": "soundshare_attached", + "SOUNDSHARE_FAILED": "soundshare_failed", + "SOUNDSHARE_TRANSMITTING": "soundshare_transmitting", + "VIDEOHOOK_INITIALIZED": "videohook_initialized", + "SCREENSHARE_FINISHED": "screenshare_finished", + "SCREENSHARE_FAILED": "screenshare_failed", + "VIDEO_STREAM_ENDED": "video_stream_ended", + "VIDEO_STREAM_STARTED": "video_stream_started", + "STREAM_WARNING_TRIGGERED": "stream_warning_triggered", + "STREAM_REPORT_PROBLEM": "stream_report_problem", + "CHANGE_LOG_OPENED": "change_log_opened", + "CHANGE_LOG_CLOSED": "change_log_closed", + "CHANGE_LOG_CTA_CLICKED": "change_log_cta_clicked", + "ACCOUNT_LINK_STEP": "account_link_step", + "ACCOUNT_LINK_FAILED": "account_link_failed", + "CONNECTED_ACCOUNT_VIEWED": "connected_account_viewed", + "MEDIA_DEVICE_CHANGED": "media_device_changed", + "USER_SETTINGS_KEYBIND_UPDATED": "user_settings_keybind_updated", + "USER_ATTRIBUTION_RECEIVED": "user_attribution_received", + "USER_AVATAR_UPDATED": "user_avatar_updated", + "DISPATCH_PATCH_STARTED": "gl_patch_started", + "DISPATCH_PATCH_PAUSED": "gl_patch_paused", + "DISPATCH_PATCH_FAILED": "gl_patch_failed", + "DISPATCH_PATCH_VERIFICATION_FAILED": "gl_verification_failed", + "DISPATCH_PATCH_COMPLETE": "gl_patch_complete", + "DISPATCH_PATCH_CANCELLED": "gl_patch_cancelled", + "DISPATCH_APPLICATION_UNINSTALLED": "gl_application_uninstalled", + "PREMIUM_MARKETING_PAGE_VIEWED": "premium_marketing_page_viewed", + "PREMIUM_MARKETING_PAGE_EXITED": "premium_marketing_page_exited", + "STORE_DIRECTORY_VIEWED": "store_directory_viewed", + "STORE_DIRECTORY_BROWSE_VIEWED": "store_directory_browse_viewed", + "STORE_DIRECTORY_FILTER_UPDATED": "store_directory_filter_updated", + "STORE_DIRECTORY_EXITED": "store_directory_exited", + "STORE_DIRECTORY_HERO_VIEWED": "store_directory_hero_viewed", + "STORE_LISTING_VIEWED": "store_listing_viewed", + "STORE_LISTING_EXITED": "store_listing_exited", + "STORE_LISTING_MEDIA_SCROLLED": "store_listing_media_scrolled", + "LIBRARY_VIEWED": "library_viewed", + "LIBRARY_INSTALL_INITIATED": "library_install_initiated", + "LIBRARY_REPAIR_INITIATED": "library_repair_initiated", + "LIBRARY_UNINSTALL_INITIATED": "library_uninstall_initiated", + "LIBRARY_SCANNING_ENABLED": "library_scanning_enabled", + "PROMOTION_VIEWED": "promotion_viewed", + "APPLICATION_SETTINGS_UPDATED": "application_settings_updated", + "NETWORKING_SYSTEM_METRICS": "networking_system_metrics", + "NETWORKING_PEER_METRICS": "networking_peer_metrics", + "MIC_TESTING_STARTED": "mic_testing_started", + "MIC_TESTING_STOPPED": "mic_testing_stopped", + "GIFT_CODE_SENT": "gift_code_sent", + "GIFT_CODE_RESOLVED": "gift_code_resolved", + "GIFT_CODE_COPIED": "gift_code_copied", + "SLASH_COMMAND_USED": "slash_command_used", + "KEYBOARD_SHORTCUT_USED": "keyboard_shortcut_used", + "KEYBOARD_MODE_TOGGLED": "keyboard_mode_toggled", + "SEARCH_RESULT_VIEWED": "search_result_viewed", + "SEARCH_RESULT_SELECTED": "search_result_selected", + "SEARCH_RESULT_EXPANDED": "search_result_expanded", + "SEARCH_RESULT_SORT_CHANGED": "search_result_sort_changed", + "SEARCH_OPENED": "search_opened", + "SEARCH_STARTED": "search_started", + "SEARCH_CLOSED": "search_closed", + "JUMP": "jump", + "GIF_FAVORITED": "gif_favorited", + "GIF_UNFAVORITED": "gif_unfavorited", + "GUILD_DISCOVERY_VIEWED": "guild_discovery_viewed", + "GUILD_DISCOVERY_GUILD_SELECTED": "guild_discovery_guild_selected", + "GUILD_DISCOVERY_EXITED": "guild_discovery_exited", + "NEWS_EDITOR_VIEWED": "news_card_editor_viewed", + "NEWS_UPDATED": "news_card_updated", + "NEWS_LINK_COPIED": "news_link_copied", + "NEWS_LINK_SHARED": "news_link_shared", + "CUSTOM_STATUS_UPDATED": "custom_status_updated", + "TEXT_COPIED": "text_copied", + "TEXT_SHARED": "text_shared", + "NAV_DRAWER_OPENED": "nav_drawer_opened", + "EXPERIMENT_USER_TRIGGERED": "experiment_user_triggered", + "EXPERIMENT_GUILD_TRIGGERED": "experiment_guild_triggered", + "EXPERIMENT_CUSTOM_EVENT": "experiment_custom_event", + "GUILD_INSIGHTS_SETTINGS_CTA_CLICKED": "guild_insights_settings_cta_clicked", + "GUILD_SETTINGS_DISCOVERY_VIEWED": "guild_settings_discovery_viewed", + "GUILD_SETTINGS_DISCOVERY_UPDATED": "guild_settings_discovery_updated", + "OAUTH2_AUTHORIZE_VIEWED": "oauth2_authorize_viewed", + "GUILD_OUTAGE_VIEWED": "guild_outage_viewed", + "CONTACT_SYNC_FLOW_KEY": "relationship_sync_flow", + "LOGIN_SUCCESSFUL": "login_successful", + "REPLY_STARTED": "reply_started", + "GUILD_TEMPLATE_APP_OPENED": "guild_template_app_opened", + "GUILD_TEMPLATE_OPENED": "guild_template_opened", + "GUILD_TEMPLATE_RESOLVED": "guild_template_resolved", + "GUILD_TEMPLATE_LINK_SENT": "guild_template_link_sent", + "ACTIVITY_FEED_CUSTOMIZATION_OPENED": "af_customization_opened", + "ACTIVITY_FEED_CUSTOMIZATION_SAVED": "af_customization_saved", + "ACTIVITY_FEED_VOICE_CHANNEL_VISITED": "af_voice_channel_visited", + "ACTIVITY_FEED_GUILD_VISITED": "af_guild_visited", + "ACTIVITY_FEED_DM_VISITED": "af_dm_visited", + "AGE_GATE_SUBMITTED": "age_gate_submitted", + "GUILD_WELCOME_SCREEN_SETTINGS_UPDATED": "guild_welcome_screen_settings_updated", + "GUILD_WELCOME_SCREEN_OPTION_SELECTED": "guild_welcome_screen_option_selected", + "MESSAGE_REPORTED": "message_reported", + "EXPRESSION_PICKER_TAB_CLICKED": "expression_picker_tab_clicked", + "CHAT_INPUT_COMPONENT_VIEWED": "chat_input_component_viewed", + "SERVER_SETUP_CTA_CLICKED": "server_setup_cta_clicked" + }, + DynamicLinkType: { + "SETTINGS": "settings", + "CHANGELOG": "changelog", + "LIBRARY": "library", + "STORE": "store", + "INVITE": "invite" + }, + UserSearchWorkerMessageTypes: { + "UPDATE_USERS": "UPDATE_USERS", + "USER_RESULTS": "USER_RESULTS", + "QUERY_SET": "QUERY_SET", + "QUERY_CLEAR": "QUERY_CLEAR" + }, + PublicReleaseChannels: { + "CANARY": "canary", + "PTB": "ptb", + "STABLE": "stable" + }, + UserFlags: { + "STAFF": 1, + "PARTNER": 2, + "HYPESQUAD": 4, + "BUG_HUNTER_LEVEL_1": 8, + "BUG_HUNTER_LEVEL_2": 16384, + "HYPESQUAD_ONLINE_HOUSE_1": 64, + "HYPESQUAD_ONLINE_HOUSE_2": 128, + "HYPESQUAD_ONLINE_HOUSE_3": 256, + "PREMIUM_EARLY_SUPPORTER": 512, + "SYSTEM": 4096, + "VERIFIED_BOT": 65536, + "VERIFIED_DEVELOPER": 131072, + "MFA_SMS": 16, + "PREMIUM_PROMO_DISMISSED": 32, + "HAS_UNREAD_URGENT_MESSAGES": 8192 + }, + ChannelNoticeTypes: { + "MFA_WARNING": "MFA_WARNING", + "INVITE": "INVITE", + "QUICKSWITCHER": "QUICKSWITCHER", + "PREMIUM_GUILD_SUBSCRIPTIONS": "PREMIUM_GUILD_SUBSCRIPTIONS", + "PREMIUM_GUILD_SUBSCRIPTIONS_GUILD_AFFINITY": "PREMIUM_GUILD_SUBSCRIPTIONS_GUILD_AFFINITY", + "PREMIUM_GUILD_GRACE_PERIOD": "PREMIUM_GUILD_GRACE_PERIOD", + "PUBLIC_UPSELL": "PUBLIC_UPSELL" + }, + DefaultCloudSyncConfiguration: { + "ROOT_PATTERN": [ + "**/*" + ], + "ROOT_ID": "sdk", + "ROOT_PLATFORMS": { + "macos": "macos", + "windows": "windows", + "linux": "linux" + } + }, + CHANNEL_NOTICE_SHOW_DELAY: 86400000, + GRACE_PERIOD_CHANNEL_NOTICE_SHOW_DELAY: 259200000, + ChannelLayouts: { + "NORMAL": "normal", + "MINIMUM": "minimum", + "NO_CHAT": "no-chat", + "FULL_SCREEN": "full-screen" + }, + StreamLayouts: { + "THEATRE": "theatre", + "FULL_SCREEN": "full-screen", + "PIP": "pip", + "POPOUT": "popout", + "PORTRAIT": "portrait", + "LANDSCAPE": "landscape", + "MINIMIZED": "minimized" + }, + Layers: { + "USER_SETTINGS": "USER_SETTINGS", + "CHANNEL_SETTINGS": "CHANNEL_SETTINGS", + "GUILD_SETTINGS": "GUILD_SETTINGS", + "VERIFICATION": "VERIFICATION", + "RTC_DEBUG": "RTC_DEBUG" + }, + AuditLogActions: { + "ALL": null, + "GUILD_UPDATE": 1, + "CHANNEL_CREATE": 10, + "CHANNEL_UPDATE": 11, + "CHANNEL_DELETE": 12, + "CHANNEL_OVERWRITE_CREATE": 13, + "CHANNEL_OVERWRITE_UPDATE": 14, + "CHANNEL_OVERWRITE_DELETE": 15, + "MEMBER_KICK": 20, + "MEMBER_PRUNE": 21, + "MEMBER_BAN_ADD": 22, + "MEMBER_BAN_REMOVE": 23, + "MEMBER_UPDATE": 24, + "MEMBER_ROLE_UPDATE": 25, + "MEMBER_MOVE": 26, + "MEMBER_DISCONNECT": 27, + "BOT_ADD": 28, + "ROLE_CREATE": 30, + "ROLE_UPDATE": 31, + "ROLE_DELETE": 32, + "INVITE_CREATE": 40, + "INVITE_UPDATE": 41, + "INVITE_DELETE": 42, + "WEBHOOK_CREATE": 50, + "WEBHOOK_UPDATE": 51, + "WEBHOOK_DELETE": 52, + "EMOJI_CREATE": 60, + "EMOJI_UPDATE": 61, + "EMOJI_DELETE": 62, + "MESSAGE_DELETE": 72, + "MESSAGE_BULK_DELETE": 73, + "MESSAGE_PIN": 74, + "MESSAGE_UNPIN": 75, + "INTEGRATION_CREATE": 80, + "INTEGRATION_UPDATE": 81, + "INTEGRATION_DELETE": 82 + }, + AuditLogActionTypes: { + "ALL": "ALL", + "CREATE": "CREATE", + "UPDATE": "UPDATE", + "DELETE": "DELETE" + }, + AuditLogSubtargetTypes: { + "USER": "member", + "ROLE": "role" + }, + AuditLogTargetTypes: { + "ALL": "ALL", + "UNKNOWN": "UNKNOWN", + "GUILD": "GUILD", + "CHANNEL": "CHANNEL", + "CHANNEL_OVERWRITE": "CHANNEL_OVERWRITE", + "USER": "USER", + "ROLE": "ROLE", + "INVITE": "INVITE", + "WEBHOOK": "WEBHOOK", + "EMOJI": "EMOJI", + "INTEGRATION": "INTEGRATION" + }, + AuditLogChangeKeys: { + "NAME": "name", + "DESCRIPTION": "description", + "ICON_HASH": "icon_hash", + "SPLASH_HASH": "splash_hash", + "DISCOVERY_SPLASH_HASH": "discovery_splash_hash", + "BANNER_HASH": "banner_hash", + "OWNER_ID": "owner_id", + "REGION": "region", + "PREFERRED_LOCALE": "preferred_locale", + "AFK_CHANNEL_ID": "afk_channel_id", + "AFK_TIMEOUT": "afk_timeout", + "SYSTEM_CHANNEL_ID": "system_channel_id", + "RULES_CHANNEL_ID": "rules_channel_id", + "PUBLIC_UPDATES_CHANNEL_ID": "public_updates_channel_id", + "MFA_LEVEL": "mfa_level", + "WIDGET_ENABLED": "widget_enabled", + "WIDGET_CHANNEL_ID": "widget_channel_id", + "VERIFICATION_LEVEL": "verification_level", + "EXPLICIT_CONTENT_FILTER": "explicit_content_filter", + "DEFAULT_MESSAGE_NOTIFICATIONS": "default_message_notifications", + "VANITY_URL_CODE": "vanity_url_code", + "POSITION": "position", + "TOPIC": "topic", + "TYPE": "type", + "BITRATE": "bitrate", + "PERMISSION_OVERWRITES": "permission_overwrites", + "ROLES_ADD": "$add", + "ROLES_REMOVE": "$remove", + "NICK": "nick", + "DEAF": "deaf", + "MUTE": "mute", + "PERMISSIONS": "permissions", + "COLOR": "color", + "HOIST": "hoist", + "MENTIONABLE": "mentionable", + "CODE": "code", + "CHANNEL_ID": "channel_id", + "INVITER_ID": "inviter_id", + "MAX_USES": "max_uses", + "USES": "uses", + "MAX_AGE": "max_age", + "TEMPORARY": "temporary", + "APPLICATION_ID": "application_id", + "AVATAR_HASH": "avatar_hash", + "ID": "id", + "PERMISSIONS_GRANTED": "allow", + "PERMISSIONS_DENIED": "deny", + "REASON": "reason", + "PRUNE_DELETE_DAYS": "prune_delete_days", + "NSFW": "nsfw", + "RATE_LIMIT_PER_USER": "rate_limit_per_user", + "ENABLE_EMOTICONS": "enable_emoticons", + "EXPIRE_BEHAVIOR": "expire_behavior", + "EXPIRE_GRACE_PERIOD": "expire_grace_period" + }, + AUDIT_LOG_PAGE_LIMIT: 50, + UserRequiredActions: { + "AGREEMENTS": "AGREEMENTS", + "REQUIRE_CAPTCHA": "REQUIRE_CAPTCHA", + "REQUIRE_VERIFIED_EMAIL": "REQUIRE_VERIFIED_EMAIL", + "REQUIRE_VERIFIED_PHONE": "REQUIRE_VERIFIED_PHONE", + "REQUIRE_VERIFIED_PHONE_THEN_EMAIL": "REQUIRE_VERIFIED_PHONE_THEN_EMAIL" + }, + VerificationTypes: { + "CAPTCHA": "captcha", + "EMAIL_OR_PHONE": "email_or_phone", + "PHONE": "phone", + "EMAIL": "email" + }, + MAX_REASON_LENGTH: 512, + MouseButtons: { + "PRIMARY": 0, + "SECONDARY": 2, + "WHEEL": 4, + "BACK": 8, + "FORWARD": 16 + }, + KeyboardKeys: { + "BACKSPACE": 8, + "TAB": 9, + "ENTER": 13, + "ESCAPE": 27, + "SPACE": 32, + "ARROW_LEFT": 37, + "ARROW_UP": 38, + "ARROW_RIGHT": 39, + "ARROW_DOWN": 40, + "COMMA": 188, + "DIGIT_0": 48, + "DIGIT_1": 49, + "DIGIT_2": 50, + "DIGIT_3": 51, + "DIGIT_4": 52, + "DIGIT_5": 53, + "DIGIT_6": 54, + "DIGIT_7": 55, + "DIGIT_8": 56, + "DIGIT_9": 57, + "A": 65, + "B": 66, + "E": 69, + "I": 73, + "N": 78, + "P": 80, + "S": 83, + "U": 85 + }, + PictureInPicturePositions: { + "TOP_LEFT": "top-left", + "TOP_RIGHT": "top-right", + "BOTTOM_LEFT": "bottom-left", + "BOTTOM_RIGHT": "bottom-right" + }, + PictureInPictureComponents: { + "VIDEO": "VIDEO", + "STREAM": "STREAM" + }, + USER_STATUS_TOOLTIP_DELAY: 300, + ChannelTextAreaIntegrationTypes: { + "GIF": "GIF" + }, + ChannelTextAreaIntegrations: { + "GIPHY": { + "type": "GIF", + "command": "giphy", + "title": "Giphy" + }, + "TENOR": { + "type": "GIF", + "command": "tenor", + "title": "Tenor" + } + }, + ActivityJoinRequestStates: { + "RECEIVER_INVITE_REQUESTED": "RECEIVER_INVITE_REQUESTED", + "RECEIVER_INVITE_SENT": "RECEIVER_INVITE_SENT", + "SENDER_INVITE_WAITING": "SENDER_INVITE_WAITING", + "SENDER_INVITE_RECEIVED": "SENDER_INVITE_RECEIVED", + "SENDER_INVITE_EXPIRED": "SENDER_INVITE_EXPIRED" + }, + MEDIA_PROXY_SIZES: (16 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 256 | 320 | 512 | 640 | 1024 | 1280 | 1536 | 2048 | 3072 | 4096)[], + HelpdeskArticles: { + "ENABLE_MIC_FIREFOX": "204392448", + "PUSH_TO_TALK_ADMINISTRATOR_MODE": "205082178", + "ENABLE_MIC_CHROME": "205093487", + "PERMISSIONS_TUTORIAL": "206029707", + "VOICE_CONNECTION_ERRORS": "115001310031", + "NO_INPUT_DETECTED": "214925018", + "OVERLAY_INTRODUCTION": "217659737", + "PERMISSIONS_LOCKOUT": "218449248", + "SETTING_UP_TWO_FACTOR": "219576828", + "WEBHOOKS_INTRODUCTION": "228383668", + "QUICK_SWITCHER_TUTORIAL": "115000070311", + "SEARCH_INDEXING": "115000414847", + "USING_SEARCH": "115000468588", + "RICH_PRESENCE_INTRODUCTION": "115001557452", + "CORRUPT_INSTALLATION": "115004307527", + "SPOTIFY_AUTO_PAUSED": "115002872212", + "SPOTIFY_CONNECTION": "360000167212", + "SPELLCHECK": "360000877191", + "INVALID_INVITES": "360001556852", + "GDPR_ACCOUNT_DELETE": "212500837", + "GDPR_ACCOUNT_DISABLE": "360004066391", + "GDPR_REQUEST_DATA": "360004027692", + "DATA_PRIVACY_CONTROLS": "360004109911", + "ACCESSIBILITY_TRACKING": "360035966492", + "NEARBY_FRIENDS": "360014894392", + "APPLICATION_STORE_OVERVIEW": "360012656092", + "APPLICATION_STORE_EARLY_ACCESS": "360027392172", + "GIFTING": "360020776291", + "GUILD_VANITY_URL": "115001542132", + "GUILD_SUBSCRIPTIONS": "360028038352", + "GUILD_BANNER_SPLASH": "360028716472", + "BUILD_OVERRIDE_EMBED": "360030114991", + "SUPPORTED_BROWSERS": "213491697", + "ANNOUNCEMENT_CHANNELS": "360032008192", + "GUILD_ANALYTICS": "360032807371", + "BILLING": "360017693772", + "FUNIMATION_PROMOTION": "360036587771", + "PUBLIC_GUILD_GUILDLINES": "360035969312", + "SYSTEM_DMS": "360036118732", + "MISSING_ENTITLEMENT": "360016422832", + "AGE_GATE": "360040724612", + "STREAM_FAILED": "360030714312", + "REDUCED_MOTION": "360040613412", + "NOISE_SUPPRESSION": "360040843952", + "APPLICATION_VERIFICATION": "360040720412", + "NSFW_AGE_GATING": "115000084051#h_5206f3f2-0ee4-4380-b50a-25319e45bc7c", + "PREMIUM_TRIAL": "360042410272" + }, + AccountModalSteps: { + "0": "BIRTHDAY_FORM", + "1": "CLAIM_FORM", + "2": "CLAIM_FORM_SUCCESS", + "BIRTHDAY_FORM": 0, + "CLAIM_FORM": 1, + "CLAIM_FORM_SUCCESS": 2 + }, + AccountModalTypes: { + "CLAIM": "CLAIM", + "REGISTER": "REGISTER", + "LOGIN": "LOGIN" + }, + AccountModalTrigger: { + "0": "UNKNOWN", + "1": "WELCOME_POST_REGISTER", + "2": "CHAT_BOX", + "3": "CONNECTION_OPEN_EMBEDDED", + "4": "WELCOME_AGE_GATE", + "UNKNOWN": 0, + "WELCOME_POST_REGISTER": 1, + "CHAT_BOX": 2, + "CONNECTION_OPEN_EMBEDDED": 3, + "WELCOME_AGE_GATE": 4 + }, + EmbedTypes: { + "IMAGE": "image", + "VIDEO": "video", + "LINK": "link", + "ARTICLE": "article", + "TWEET": "tweet", + "RICH": "rich", + "GIFV": "gifv", + "APPLICATION_NEWS": "application_news" + }, + SPOTIFY_APP_PROTOCOL: "spotify", + PURGE_MEMORY_TIMEOUT: 300000, + INVITE_ENDPOINT: "https://discord.gg", + YOUTUBE_EMBED_URL(...args: any[]):any, + YOUTUBE_PREVIEW_URL(...args: any[]):any, + YOUTUBE_EXTERNAL_URL(...args: any[]):any, + LibraryApplicationFlags: { + "HIDDEN": 1, + "PRIVATE": 2, + "OVERLAY_DISABLED": 4, + "ENTITLED": 8, + "PREMIUM": 16 + }, + CloudSyncStateTypes: { + "DONE": "DONE", + "PLANNING": "PLANNING", + "PREPARING": "PREPARING", + "PUSHING": "PUSHING", + "PULLING": "PULLING", + "CONFLICT": "CONFLICT", + "ERROR": "ERROR" + }, + CloudSyncResultTypes: { + "PULL": "PULL", + "PUSH": "PUSH", + "CONFLICT": "CONFLICT", + "NONE": "NONE" + }, + Distributors: { + "DISCORD": "discord", + "STEAM": "steam", + "TWITCH": "twitch", + "UPLAY": "uplay", + "BATTLENET": "battlenet", + "ORIGIN": "origin", + "GOG": "gog", + "EPIC": "epic" + }, + DistributorNames: { + "discord": "Discord", + "steam": "Steam", + "uplay": "Uplay", + "battlenet": "Battle.net", + "origin": "Origin", + "gog": "GOG", + "twitch": "Twitch", + "epic": "Epic" + }, + MAX_VIDEO_WIDTH: 3840, + MAX_VIDEO_HEIGHT: 2160, + Consents: { + "USAGE_STATISTICS": "usage_statistics", + "PERSONALIZATION": "personalization" + }, + FriendSourceFlagKeys: { + "ALL": "all", + "FRIENDS": "mutual_friends", + "GUILDS": "mutual_guilds" + }, + REQUEST_DATA_LIMIT_DAYS: 30, + LobbyTypes: { + "1": "PRIVATE", + "2": "PUBLIC", + "PRIVATE": 1, + "PUBLIC": 2 + }, + LobbyErrors: { + "0": "NO_ERROR", + "1": "UNKNOWN_ERROR", + "2": "SERVICE_UNAVAILABLE", + "3": "NOT_FOUND", + "4": "INVALID_SECRET", + "5": "FULL", + "6": "LOBBY_LIMIT_REACHED", + "7": "ALREADY_CONNECTING", + "NO_ERROR": 0, + "UNKNOWN_ERROR": 1, + "SERVICE_UNAVAILABLE": 2, + "NOT_FOUND": 3, + "INVALID_SECRET": 4, + "FULL": 5, + "LOBBY_LIMIT_REACHED": 6, + "ALREADY_CONNECTING": 7 + }, + AppContext: { + "OVERLAY": "OVERLAY", + "APP": "APP", + "POPOUT": "POPOUT" + }, + NearbyErrors: { + "0": "MICROPHONE_ERROR", + "1": "BLUETOOTH_ERROR", + "MICROPHONE_ERROR": 0, + "BLUETOOTH_ERROR": 1 + }, + NearbyTypes: { + "USER": "u" + }, + CURRENT_APP_CONTEXT: "APP", + SPOTIFY_HOSTNAMES: ("open.spotify.com" | "www.spotify.com")[], + SpotifyEndpoints: { + "PROFILE": "https://api.spotify.com/v1/me", + "NOTIFICATIONS_PLAYER": "https://api.spotify.com/v1/me/notifications/player", + "PLAYER": "https://api.spotify.com/v1/me/player", + "PLAYER_DEVICES": "https://api.spotify.com/v1/me/player/devices", + "PLAYER_PLAY": "https://api.spotify.com/v1/me/player/play", + "PLAYER_PAUSE": "https://api.spotify.com/v1/me/player/pause", + "PLAYER_REPEAT": "https://api.spotify.com/v1/me/player/repeat", + "PREMIUM_SITE": "https://www.spotify.com/premium/?utm_source=discord&utm_medium=desktop", + "IOS_APP_STORE": "https://itunes.apple.com/us/app/spotify-music/id324684580?mt=8" + }, + GIFT_CODE_BASE_URLS: ("discordapp.com/gifts" | "discord.com/gifts")[], + DispatchApplicationStates: { + "COMPLETE": "complete", + "TRANSITION": "transition" + }, + DispatchApplicationStages: { + "QUEUED": "queued", + "PLANNING": "planning", + "ALLOCATING_DISK": "allocating_disk", + "PATCHING": "patching", + "FINALIZING": "finalizing", + "PAUSING": "pausing", + "VERIFYING": "verifying", + "REPAIRING": "repairing", + "POST_INSTALL_SCRIPTS": "running_install_scripts", + "UNINSTALLING": "uninstalling" + }, + LocalDispatchApplicationStates: { + "INSTALL_REQUIRED": "install_required", + "INSTALLING": "installing", + "UP_TO_DATE": "up_to_date", + "UPDATE_REQUIRED": "update_required", + "UPDATING": "updating", + "REPAIRING": "repairing", + "UNINSTALLING": "uninstalling" + }, + LibraryApplicationActions: { + "PLAY": "play", + "INSTALL": "install", + "UPDATE": "update", + "PAUSE": "pause", + "MOVE_UP": "move_up", + "RESUME": "resume" + }, + ProgressBarIDs: { + "DISPATCH_APPLICATION_PROGRESS": "dispatch_application_progress" + }, + GameTableListKeys: { + "NAME": "name", + "PLATFORM": "platform", + "ACTIONS": "actions", + "LAST_PLAYED": "last_played" + }, + TableSortDirections: { + "ASCENDING": "asc", + "DESCENDING": "desc" + }, + OperatingSystems: { + "WINDOWS": "1", + "MACOS": "2", + "LINUX": "3" + }, + EntitlementTypes: { + "1": "PURCHASE", + "2": "PREMIUM_SUBSCRIPTION", + "3": "DEVELOPER_GIFT", + "4": "TEST_MODE_PURCHASE", + "5": "FREE_PURCHASE", + "6": "USER_GIFT", + "PURCHASE": 1, + "PREMIUM_SUBSCRIPTION": 2, + "DEVELOPER_GIFT": 3, + "TEST_MODE_PURCHASE": 4, + "FREE_PURCHASE": 5, + "USER_GIFT": 6 + }, + ContentRatingAgencies: { + "ESRB": "1", + "PEGI": "2" + }, + SKUTypes: { + "1": "GAME", + "2": "DLC", + "3": "CONSUMABLE", + "4": "BUNDLE", + "5": "SUBSCRIPTION", + "GAME": 1, + "DLC": 2, + "CONSUMABLE": 3, + "BUNDLE": 4, + "SUBSCRIPTION": 5 + }, + SKUAccessTypes: { + "1": "FULL", + "2": "EARLY_ACCESS", + "3": "VIP_ACCESS", + "FULL": 1, + "EARLY_ACCESS": 2, + "VIP_ACCESS": 3 + }, + SKUFlags: { + "PREMIUM_PURCHASE": 1, + "HAS_FREE_PREMIUM_CONTENT": 2, + "AVAILABLE": 4, + "PREMIUM_AND_DISTRIBUTION": 8 + }, + STORE_DIRECTORY_LAYOUT_ID: "555552588917899315", + STORE_DIRECTORY_LAYOUT_ID_QUERY_OVERRIDE: "store_directory_layout_id", + DirectoryLocations: { + "HOME": "1", + "BROWSE": "2" + }, + StoreApplicationGenresFilter: { + "ALL": -1, + "ACTION": 1, + "ACTION_RPG": 2, + "BRAWLER": 3, + "HACK_AND_SLASH": 4, + "PLATFORMER": 5, + "STEALTH": 6, + "SURVIVAL": 7, + "ADVENTURE": 8, + "ACTION_ADVENTURE": 9, + "METROIDVANIA": 10, + "OPEN_WORLD": 11, + "PSYCHOLOGICAL_HORROR": 12, + "SANDBOX": 13, + "SURVIVAL_HORROR": 14, + "VISUAL_NOVEL": 15, + "DRIVING_RACING": 16, + "VEHICULAR_COMBAT": 17, + "MASSIVELY_MULTIPLAYER": 18, + "MMORPG": 19, + "ROLE_PLAYING": 20, + "DUNGEON_CRAWLER": 21, + "ROGUELIKE": 22, + "SHOOTER": 23, + "LIGHT_GUN": 24, + "SHOOT_EM_UP": 25, + "FPS": 26, + "DUAL_JOYSTICK_SHOOTER": 27, + "SIMULATION": 28, + "FLIGHT_SIMULATOR": 29, + "TRAIN_SIMULATOR": 30, + "LIFE_SIMULATOR": 31, + "FISHING": 32, + "SPORTS": 33, + "BASEBALL": 34, + "BASKETBALL": 35, + "BILLIARDS": 36, + "BOWLING": 37, + "BOXING": 38, + "FOOTBALL": 39, + "GOLF": 40, + "HOCKEY": 41, + "SKATEBOARDING_SKATING": 42, + "SNOWBOARDING_SKIING": 43, + "SOCCER": 44, + "TRACK_FIELD": 45, + "SURFING_WAKEBOARDING": 46, + "WRESTLING": 47, + "STRATEGY": 48, + "FOUR_X": 49, + "ARTILLERY": 50, + "RTS": 51, + "TOWER_DEFENSE": 52, + "TURN_BASED_STRATEGY": 53, + "WARGAME": 54, + "MOBA": 55, + "FIGHTING": 56, + "PUZZLE": 57, + "CARD_GAME": 58, + "EDUCATION": 59, + "FITNESS": 60, + "GAMBLING": 61, + "MUSIC_RHYTHM": 62, + "PARTY_MINI_GAME": 63, + "PINBALL": 64, + "TRIVIA_BOARD_GAME": 65 + }, + StoreApplicationSort: { + "NEW_RELEASES": "new", + "ALPHABETICAL": "asc", + "REVERSE_ALPHABETICAL": "desc", + "ID": "id" + }, + BuildPlatformTypes: { + "WIN32": "win32", + "WIN64": "win64", + "MACOS": "macos", + "LINUX": "linux" + }, + PAYPAL_URL: "https://www.paypal.com", + COVID_URL: "https://www.cdc.gov/coronavirus/2019-nCoV/index.html", + COUNTRIES_WITHOUT_POSTAL_CODES: ("AE" | "AG" | "AN" | "AO" | "AW" | "BF" | "BI" | "BJ" | "BM" | "BO" | "BQ" | "BS" | "BW" | "BZ" | "CD" | "CF" | "CG" | "CI" | "CK" | "CM" | "CW" | "DJ" | "DM" | "ER" | "FJ" | "GA" | "GD" | "GH" | "GM" | "GQ" | "GY" | "HK" | "HM" | "IE" | "JM" | "KE" | "KI" | "KM" | "KN" | "KP" | "LY" | "ML" | "MO" | "MR" | "MW" | "NA" | "NR" | "NU" | "QA" | "RW" | "SB" | "SC" | "SL" | "SR" | "ST" | "SX" | "SY" | "TD" | "TF" | "TG" | "TK" | "TL" | "TO" | "TV" | "UG" | "VU" | "YE" | "ZA" | "ZW")[], + HypeSquadHouses: { + "HOUSE_1": "HOUSE_1", + "HOUSE_2": "HOUSE_2", + "HOUSE_3": "HOUSE_3" + }, + RANDOM_HYPESQUAD_HOUSE: "RANDOM_HYPESQUAD_HOUSE", + KeyboardDeviceTypes: { + "0": "KEYBOARD_KEY", + "1": "MOUSE_BUTTON", + "2": "KEYBOARD_MODIFIER_KEY", + "3": "GAMEPAD_BUTTON", + "KEYBOARD_KEY": 0, + "MOUSE_BUTTON": 1, + "KEYBOARD_MODIFIER_KEY": 2, + "GAMEPAD_BUTTON": 3 + }, + LinuxKeyToCode: { + "0": 19, + "1": 10, + "2": 11, + "3": 12, + "4": 13, + "5": 14, + "6": 15, + "7": 16, + "8": 17, + "9": 18, + "esc": 9, + "f1": 67, + "f2": 68, + "f3": 69, + "f4": 70, + "f5": 71, + "f6": 72, + "f7": 73, + "f8": 74, + "f9": 75, + "f10": 76, + "f11": 95, + "f12": 96, + "f14": 107, + "f15": 78, + "f16": 127, + "`": 49, + "-": 20, + "=": 21, + "backspace": 22, + "tab": 23, + "q": 24, + "w": 25, + "e": 26, + "r": 27, + "t": 28, + "y": 29, + "u": 30, + "i": 31, + "o": 32, + "p": 33, + "[": 34, + "]": 35, + "\\": 51, + "caps lock": 66, + "a": 38, + "s": 39, + "d": 40, + "f": 41, + "g": 42, + "h": 43, + "j": 44, + "k": 45, + "l": 46, + ";": 47, + "'": 48, + "enter": 36, + "left shift": 50, + "z": 52, + "x": 53, + "c": 54, + "v": 55, + "b": 56, + "n": 57, + "m": 58, + ",": 59, + ".": 60, + "/": 61, + "right shift": 62, + "left ctrl": 37, + "left alt": 64, + "left meta": 133, + "space": 65, + "right meta": 134, + "right alt": 108, + "right ctrl": 105, + "menu": 135, + "num lock": 77, + "numpad =": 125, + "numpad /": 106, + "numpad *": 63, + "numpad 7": 79, + "numpad 8": 80, + "numpad 9": 81, + "numpad -": 82, + "numpad 4": 83, + "numpad 5": 84, + "numpad 6": 85, + "numpad +": 86, + "numpad 1": 87, + "numpad 2": 88, + "numpad 3": 89, + "numpad enter": 104, + "numpad 0": 90, + "numpad .": 91, + "home": 110, + "page up": 112, + "end": 115, + "page down": 117, + "insert": 118, + "delete": 119, + "left": 113, + "right": 114, + "down": 116, + "up": 111, + "sleep": 150, + "back": 166, + "forward": 167, + "home key": 180, + "favorites": 164, + "email": 163, + "play": 172, + "stop": 174, + "vol down": 122, + "vol up": 123, + "track back": 173, + "track skip": 171 + }, + MacosKeyToCode: { + "0": 39, + "1": 30, + "2": 31, + "3": 32, + "4": 33, + "5": 34, + "6": 35, + "7": 36, + "8": 37, + "9": 38, + "a": 4, + "s": 22, + "d": 7, + "f": 9, + "h": 11, + "g": 10, + "z": 29, + "x": 27, + "c": 6, + "v": 25, + "b": 5, + "q": 20, + "w": 26, + "e": 8, + "r": 21, + "y": 28, + "t": 23, + "=": 46, + "-": 45, + "]": 48, + "o": 18, + "u": 24, + "[": 47, + "i": 12, + "p": 19, + "l": 15, + "j": 13, + "'": 52, + "k": 14, + ";": 51, + "\\": 49, + ",": 54, + "/": 56, + "n": 17, + "m": 16, + ".": 55, + "`": 53, + "numpad .": 99, + "numpad *": 85, + "numpad +": 87, + "numpad clear": 83, + "numpad /": 84, + "numpad enter": 88, + "numpad -": 86, + "numpad =": 103, + "numpad 0": 98, + "numpad 1": 89, + "numpad 2": 90, + "numpad 3": 91, + "numpad 4": 92, + "numpad 5": 93, + "numpad 6": 94, + "numpad 7": 95, + "numpad 8": 96, + "numpad 9": 97, + "enter": 40, + "tab": 43, + "space": 44, + "backspace": 42, + "esc": 41, + "meta": 227, + "shift": 225, + "caps lock": 57, + "alt": 226, + "ctrl": 224, + "right shift": 229, + "right alt": 230, + "right ctrl": 228, + "right meta": 231, + "f17": 108, + "f18": 109, + "f19": 110, + "f20": 111, + "f5": 62, + "f6": 63, + "f7": 64, + "f3": 60, + "f8": 65, + "f9": 66, + "f11": 68, + "f13": 104, + "f16": 107, + "f14": 105, + "f10": 67, + "f12": 69, + "f15": 106, + "home": 74, + "page up": 75, + "del": 76, + "f4": 61, + "end": 77, + "f2": 59, + "page down": 78, + "f1": 58, + "left": 80, + "right": 79, + "down": 81, + "up": 82 + }, + WindowsKeyToCode: { + "0": 48, + "1": 49, + "2": 50, + "3": 51, + "4": 52, + "5": 53, + "6": 54, + "7": 55, + "8": 56, + "9": 57, + "a": 65, + "s": 83, + "d": 68, + "f": 70, + "h": 72, + "g": 71, + "z": 90, + "x": 88, + "c": 67, + "v": 86, + "b": 66, + "q": 81, + "w": 87, + "e": 69, + "r": 82, + "y": 89, + "t": 84, + "=": 187, + "-": 189, + "]": 221, + "o": 79, + "u": 85, + "[": 219, + "i": 73, + "p": 80, + "l": 76, + "j": 74, + "k": 75, + ";": 186, + ",": 188, + "/": 191, + "n": 78, + "m": 77, + ".": 190, + "numpad .": 110, + "numpad *": 106, + "numpad +": 107, + "numpad clear": 144, + "numpad /": 111, + "numpad -": 109, + "numpad =": 226, + "numpad 0": 96, + "numpad 1": 97, + "numpad 2": 98, + "numpad 3": 99, + "numpad 4": 100, + "numpad 5": 101, + "numpad 6": 102, + "numpad 7": 103, + "numpad 8": 104, + "numpad 9": 105, + "enter": 13, + "tab": 9, + "space": 32, + "backspace": 8, + "esc": 27, + "meta": 91, + "shift": 160, + "caps lock": 20, + "alt": 164, + "ctrl": 162, + "right shift": 161, + "right alt": 165, + "right ctrl": 163, + "right meta": 93, + "f17": 128, + "f18": 129, + "f19": 130, + "f5": 116, + "f6": 117, + "f7": 118, + "f3": 114, + "f8": 119, + "f9": 120, + "f11": 122, + "f13": 124, + "f16": 127, + "f14": 125, + "f10": 121, + "f12": 123, + "f15": 126, + "home": 36, + "page up": 33, + "del": 46, + "f4": 115, + "end": 35, + "f2": 113, + "page down": 34, + "f1": 112, + "left": 37, + "right": 39, + "down": 40, + "up": 38, + "insert": 45, + "break": 19, + "scroll lock": 145, + "print screen": 44, + "rewind": 177, + "play": 179, + "fast forward": 176, + "`": 192, + "\\": 220, + "'": 222 + }, + KeyboardEnvs: { + "1": "WINDOWS", + "2": "MACOS", + "3": "LINUX", + "4": "BROWSER", + "WINDOWS": 1, + "MACOS": 2, + "LINUX": 3, + "BROWSER": 4 + }, + MessageRestrictionTypes: { + "EMPTY_MESSAGE": "EMPTY_MESSAGE", + "MESSAGE_TOO_LONG": "MESSAGE_TOO_LONG", + "RATE_LIMITED": "RATE_LIMITED", + "SHOUTING_CANCELLED": "SHOUTING_CANCELLED", + "SLOWMODE_COOLDOWN": "SLOWMODE_COOLDOWN" + }, + MESSAGE_GROUP_INTERVAL: 420000, + CarouselMediaTypes: { + "1": "IMG", + "2": "YOUTUBE_VIDEO", + "3": "VIDEO", + "IMG": 1, + "YOUTUBE_VIDEO": 2, + "VIDEO": 3 + }, + StoreRecommendationTypes: { + "NOW_PLAYING": "1", + "RECENTLY_PLAYED": "2", + "EVER_PLAYED": "3", + "FLAVOR_TEXT": "4", + "RECENT_RELEASE_DATE": "6", + "RELEASE_DATE": "7", + "EARLY_ACCESS": "8", + "HAS_FREE_PREMIUM_CONTENT": "9" + }, + OverlayNotificationPriorities: { + "0": "NORMAL", + "1": "HIGH", + "2": "URGENT", + "NORMAL": 0, + "HIGH": 1, + "URGENT": 2 + }, + ConnectedDeviceType: { + "INPUT": "INPUT", + "OUTPUT": "OUTPUT", + "INPUT_AND_OUTPUT": "INPUT_AND_OUTPUT" + }, + ConnectedDevicePreference: { + "INPUT": "INPUT", + "OUTPUT": "OUTPUT", + "INPUT_AND_OUTPUT": "INPUT_AND_OUTPUT" + }, + ViewHistoryKeys: { + "APPLICATION_LIBRARY_BADGE": "application_library_badge_18_11_02", + "SERVER_DISCOVERY_BADGE": "server_discovery_badge_19_02_11", + "E3_SERVER_DISCOVERY_BADGE": "e3_server_discovery_badge_19_06_08" + }, + InAppNotificationTypes: { + "MESSAGE": "MESSAGE", + "SERVER_DOWN_ALERT": "SERVER_DOWN_ALERT" + }, + GIFPickerResultTypes: { + "TRENDING_GIFS": "Trending", + "FAVORITES": "Favorites", + "TRENDING_CATEGORY": "Category", + "SEARCH": "Search", + "SEARCH_SUGGESTION": "Search Suggestion" + }, + GIFTABLE_CURRENCIES: [ + "usd", + "cad", + "eur", + "aud", + "gbp" + ], + GIFProviders: { + "GIPHY": "giphy", + "TENOR": "tenor" + }, + TenorFormats: { + "GIF": "gif", + "MP4": "mp4", + "MEDIUMGIF": "mediumgif", + "TINYGIF": "tinygif", + "NANOGIF": "nanogif", + "LOOPEDMP4": "loopedmp4", + "TINYMP4": "tinymp4", + "NANOMP4": "nanomp4", + "WEBM": "webm", + "TINYWEBM": "tinywebm", + "NANOWEBM": "nanowebm" + }, + GIPHYFormats: { + "FIXED_HEIGHT_GIF": "fixed_height.url", + "FIXED_HEIGHT_MP4": "fixed_height.mp4", + "FIXED_HEIGHT_SMALL_GIF": "fixed_height_small.url", + "FIXED_HEIGHT_SMALL_MP4": "fixed_height_small.mp4", + "FIXED_WIDTH_GIF": "fixed_width.url", + "FIXED_WIDTH_MP4": "fixed_width.mp4", + "FIXED_WIDTH_SMALL_GIF": "fixed_width_small.url", + "FIXED_WIDTH_SMALL_MP4": "fixed_width_small.mp4", + "DOWNSIZED_GIF": "downsized.url", + "DOWNSIZED_LARGE_GIF": "downsized_large.url", + "DOWNSIZED_MEDIUM_GIF": "downsized_medium.url", + "DOWNSIZED_SMALL_MP4": "downsized_small.mp4", + "ORIGINAL_GIF": "original.url", + "ORIGINAL_MP4": "original.mp4" + }, + GIFResultFormat: { + "IMAGE": "IMAGE", + "VIDEO": "VIDEO" + }, + SpoilerRenderSetting: { + "ALWAYS": "ALWAYS", + "ON_CLICK": "ON_CLICK", + "IF_MODERATOR": "IF_MODERATOR" + }, + CustomDiscordApplicationId: "530820671283003422", + UNAMBIGUOUS_CHARACTERS: "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789", + MAX_TIMEOUT_MS: 2147483647, + PREMIUM_GUILD_UPSELL_LIST_AMT: 4, + GIFT_CODE_REDEMPTION_PLACEHOLDER: "WUMP-AAAAA-BBBBB-CCCCC", + OFF_PLATFORM_PREMIUM_PERKS: [], + AppleBillingUrls: { + "BILLING_MANAGEMENT": "https://support.apple.com/HT201266", + "SUBSCRIPTION_MANAGEMENT": "https://support.apple.com/HT202039" + }, + PopoutWindowKeys: { + "CHANNEL_CALL_POPOUT": "DISCORD_CHANNEL_CALL_POPOUT" + }, + PopoutEventTypes: { + "LOADED": "loaded", + "UNLOADED": "unloaded" + }, + InviteTargetUserTypes: { + "1": "STREAM", + "STREAM": 1 + }, + ApplicationStreamStates: { + "CONNECTING": "CONNECTING", + "ACTIVE": "ACTIVE", + "RECONNECTING": "RECONNECTING", + "ENDED": "ENDED", + "PAUSED": "PAUSED", + "FAILED": "FAILED" + }, + ApplicationStreamDeleteReasons: { + "USER_REQUESTED": "user_requested", + "STREAM_FULL": "stream_full", + "UNAUTHORIZED": "unauthorized" + }, + MediaEngineHookTypes: { + "SOUND": "SOUND", + "VIDEO": "VIDEO" + }, + MediaEngineVideoStates: { + "PLAYING": "playing", + "PAUSED": "paused" + }, + GuildsBarDragTypes: { + "GUILD": "GUILD", + "FOLDER": "FOLDER" + }, + SoundshareTraceStates: { + "0": "DETACHED", + "1": "WAITING", + "2": "ATTACHED", + "3": "STARTED", + "4": "PLAYING", + "5": "SILENCE", + "DETACHED": 0, + "WAITING": 1, + "ATTACHED": 2, + "STARTED": 3, + "PLAYING": 4, + "SILENCE": 5 + }, + NetworkConnectionTypes: { + "NONE": "none", + "WIFI": "wifi", + "CELLULAR": "cellular", + "UNKNOWN": "unknown", + "ETHERNET": "ethernet", + "BLUETOOTH": "bluetooth", + "WIMAX": "wimax", + "OTHER": "other" + }, + NetworkConnectionSpeeds: { + "UNKNOWN": "unknown", + "SLOW_TWO_G": "slow-2g", + "TWO_G": "2g", + "THREE_G": "3g", + "FOUR_G": "4g" + }, + DISCODO_STORAGE_KEY: "discodoEasterEgg", + SpringTransitionPhases: { + "INITIAL": "initial", + "ENTER": "enter", + "UPDATE": "update", + "LEAVE": "leave" + }, + SettingsPaneTypes: { + "CHANNEL_SETTINGS": "Channel Settings", + "CHANNEL_NOTIFICATION_SETTINGS": "Channel Notification Settings", + "GUILD_NOTIFICATION_SETTINGS": "Guild Notification Settings" + }, + AddFriendTabs: { + "USERNAME": "Username", + "NEARBY_SCAN": "Nearby Scan" + }, + DiscordProtocolRoutes: { + "PREMIUM": "discord://app/settings/nitro" + }, + MAX_MEMBERS_NOTIFY_ALL_MESSAGES: 2500, + UNREACHABLE_REQUEST_ANIMATION_FRAME_ID: 0, + ExpressionPickerWidths: { + "MIN": "min", + "MAX": "max" + }, + Colors: { + "PRIMARY_DARK_100": "#f6f6f7", + "PRIMARY_DARK_130": "#eff0f0", + "PRIMARY_DARK_160": "#e6e6e8", + "PRIMARY_DARK_200": "#dcddde", + "PRIMARY_DARK_230": "#d1d3d5", + "PRIMARY_DARK_260": "#c6c8ca", + "PRIMARY_DARK_300": "#b9bbbe", + "PRIMARY_DARK_330": "#a3a6aa", + "PRIMARY_DARK_360": "#8e9297", + "PRIMARY_DARK_400": "#72767d", + "PRIMARY_DARK_430": "#686d73", + "PRIMARY_DARK_460": "#5d6269", + "PRIMARY_DARK_500": "#4f545c", + "PRIMARY_DARK": "#4f545c", + "PRIMARY_DARK_530": "#484c54", + "PRIMARY_DARK_560": "#40444b", + "PRIMARY_DARK_600": "#36393f", + "PRIMARY_DARK_630": "#2f3136", + "PRIMARY_DARK_660": "#292b2f", + "PRIMARY_DARK_700": "#202225", + "PRIMARY_DARK_730": "#1e1f22", + "PRIMARY_DARK_760": "#1b1d20", + "PRIMARY_DARK_800": "#18191c", + "PRIMARY_DARK_830": "#121315", + "PRIMARY_DARK_860": "#0c0d0e", + "PRIMARY_DARK_900": "#040405", + "PRIMARY_LIGHT_100": "#f8f9f9", + "PRIMARY_LIGHT_130": "#f2f3f5", + "PRIMARY_LIGHT_160": "#ebedef", + "PRIMARY_LIGHT_200": "#e3e5e8", + "PRIMARY_LIGHT_230": "#dbdee1", + "PRIMARY_LIGHT_260": "#d2d6da", + "PRIMARY_LIGHT_300": "#c7ccd1", + "PRIMARY_LIGHT_330": "#b6bcc4", + "PRIMARY_LIGHT_360": "#a6adb6", + "PRIMARY_LIGHT_400": "#9099a4", + "PRIMARY_LIGHT_430": "#88919d", + "PRIMARY_LIGHT_460": "#7f8996", + "PRIMARY_LIGHT_500": "#747f8d", + "PRIMARY_LIGHT": "#747f8d", + "PRIMARY_LIGHT_530": "#6a7480", + "PRIMARY_LIGHT_560": "#5e6772", + "PRIMARY_LIGHT_600": "#4f5660", + "PRIMARY_LIGHT_630": "#444b53", + "PRIMARY_LIGHT_660": "#3c4149", + "PRIMARY_LIGHT_700": "#2e3338", + "PRIMARY_LIGHT_730": "#2b2f35", + "PRIMARY_LIGHT_760": "#282c31", + "PRIMARY_LIGHT_800": "#23262a", + "PRIMARY_LIGHT_830": "#1b1d20", + "PRIMARY_LIGHT_860": "#111315", + "PRIMARY_LIGHT_900": "#060607", + "BRAND_100": "#f8f9fd", + "BRAND_130": "#f2f4fc", + "BRAND_160": "#ebeefa", + "BRAND_200": "#e3e7f8", + "BRAND_230": "#dae0f5", + "BRAND_260": "#d1d9f3", + "BRAND_300": "#c7d0f0", + "BRAND_330": "#b5c1ec", + "BRAND_360": "#a5b3e7", + "BRAND_400": "#8ea1e1", + "BRAND_430": "#869adf", + "BRAND_460": "#7d92dd", + "BRAND_500": "#7289da", + "BRAND": "#7289da", + "BRAND_530": "#687dc6", + "BRAND_560": "#5c6fb1", + "BRAND_600": "#4e5d94", + "BRAND_630": "#435180", + "BRAND_660": "#3b4770", + "BRAND_700": "#2e3757", + "BRAND_730": "#2b3352", + "BRAND_760": "#272f4b", + "BRAND_800": "#222941", + "BRAND_830": "#1a2032", + "BRAND_860": "#111521", + "BRAND_900": "#06070b", + "STATUS_RED_100": "#fef6f6", + "STATUS_RED_130": "#feeeee", + "STATUS_RED_160": "#fde5e5", + "STATUS_RED_200": "#fcdada", + "STATUS_RED_230": "#fbcfcf", + "STATUS_RED_260": "#fac3c3", + "STATUS_RED_300": "#f9b5b5", + "STATUS_RED_330": "#f79f9f", + "STATUS_RED_360": "#f58989", + "STATUS_RED_400": "#f36c6c", + "STATUS_RED_430": "#f26161", + "STATUS_RED_460": "#f15656", + "STATUS_RED_500": "#f04747", + "STATUS_RED": "#f04747", + "STATUS_RED_530": "#da4141", + "STATUS_RED_560": "#c23a3a", + "STATUS_RED_600": "#a33030", + "STATUS_RED_630": "#8d2a2a", + "STATUS_RED_660": "#7c2525", + "STATUS_RED_700": "#601c1c", + "STATUS_RED_730": "#5a1b1b", + "STATUS_RED_760": "#531818", + "STATUS_RED_800": "#481515", + "STATUS_RED_830": "#371010", + "STATUS_RED_860": "#240b0b", + "STATUS_RED_900": "#0c0404", + "STATUS_YELLOW_100": "#fffbf4", + "STATUS_YELLOW_130": "#fff7ea", + "STATUS_YELLOW_160": "#fef2de", + "STATUS_YELLOW_200": "#feedd1", + "STATUS_YELLOW_230": "#fee8c3", + "STATUS_YELLOW_260": "#fde2b5", + "STATUS_YELLOW_300": "#fddba3", + "STATUS_YELLOW_330": "#fcd188", + "STATUS_YELLOW_360": "#fcc66c", + "STATUS_YELLOW_400": "#fbb848", + "STATUS_YELLOW_430": "#fbb33b", + "STATUS_YELLOW_460": "#faad2c", + "STATUS_YELLOW_500": "#faa61a", + "STATUS_YELLOW": "#faa61a", + "STATUS_YELLOW_530": "#e49718", + "STATUS_YELLOW_560": "#cb8615", + "STATUS_YELLOW_600": "#aa7112", + "STATUS_YELLOW_630": "#93620f", + "STATUS_YELLOW_660": "#81550d", + "STATUS_YELLOW_700": "#64420a", + "STATUS_YELLOW_730": "#5e3e0a", + "STATUS_YELLOW_760": "#563909", + "STATUS_YELLOW_800": "#4b3208", + "STATUS_YELLOW_830": "#3a2606", + "STATUS_YELLOW_860": "#261904", + "STATUS_YELLOW_900": "#0d0801", + "STATUS_GREEN_100": "#f6fbf9", + "STATUS_GREEN_130": "#eef8f4", + "STATUS_GREEN_160": "#e4f4ed", + "STATUS_GREEN_200": "#d9f0e6", + "STATUS_GREEN_230": "#ceecde", + "STATUS_GREEN_260": "#c2e7d6", + "STATUS_GREEN_300": "#b4e1cd", + "STATUS_GREEN_330": "#9dd8bd", + "STATUS_GREEN_360": "#87d0ae", + "STATUS_GREEN_400": "#69c49a", + "STATUS_GREEN_430": "#5ec093", + "STATUS_GREEN_460": "#52bb8b", + "STATUS_GREEN_500": "#43b581", + "STATUS_GREEN": "#43b581", + "STATUS_GREEN_530": "#3da575", + "STATUS_GREEN_560": "#369368", + "STATUS_GREEN_600": "#2e7b58", + "STATUS_GREEN_630": "#276b4c", + "STATUS_GREEN_660": "#235d42", + "STATUS_GREEN_700": "#1b4834", + "STATUS_GREEN_730": "#194430", + "STATUS_GREEN_760": "#173e2c", + "STATUS_GREEN_800": "#143627", + "STATUS_GREEN_830": "#0f2a1e", + "STATUS_GREEN_860": "#0a1b13", + "STATUS_GREEN_900": "#030906", + "STATUS_GREY_100": "#f8f9f9", + "STATUS_GREY_130": "#f2f3f5", + "STATUS_GREY_160": "#ebedef", + "STATUS_GREY_200": "#e3e5e8", + "STATUS_GREY_230": "#dbdee1", + "STATUS_GREY_260": "#d2d6da", + "STATUS_GREY_300": "#c7ccd1", + "STATUS_GREY_330": "#b6bcc4", + "STATUS_GREY_360": "#a6adb6", + "STATUS_GREY_400": "#9099a4", + "STATUS_GREY_430": "#88919d", + "STATUS_GREY_460": "#7f8996", + "STATUS_GREY_500": "#747f8d", + "STATUS_GREY": "#747f8d", + "STATUS_GREY_530": "#6a7480", + "STATUS_GREY_560": "#5e6772", + "STATUS_GREY_600": "#4f5660", + "STATUS_GREY_630": "#444b53", + "STATUS_GREY_660": "#3c4149", + "STATUS_GREY_700": "#2e3338", + "STATUS_GREY_730": "#2b2f35", + "STATUS_GREY_760": "#282c31", + "STATUS_GREY_800": "#23262a", + "STATUS_GREY_830": "#1b1d20", + "STATUS_GREY_860": "#111315", + "STATUS_GREY_900": "#060607", + "LINK_100": "#f2fbfe", + "LINK_130": "#e8f8fe", + "LINK_160": "#daf4fd", + "LINK_200": "#cceffd", + "LINK_230": "#bdeafc", + "LINK_260": "#ace5fb", + "LINK_300": "#99dffb", + "LINK_330": "#7ad6f9", + "LINK_360": "#5cccf8", + "LINK_400": "#33c0f6", + "LINK_430": "#25bbf6", + "LINK_460": "#14b6f5", + "LINK_500": "#00b0f4", + "LINK": "#00b0f4", + "LINK_530": "#00a0de", + "LINK_560": "#008fc6", + "LINK_600": "#0078a6", + "LINK_630": "#006890", + "LINK_660": "#005b7e", + "LINK_700": "#004662", + "LINK_730": "#00425b", + "LINK_760": "#003d54", + "LINK_800": "#003549", + "LINK_830": "#002838", + "LINK_860": "#001a25", + "LINK_900": "#00090c", + "WHITE_100": "#ffffff", + "WHITE_130": "#ffffff", + "WHITE_160": "#ffffff", + "WHITE_200": "#ffffff", + "WHITE_230": "#ffffff", + "WHITE_260": "#ffffff", + "WHITE_300": "#ffffff", + "WHITE_330": "#ffffff", + "WHITE_360": "#ffffff", + "WHITE_400": "#ffffff", + "WHITE_430": "#ffffff", + "WHITE_460": "#ffffff", + "WHITE_500": "#ffffff", + "WHITE": "#ffffff", + "WHITE_530": "#e8e8e8", + "WHITE_560": "#cfcfcf", + "WHITE_600": "#adadad", + "WHITE_630": "#969696", + "WHITE_660": "#838383", + "WHITE_700": "#666666", + "WHITE_730": "#5f5f5f", + "WHITE_760": "#585858", + "WHITE_800": "#4d4d4d", + "WHITE_830": "#3b3b3b", + "WHITE_860": "#262626", + "WHITE_900": "#0d0d0d", + "BLACK_100": "#f2f2f2", + "BLACK_130": "#e8e8e8", + "BLACK_160": "#dadada", + "BLACK_200": "#cccccc", + "BLACK_230": "#bdbdbd", + "BLACK_260": "#acacac", + "BLACK_300": "#999999", + "BLACK_330": "#7a7a7a", + "BLACK_360": "#5c5c5c", + "BLACK_400": "#333333", + "BLACK_430": "#252525", + "BLACK_460": "#141414", + "BLACK_500": "#000000", + "BLACK": "#000000", + "BLACK_530": "#000000", + "BLACK_560": "#000000", + "BLACK_600": "#000000", + "BLACK_630": "#000000", + "BLACK_660": "#000000", + "BLACK_700": "#000000", + "BLACK_730": "#000000", + "BLACK_760": "#000000", + "BLACK_800": "#000000", + "BLACK_830": "#000000", + "BLACK_860": "#000000", + "BLACK_900": "#000000", + "PREMIUM_TIER_2_PURPLE_500": "#b473f5", + "PREMIUM_TIER_2_PURPLE": "#b473f5", + "PREMIUM_TIER_2_PINK_500": "#e292aa", + "PREMIUM_TIER_2_PINK": "#e292aa", + "PREMIUM_TIER_1_PURPLE_500": "#b3aeff", + "PREMIUM_TIER_1_PURPLE": "#b3aeff", + "PREMIUM_TIER_1_BLUE_500": "#738ef5", + "PREMIUM_TIER_1_BLUE": "#738ef5", + "PREMIUM_GUILD_PINK_500": "#ff73fa", + "PREMIUM_GUILD_PINK": "#ff73fa", + "PREMIUM_GUILD_PURPLE_500": "#b377f3", + "PREMIUM_GUILD_PURPLE": "#b377f3", + "PREMIUM_GUILD_BLUE_500": "#3e70dd", + "PREMIUM_GUILD_BLUE": "#3e70dd", + "HYPESQUAD_HOUSE_1_500": "#9c84ef", + "HYPESQUAD_HOUSE_1": "#9c84ef", + "HYPESQUAD_HOUSE_2_500": "#f47b67", + "HYPESQUAD_HOUSE_2": "#f47b67", + "HYPESQUAD_HOUSE_3_500": "#45ddc0", + "HYPESQUAD_HOUSE_3": "#45ddc0", + "PARTNER_500": "#4087ed", + "PARTNER": "#4087ed", + "SKYPE_500": "#009dd7", + "SKYPE": "#009dd7", + "BATTLENET_500": "#009ae5", + "BATTLENET": "#009ae5", + "STEAM_500": "#182332", + "STEAM": "#182332", + "LOL_500": "#021f25", + "LOL": "#021f25", + "TWITCH_500": "#593695", + "TWITCH": "#593695", + "YOUTUBE_500": "#cb2120", + "YOUTUBE": "#cb2120", + "TWITTER_500": "#1da1f2", + "TWITTER": "#1da1f2", + "REDDIT_500": "#ff4500", + "REDDIT": "#ff4500", + "SPOTIFY_500": "#1db954", + "SPOTIFY": "#1db954", + "FACEBOOK_500": "#355089", + "FACEBOOK": "#355089", + "SAMSUNG_500": "#1429a0", + "SAMSUNG": "#1429a0", + "XBOX_500": "#107c10", + "XBOX": "#107c10", + "TRANSPARENT": "transparent" + }, + ThemeTypes: { + "DARK": "dark", + "LIGHT": "light" + }, + ThemeColorMap: { + "HEADER_PRIMARY": [ + "#ffffff", + "#060607" + ], + "HEADER_SECONDARY": [ + "#b9bbbe", + "#4f5660" + ], + "TEXT_NORMAL": [ + "#dcddde", + "#2e3338" + ], + "TEXT_MUTED": [ + "#72767d", + "#747f8d" + ], + "TEXT_LINK": [ + "#00b0f4", + "#0067e0" + ], + "CHANNELS_DEFAULT": [ + "#8e9297", + "#6a7480" + ], + "INTERACTIVE_NORMAL": [ + "#b9bbbe", + "#4f5660" + ], + "INTERACTIVE_HOVER": [ + "#dcddde", + "#2e3338" + ], + "INTERACTIVE_ACTIVE": [ + "#ffffff", + "#060607" + ], + "INTERACTIVE_MUTED": [ + "#4f545c", + "#c7ccd1" + ], + "BACKGROUND_PRIMARY": [ + "#36393f", + "#ffffff" + ], + "BACKGROUND_SECONDARY": [ + "#2f3136", + "#f2f3f5" + ], + "BACKGROUND_SECONDARY_ALT": [ + "#292b2f", + "#ebedef" + ], + "BACKGROUND_TERTIARY": [ + "#202225", + "#e3e5e8" + ], + "BACKGROUND_ACCENT": [ + "#4f545c", + "#747f8d" + ], + "BACKGROUND_FLOATING": [ + "#18191c", + "#ffffff" + ], + "BACKGROUND_MOBILE_PRIMARY": [ + "#36393f", + "#f8f9f9" + ], + "BACKGROUND_MOBILE_SECONDARY": [ + "#2f3136", + "#ffffff" + ], + "BACKGROUND_MODIFIER_HOVER": [ + "rgba(79, 84, 92, 0.16)", + "rgba(116, 127, 141, 0.08)" + ], + "BACKGROUND_MODIFIER_ACTIVE": [ + "rgba(79, 84, 92, 0.24)", + "rgba(116, 127, 141, 0.16)" + ], + "BACKGROUND_MODIFIER_SELECTED": [ + "rgba(79, 84, 92, 0.32)", + "rgba(116, 127, 141, 0.24)" + ], + "BACKGROUND_MODIFIER_ACCENT": [ + "rgba(255, 255, 255, 0.06)", + "rgba(6, 6, 7, 0.08)" + ], + "BACKGROUND_MENTIONED": [ + "rgba(250, 166, 26, 0.05)", + "rgba(250, 166, 26, 0.1)" + ], + "BACKGROUND_MENTIONED_HOVER": [ + "rgba(250, 166, 26, 0.08)", + "rgba(250, 166, 26, 0.2)" + ], + "BACKGROUND_MESSAGE_HOVER": [ + "rgba(4, 4, 5, 0.07)", + "rgba(6, 6, 7, 0.02)" + ], + "ELEVATION_STROKE": [ + "0 0 0 1px rgba(4, 4, 5, 0.15)", + "0 0 0 1px rgba(6, 6, 7, 0.08)" + ], + "ELEVATION_LOW": [ + "0 1px 0 rgba(4, 4, 5, 0.2), 0 1.5px 0 rgba(6, 6, 7, 0.05), 0 2px 0 rgba(4, 4, 5, 0.05)", + "0 1px 0 rgba(6, 6, 7, 0.1), 0 1.5px 0 rgba(6, 6, 7, 0.025), 0 2px 0 rgba(6, 6, 7, 0.025)" + ], + "ELEVATION_MEDIUM": [ + "0 4px 4px rgba(0, 0, 0, 0.16)", + "0 4px 4px rgba(0, 0, 0, 0.08)" + ], + "ELEVATION_HIGH": [ + "0 8px 16px rgba(0, 0, 0, 0.24)", + "0 8px 16px rgba(0, 0, 0, 0.16)" + ], + "LOGO_PRIMARY": [ + "#ffffff", + "#7289da" + ], + "FOCUS_PRIMARY": [ + "#00b0f4", + "#00b0f4" + ], + "GUILD_HEADER_TEXT_SHADOW": [ + "0 1px 1px rgba(0, 0, 0, 0.4)", + "0 1px 1px rgba(255, 255, 255, 0.4)" + ], + "CHANNELTEXTAREA_BACKGROUND": [ + "#40444b", + "#ebedef" + ], + "ACTIVITY_CARD_BACKGROUND": [ + "#202225", + "#ffffff" + ], + "TEXTBOX_MARKDOWN_SYNTAX": [ + "#8e9297", + "#6a7480" + ], + "DEPRECATED_CARD_BG": [ + "rgba(32, 34, 37, 0.6)", + "#f8f9f9" + ], + "DEPRECATED_CARD_EDITABLE_BG": [ + "rgba(32, 34, 37, 0.3)", + "rgba(246, 246, 247, 0.6)" + ], + "DEPRECATED_STORE_BG": [ + "#36393f", + "#f8f9f9" + ], + "DEPRECATED_QUICKSWITCHER_INPUT_BACKGROUND": [ + "#72767d", + "#ffffff" + ], + "DEPRECATED_QUICKSWITCHER_INPUT_PLACEHOLDER": [ + "rgba(255, 255, 255, 0.3)", + "rgba(79, 84, 92, 0.3)" + ], + "DEPRECATED_TEXT_INPUT_BG": [ + "rgba(0, 0, 0, 0.1)", + "rgba(79, 84, 92, 0.02)" + ], + "DEPRECATED_TEXT_INPUT_BORDER": [ + "rgba(0, 0, 0, 0.3)", + "rgba(79, 84, 92, 0.3)" + ], + "DEPRECATED_TEXT_INPUT_BORDER_HOVER": [ + "#040405", + "#b9bbbe" + ], + "DEPRECATED_TEXT_INPUT_BORDER_DISABLED": [ + "#202225", + "#dcddde" + ], + "DEPRECATED_TEXT_INPUT_PREFIX": [ + "#dcddde", + "#b9bbbe" + ] + }, + APP_URL_PREFIX: "https://discord.com", + VANITY_URL_PREFIX: "https://discord.gg", + PRIMARY_DOMAIN: "discord.com", + SUPPORT_DOMAIN: "support.discord.com", + SUPPORT_DEV_DOMAIN: "support-dev.discord.com", + EMAIL_DOMAIN: "discord.com", + BLOG_DOMAIN: "blog.discord.com", + FEEDBACK_DOMAIN: "feedback.discord.com", + STATUS_DOMAIN: "status.discord.com", + UNSAFE_Colors: { + "HINT_PURPLE": "#c9d2f0", + "DARK_PURPLE": "#697ec4", + "MODAL_GREY": "#EFEFF4", + "ORANGE": "#f57731", + "GUILDS_GREY": "#1e2124", + "ACCOUNT_GREY": "#282b30", + "CHAT_GREY": "#36393e", + "UNREAD_GREY": "#8a8e94", + "HIGHLIGHT_GREY": "#25282c", + "AVATAR_GREY": "#747F8C", + "WHITE2": "#f3f3f3", + "WHITE3": "#f0f0f0", + "WHITE7": "#dbdde1", + "WHITE8": "#cdcdcd", + "GREY1": "#99aab5", + "GREY2": "#87909c", + "GREY3": "#737f8d", + "GREY4": "#949494", + "GREY5": "#535559", + "GREY6": "#4f545c", + "GREY7": "#1c242b", + "GREY9": "#202226" + }, + Fonts: { + "PRIMARY_LIGHT": "Whitney-Light", + "PRIMARY_BOLD": "Whitney-Bold", + "PRIMARY_SEMIBOLD": "Whitney-Semibold", + "PRIMARY_REGULAR": "Whitney-Book", + "PRIMARY": "Whitney-Medium", + "CODE_SEMIBOLD": "SourceCodePro-Semibold" + }, + StatusTypes: { + "ONLINE": "online", + "OFFLINE": "offline", + "IDLE": "idle", + "DND": "dnd", + "INVISIBLE": "invisible", + "STREAMING": "streaming", + "UNKNOWN": "unknown" + }, + ClientTypes: { + "DESKTOP": "desktop", + "WEB": "web", + "MOBILE": "mobile", + "UNKNOWN": "unknown" + }, + RECAPTCHA_SITE_KEY: "6Lef5iQTAAAAAKeIvIY-DeexoO3gj7ryl9rLMEnn", + OAuth2Scopes: { + "IDENTIFY": "identify", + "EMAIL": "email", + "CONNECTIONS": "connections", + "GUILDS": "guilds", + "GUILDS_JOIN": "guilds.join", + "GDM_JOIN": "gdm.join", + "RPC": "rpc", + "RPC_NOTIFICATIONS_READ": "rpc.notifications.read", + "BOT": "bot", + "WEBHOOK_INCOMING": "webhook.incoming", + "MESSAGES_READ": "messages.read", + "APPLICATIONS_BUILDS_UPLOAD": "applications.builds.upload", + "APPLICATIONS_BUILDS_READ": "applications.builds.read", + "APPLICATIONS_STORE_UPDATE": "applications.store.update", + "APPLICATIONS_ENTITLEMENTS": "applications.entitlements", + "ACTIVITIES_READ": "activities.read", + "ACTIVITIES_WRITE": "activities.write", + "RELATIONSHIPS_READ": "relationships.read" + }, + PaymentGateways: { + "STRIPE": 1, + "BRAINTREE": 2, + "APPLE": 3 + }, + PaymentSettings: { + "BRAINTREE": { + "KEY": "production_5st77rrc_49pp2rp4phym7387", + "PAYMENT_GATEWAY": "braintree" + }, + "STRIPE": { + "KEY": "pk_live_CUQtlpQUF0vufWpnpUmQvcdi", + "PAYMENT_GATEWAY": "stripe" + } + }, + PaymentSourceTypes: { + "CARD": 1, + "PAYPAL": 2, + "PAYMENT_REQUEST": 3 + }, + PaymentStatusTypes: { + "PENDING": 0, + "COMPLETED": 1, + "FAILED": 2, + "REVERSED": 3, + "REFUNDED": 4 + }, + BraintreeErrors: { + "PAYPAL_POPUP_CLOSED": "PAYPAL_POPUP_CLOSED" + }, + Permissions: { + "CREATE_INSTANT_INVITE": 1, + "KICK_MEMBERS": 2, + "BAN_MEMBERS": 4, + "ADMINISTRATOR": 8, + "MANAGE_CHANNELS": 16, + "MANAGE_GUILD": 32, + "CHANGE_NICKNAME": 67108864, + "MANAGE_NICKNAMES": 134217728, + "MANAGE_ROLES": 268435456, + "MANAGE_WEBHOOKS": 536870912, + "MANAGE_EMOJIS": 1073741824, + "VIEW_AUDIT_LOG": 128, + "VIEW_CHANNEL": 1024, + "VIEW_GUILD_ANALYTICS": 524288, + "SEND_MESSAGES": 2048, + "SEND_TTS_MESSAGES": 4096, + "MANAGE_MESSAGES": 8192, + "EMBED_LINKS": 16384, + "ATTACH_FILES": 32768, + "READ_MESSAGE_HISTORY": 65536, + "MENTION_EVERYONE": 131072, + "USE_EXTERNAL_EMOJIS": 262144, + "ADD_REACTIONS": 64, + "CONNECT": 1048576, + "SPEAK": 2097152, + "MUTE_MEMBERS": 4194304, + "DEAFEN_MEMBERS": 8388608, + "MOVE_MEMBERS": 16777216, + "USE_VAD": 33554432, + "PRIORITY_SPEAKER": 256, + "STREAM": 512 + }, + NOOP(...args: any[]):any, + NOOP_NULL(...args: any[]):any, + ElevatedPermissions: 268443710, + RPC_VERSION: 1, + RPC_STARTING_PORT: 6463, + RPC_PORT_RANGE: 10, + RPCCommands: { + "DISPATCH": "DISPATCH", + "AUTHORIZE": "AUTHORIZE", + "AUTHENTICATE": "AUTHENTICATE", + "GET_GUILD": "GET_GUILD", + "GET_GUILDS": "GET_GUILDS", + "GET_CHANNEL": "GET_CHANNEL", + "GET_CHANNELS": "GET_CHANNELS", + "CREATE_CHANNEL_INVITE": "CREATE_CHANNEL_INVITE", + "GET_RELATIONSHIPS": "GET_RELATIONSHIPS", + "GET_USER": "GET_USER", + "SUBSCRIBE": "SUBSCRIBE", + "UNSUBSCRIBE": "UNSUBSCRIBE", + "SET_USER_VOICE_SETTINGS": "SET_USER_VOICE_SETTINGS", + "SET_USER_VOICE_SETTINGS_2": "SET_USER_VOICE_SETTINGS_2", + "SELECT_VOICE_CHANNEL": "SELECT_VOICE_CHANNEL", + "GET_SELECTED_VOICE_CHANNEL": "GET_SELECTED_VOICE_CHANNEL", + "SELECT_TEXT_CHANNEL": "SELECT_TEXT_CHANNEL", + "GET_VOICE_SETTINGS": "GET_VOICE_SETTINGS", + "SET_VOICE_SETTINGS_2": "SET_VOICE_SETTINGS_2", + "SET_VOICE_SETTINGS": "SET_VOICE_SETTINGS", + "CAPTURE_SHORTCUT": "CAPTURE_SHORTCUT", + "SET_ACTIVITY": "SET_ACTIVITY", + "SEND_ACTIVITY_JOIN_INVITE": "SEND_ACTIVITY_JOIN_INVITE", + "CLOSE_ACTIVITY_JOIN_REQUEST": "CLOSE_ACTIVITY_JOIN_REQUEST", + "ACTIVITY_INVITE_USER": "ACTIVITY_INVITE_USER", + "ACCEPT_ACTIVITY_INVITE": "ACCEPT_ACTIVITY_INVITE", + "INVITE_BROWSER": "INVITE_BROWSER", + "DEEP_LINK": "DEEP_LINK", + "CONNECTIONS_CALLBACK": "CONNECTIONS_CALLBACK", + "BRAINTREE_POPUP_BRIDGE_CALLBACK": "BRAINTREE_POPUP_BRIDGE_CALLBACK", + "GIFT_CODE_BROWSER": "GIFT_CODE_BROWSER", + "GUILD_TEMPLATE_BROWSER": "GUILD_TEMPLATE_BROWSER", + "OVERLAY": "OVERLAY", + "BROWSER_HANDOFF": "BROWSER_HANDOFF", + "SET_CERTIFIED_DEVICES": "SET_CERTIFIED_DEVICES", + "GET_IMAGE": "GET_IMAGE", + "CREATE_LOBBY": "CREATE_LOBBY", + "UPDATE_LOBBY": "UPDATE_LOBBY", + "DELETE_LOBBY": "DELETE_LOBBY", + "UPDATE_LOBBY_MEMBER": "UPDATE_LOBBY_MEMBER", + "CONNECT_TO_LOBBY": "CONNECT_TO_LOBBY", + "DISCONNECT_FROM_LOBBY": "DISCONNECT_FROM_LOBBY", + "SEND_TO_LOBBY": "SEND_TO_LOBBY", + "SEARCH_LOBBIES": "SEARCH_LOBBIES", + "CONNECT_TO_LOBBY_VOICE": "CONNECT_TO_LOBBY_VOICE", + "DISCONNECT_FROM_LOBBY_VOICE": "DISCONNECT_FROM_LOBBY_VOICE", + "SET_OVERLAY_LOCKED": "SET_OVERLAY_LOCKED", + "OPEN_OVERLAY_ACTIVITY_INVITE": "OPEN_OVERLAY_ACTIVITY_INVITE", + "OPEN_OVERLAY_GUILD_INVITE": "OPEN_OVERLAY_GUILD_INVITE", + "OPEN_OVERLAY_VOICE_SETTINGS": "OPEN_OVERLAY_VOICE_SETTINGS", + "VALIDATE_APPLICATION": "VALIDATE_APPLICATION", + "GET_ENTITLEMENT_TICKET": "GET_ENTITLEMENT_TICKET", + "GET_APPLICATION_TICKET": "GET_APPLICATION_TICKET", + "START_PURCHASE": "START_PURCHASE", + "GET_SKUS": "GET_SKUS", + "GET_ENTITLEMENTS": "GET_ENTITLEMENTS", + "GET_NETWORKING_CONFIG": "GET_NETWORKING_CONFIG", + "NETWORKING_SYSTEM_METRICS": "NETWORKING_SYSTEM_METRICS", + "NETWORKING_PEER_METRICS": "NETWORKING_PEER_METRICS", + "NETWORKING_CREATE_TOKEN": "NETWORKING_CREATE_TOKEN", + "SET_USER_ACHIEVEMENT": "SET_USER_ACHIEVEMENT", + "GET_USER_ACHIEVEMENTS": "GET_USER_ACHIEVEMENTS" + }, + RPCEvents: { + "CURRENT_USER_UPDATE": "CURRENT_USER_UPDATE", + "GUILD_STATUS": "GUILD_STATUS", + "GUILD_CREATE": "GUILD_CREATE", + "CHANNEL_CREATE": "CHANNEL_CREATE", + "RELATIONSHIP_UPDATE": "RELATIONSHIP_UPDATE", + "VOICE_CHANNEL_SELECT": "VOICE_CHANNEL_SELECT", + "VOICE_STATE_CREATE": "VOICE_STATE_CREATE", + "VOICE_STATE_DELETE": "VOICE_STATE_DELETE", + "VOICE_STATE_UPDATE": "VOICE_STATE_UPDATE", + "VOICE_SETTINGS_UPDATE": "VOICE_SETTINGS_UPDATE", + "VOICE_SETTINGS_UPDATE_2": "VOICE_SETTINGS_UPDATE_2", + "VOICE_CONNECTION_STATUS": "VOICE_CONNECTION_STATUS", + "SPEAKING_START": "SPEAKING_START", + "SPEAKING_STOP": "SPEAKING_STOP", + "GAME_JOIN": "GAME_JOIN", + "GAME_SPECTATE": "GAME_SPECTATE", + "ACTIVITY_JOIN": "ACTIVITY_JOIN", + "ACTIVITY_JOIN_REQUEST": "ACTIVITY_JOIN_REQUEST", + "ACTIVITY_SPECTATE": "ACTIVITY_SPECTATE", + "ACTIVITY_INVITE": "ACTIVITY_INVITE", + "NOTIFICATION_CREATE": "NOTIFICATION_CREATE", + "MESSAGE_CREATE": "MESSAGE_CREATE", + "MESSAGE_UPDATE": "MESSAGE_UPDATE", + "MESSAGE_DELETE": "MESSAGE_DELETE", + "LOBBY_DELETE": "LOBBY_DELETE", + "LOBBY_UPDATE": "LOBBY_UPDATE", + "LOBBY_MEMBER_CONNECT": "LOBBY_MEMBER_CONNECT", + "LOBBY_MEMBER_DISCONNECT": "LOBBY_MEMBER_DISCONNECT", + "LOBBY_MEMBER_UPDATE": "LOBBY_MEMBER_UPDATE", + "LOBBY_MESSAGE": "LOBBY_MESSAGE", + "CAPTURE_SHORTCUT_CHANGE": "CAPTURE_SHORTCUT_CHANGE", + "OVERLAY": "OVERLAY", + "OVERLAY_UPDATE": "OVERLAY_UPDATE", + "ENTITLEMENT_CREATE": "ENTITLEMENT_CREATE", + "ENTITLEMENT_DELETE": "ENTITLEMENT_DELETE", + "USER_ACHIEVEMENT_UPDATE": "USER_ACHIEVEMENT_UPDATE", + "READY": "READY", + "ERROR": "ERROR" + }, + ROUGH_COUNT_MILLION_PLAYERS: 250, + TOKEN_KEY: "token", + RPCCloseCodes: { + "CLOSE_NORMAL": 1000, + "CLOSE_UNSUPPORTED": 1003, + "CLOSE_ABNORMAL": 1006, + "INVALID_CLIENTID": 4000, + "INVALID_ORIGIN": 4001, + "RATELIMITED": 4002, + "TOKEN_REVOKED": 4003, + "INVALID_VERSION": 4004, + "INVALID_ENCODING": 4005 + }, + STATUS_PAGE_ENDPOINT: "https://status.discord.com", + Links: { + "PRESSKIT": "https://app.box.com/s/5puqm5ijahrrdao7yldi7fr3zah5i1am", + "STATUS": "//status.discord.com", + "HELP_AND_SUPPORT": "//support.discord.com/hc/en-us", + "FEEDBACK": "//feedback.discord.com", + "BLOG": "//blog.discord.com/", + "EMAIL_SUPPORT": "mailto:support@discord.com", + "EMAIL_LAW_ENFORCEMENT": "mailto:lawenforcement@discord.com", + "EMAIL_HYPESQUAD": "mailto:hypesquad@discord.com", + "DEV_PERKS_FORM": "https://goo.gl/forms/oZfKBStV3sR8GHdU2", + "VERIFICATION_REQUIREMENTS": "https://dis.gd/vfqual", + "BASE_URL": "https://discord.com", + "PRESS_INQUIRIES": "mailto:press@discord.com", + "CONTACT_US": "https://dis.gd/contact", + "DEV_PORTAL": "/developers", + "DEV_PORTAL_APPLICATIONS": "/developers/applications", + "DEV_PORTAL_DOCUMENTATION": "/developers/docs", + "DEV_PORTAL_SELF_SERVE_MODAL": "/developers/?store_signup=true", + "PARTNER_CODE_OF_CONDUCT": "https://support.discord.com/hc/en-us/articles/360024871991", + "SUBMIT_TNS_REPORT": "https://dis.gd/request" + }, + LocalizedLinks: { + "TWITTER": { + "default": "https://twitter.com/discord", + "ja": "https://twitter.com/discord_jp" + } + }, + AppRoutes: { + "ME": "https://discord.com/channels/@me", + "CHANGELOGS": "https://discord.com/settings/changelogs", + "LOGIN": "https://discord.com/login", + "REGISTER": "https://discord.com/register", + "CREATE_GUILD": "https://discord.com/guilds/create", + "HYPESQUAD_ONLINE": "https://discord.com/settings/hypesquad-online", + "BROWSE_NITRO_TITLES": "https://discord.com/store/browse?type=nitro" + }, + WebRoutes: { + "INDEX": "/", + "INDEX_WORD": "/index", + "INDEX_BUCKET": "/index/:bucketId", + "CHANGELOGS": "/changelogs/:date", + "COMPANY": "/company", + "DOWNLOADS": "/downloads", + "DOWNLOAD": "/download", + "PRIVACY": "/privacy", + "PRIVACY_2017": "/privacy-2017", + "TOS": "/tos", + "TERMS": "/terms", + "STORE_TERMS": "/store-terms", + "ACKNOWLEDGEMENTS": "/acknowledgements", + "LICENSES": "/licenses", + "PARTNERS": "/partners", + "HYPESQUAD": "/hypesquad", + "HYPESQUAD_RIOT": "/hypesquad-riot", + "BRANDING": "/branding", + "ERROR_404": "/404", + "JOBS": "/jobs", + "JOB": "/jobs/:jobId", + "STREAMKIT": "/streamkit", + "SECURITY": "/security", + "NITRO": "/nitro", + "GUIDELINES": "/guidelines", + "RICH_PRESENCE": "/rich-presence", + "VERIFICATION": "/verification", + "OPEN_SOURCE": "/open-source", + "WARFRAME": "/warframe", + "SELL_YOUR_GAME": "/sell-your-game", + "XBOX_OFFER": "/discord-xbox-offer-2019", + "SELL_YOUR_GAMES": "/sell-your-games", + "TEST_KITCHEN": "/test-kitchen", + "REMOTE_AUTH": "/ra/:remoteAuthFingerprint", + "WHY_DISCORD": "/why-discord", + "SAFETY_LANDING": "/safety", + "SAFETY_ARTICLE": "/safety/:article", + "DEV_NEWSLETTER_SIGNUP": "/dev-newsletter", + "LEGACY_DEV_NEWSLETTER": "/newsletter" + }, + SOCIAL_LINKS: { + "FACEBOOK_URL": "https://www.facebook.com/discord/", + "INSTAGRAM_URL": "https://www.instagram.com/discord/" + }, + WebAnalyticsEvents: { + "MKTG_PAGE_VIEWED": "mktg_page_viewed", + "CLICK_LANDING_CTA": "click_landing_cta", + "DOWNLOAD_APP": "download_app", + "MKTG_HYPESQUAD_FORM_SUBMITTED": "mktg_hypesquad_form_submitted", + "CHANGE_MARKETING_LOCALE": "change_marketing_locale", + "GAME_CLICKED_LANDING": "game_clicked_landing", + "MAIN_NAVIGATION_MENU": "main_navigation_menu", + "MKTG_APPLICATION_STEP": "mktg_application_step", + "MKTG_WARFRAME_CTA_CLICKED": "mktg_warframe_cta_clicked", + "MKTG_PAGE_CTA_CLICKED": "mktg_page_cta_clicked" + }, + WebAnalyticsPageLoads: { + "MKTG_ACKNOWLEDGEMENTS_MODAL_OPEN": "mktg_ack_modal_open" + }, + Images: { + "ASSET_SOCIAL_TWITTER": "/assets/efc9b24f5779403afd12f5fc8594497f.svg", + "ASSET_SOCIAL_FACEBOOK": "/assets/9b3163fa3bb9d1eb2be647fed797a211.svg", + "ASSET_SOCIAL_INSTAGRAM": "/assets/a9c828bc42fdacefb74f400a0b875e2e.svg", + "ICON_TRANSLATE": "/assets/ab4c0da3ffff8a5c7705274f74aaa890.svg", + "ICON_ARROW_DOWN": "/assets/779a770c34fcb823a598a7277301adaf.svg", + "ASSET_LOGO_DISCORD_SVG": "/assets/c4e681296681c48b7a9be5e461fa9101.svg" + }, + CurrencyCodes: { + "USD": "usd", + "CAD": "cad", + "EUR": "eur", + "AUD": "aud", + "GBP": "gbp", + "JPY": "jpy", + "NOK": "nok", + "RUB": "rub" + }, + SKUFeatureTypes: { + "SINGLE_PLAYER": 1, + "ONLINE_MULTIPLAYER": 2, + "LOCAL_MULTIPLAYER": 3, + "PVP": 4, + "LOCAL_COOP": 5, + "CROSS_PLATFORM": 6, + "RICH_PRESENCE": 7, + "DISCORD_GAME_INVITES": 8, + "SPECTATOR_MODE": 9, + "CONTROLLER_SUPPORT": 10, + "CLOUD_SAVES": 11, + "ONLINE_COOP": 12, + "SECURE_NETWORKING": 13 + }, + SKUGenres: { + "ACTION": 1, + "ACTION_RPG": 2, + "BRAWLER": 3, + "HACK_AND_SLASH": 4, + "PLATFORMER": 5, + "STEALTH": 6, + "SURVIVAL": 7, + "ADVENTURE": 8, + "ACTION_ADVENTURE": 9, + "METROIDVANIA": 10, + "OPEN_WORLD": 11, + "PSYCHOLOGICAL_HORROR": 12, + "SANDBOX": 13, + "SURVIVAL_HORROR": 14, + "VISUAL_NOVEL": 15, + "DRIVING_RACING": 16, + "VEHICULAR_COMBAT": 17, + "MASSIVELY_MULTIPLAYER": 18, + "MMORPG": 19, + "ROLE_PLAYING": 20, + "DUNGEON_CRAWLER": 21, + "ROGUELIKE": 22, + "SHOOTER": 23, + "LIGHT_GUN": 24, + "SHOOT_EM_UP": 25, + "FPS": 26, + "DUAL_JOYSTICK_SHOOTER": 27, + "SIMULATION": 28, + "FLIGHT_SIMULATOR": 29, + "TRAIN_SIMULATOR": 30, + "LIFE_SIMULATOR": 31, + "FISHING": 32, + "SPORTS": 33, + "BASEBALL": 34, + "BASKETBALL": 35, + "BILLIARDS": 36, + "BOWLING": 37, + "BOXING": 38, + "FOOTBALL": 39, + "GOLF": 40, + "HOCKEY": 41, + "SKATEBOARDING_SKATING": 42, + "SNOWBOARDING_SKIING": 43, + "SOCCER": 44, + "TRACK_FIELD": 45, + "SURFING_WAKEBOARDING": 46, + "WRESTLING": 47, + "STRATEGY": 48, + "FOUR_X": 49, + "ARTILLERY": 50, + "RTS": 51, + "TOWER_DEFENSE": 52, + "TURN_BASED_STRATEGY": 53, + "WARGAME": 54, + "MOBA": 55, + "FIGHTING": 56, + "PUZZLE": 57, + "CARD_GAME": 58, + "EDUCATION": 59, + "FITNESS": 60, + "GAMBLING": 61, + "MUSIC_RHYTHM": 62, + "PARTY_MINI_GAME": 63, + "PINBALL": 64, + "TRIVIA_BOARD_GAME": 65 + }, + UserMediaErrors: { + "PERMISSION_DENIED": "PERMISSION_DENIED", + "PERMISSION_DISMISSED": "PERMISSION_DISMISSED", + "NO_DEVICES_FOUND": "NO_DEVICES_FOUND" + }, + DrawerTypes: { + "CHANNELS": "CHANNELS", + "MEMBERS": "MEMBERS" + }, + DrawerTabTypes: { + "CHAT": "CHAT", + "FRIENDS": "FRIENDS", + "QUICKSWITCHER": "QUICKSWITCHER", + "RECENT_MENTIONS": "RECENT_MENTIONS", + "USER_SETTINGS": "USER_SETTINGS" + }, + AppStates: { + "INACTIVE": "inactive", + "BACKGROUND": "background", + "ACTIVE": "active" + }, + AuthStates: { + "WELCOME": "WELCOME", + "LOGIN": "LOGIN", + "REGISTER": "REGISTER", + "MFA": "MFA", + "ACCOUNT_DISABLED_OR_DELETION_SCHEDULED": "ACCOUNT_DISABLED_OR_DELETION_SCHEDULED", + "AGE_GATE_UNDERAGE": "AGE_GATE_UNDERAGE", + "AGE_GATE": "AGE_GATE" + }, + KeyboardThemes: { + "DEFAULT": "default", + "DARK": "dark", + "LIGHT": "light" + }, + KeyboardTypes: { + "SYSTEM": "system", + "EMOJI": "emoji", + "MEDIA": "media" + }, + SourceTypes: { + "CAMERA": "camera", + "PHOTO": "photo" + }, + Changeset: { + "NOOP": 0, + "INSERT": 1, + "UPDATE": 2, + "REMOVE": 3 + }, + RowType: { + "0": "SEPARATOR", + "1": "MESSAGE", + "2": "BLOCKED_GROUP", + "3": "UPLOAD_PROGRESS", + "4": "LOADING", + "SEPARATOR": 0, + "MESSAGE": 1, + "BLOCKED_GROUP": 2, + "UPLOAD_PROGRESS": 3, + "LOADING": 4 + }, + SeparatorType: { + "DAY": "day", + "UNREAD": "unread" + }, + SeparatorAction: { + "TOGGLE_BLOCKED_MESSAGES": "toggle", + "LOAD_MORE_BEFORE": "load_more_before", + "LOAD_MORE_AFTER": "load_more_after" + }, + LoadingType: { + "LOAD_BEFORE": "load_before", + "LOAD_AFTER": "load_after" + }, + SearchBarStates: { + "0": "BLURRED_NO_QUERY", + "1": "BLURRED_WITH_QUERY", + "2": "FOCUSED_NO_QUERY", + "3": "FOCUSED_WITH_QUERY", + "BLURRED_NO_QUERY": 0, + "BLURRED_WITH_QUERY": 1, + "FOCUSED_NO_QUERY": 2, + "FOCUSED_WITH_QUERY": 3 + }, + GuildSettingsPermissionSections: { + "GENERAL": 0, + "TEXT": 1, + "VOICE": 2 + }, + WebBrowserType: { + "0": "SAFARI", + "1": "IN_APP", + "2": "CHROME", + "SAFARI": 0, + "IN_APP": 1, + "CHROME": 2 + }, + CaptchaEvent: { + "SOLVED": "solved", + "EXPIRED": "expired" + }, + MentionModalScenes: { + "MENTIONS": "mentions", + "CHAT": "mentions_chat" + }, + VerificationModalScenes: { + "OVERVIEW": "OVERVIEW", + "RESEND_EMAIL": "RESEND_EMAIL", + "ENTER_EMAIL": "ENTER_EMAIL", + "ADD_PHONE": "ADD_PHONE", + "VERIFY_PHONE": "VERIFY_PHONE" + }, + CallModalScenes: { + "VOICE": "VOICE", + "VIDEO": "VIDEO", + "STREAM": "STREAM" + }, + ContactSyncModalScenes: { + "LANDING": "LANDING", + "SYNCING": "SYNCING", + "RESULTS": "RESULTS", + "NO_RESULTS": "NO_RESULTS", + "ADD_PHONE": "ADD_PHONE", + "VERIFY_PHONE": "VERIFY_PHONE" + }, + InviteModalScenes: { + "ADVANCED": "ADVANCED" + }, + PremiumGuildSubscribeModalScenes: { + "GUILD_SELECT": "guild_select", + "OVERVIEW": "overview", + "CONFIRMATION": "confirmation", + "SUCCESS": "success" + }, + AuditLogFilterTypes: { + "USER": "USER", + "ACTION": "ACTION" + }, + NAV_BAR_HEIGHT: 44, + NAV_BAR_HEIGHT_MULTILINE: 48, + STATUS_BAR_HEIGHT: 20, + SEARCH_BAR_HEIGHT: 50, + SEGMENT_CONTROL_HEIGHT: 40, + AUTOCOMPLETE_ROW_HEIGHT: 40, + RTC_PANEL_HEIGHT: 28, + NotificationSettingsSections: { + "OVERVIEW": "OVERVIEW", + "ADD_OVERRIDE": "ADD_OVERRIDE", + "CHANNEL_OVERRIDE": "CHANNEL_OVERRIDE" + }, + APP_STORE_REVIEW_LINK: "itms-apps://itunes.apple.com/us/app/id985746746?mt=8&action=write-review", + MANAGE_SUBSCRIPTION_LINK: "itms-apps://apps.apple.com/account/subscriptions", + Base64JPEGPrefix: "data:image/jpeg;base64,", + Base64PNGPrefix: "data:image/png;base64,", + Base64GIFPrefix: "data:image/gif;base64,", + LinkingTypes: { + "INVITE": "invite", + "GUILD_TEMPLATE": "guild-template", + "CHANNEL": "channel", + "GIFT_CODE": "gift-code", + "MESSAGE": "message", + "OAUTH2_AUTHORIZE": "oauth2-authorize", + "PROMOTIONS": "promotions", + "NONE": "none", + "REMOTE_AUTH": "remote-auth", + "USER_PROFILE": "user-profile" + }, + LINKING_WHITELIST: ({ + "regex": {}, + "protocol": "youtube://" + } | { + "regex": {}, + "protocol": "instagram://" + } | { + "regex": {}, + "protocol": "twitch://" + } | { + "regex": {}, + "protocol": "twitter://" + } | { + "regex": {}, + "protocol": "discordconnect://" + })[], + ActivityPartyApplicationNames: { + "spotify": "Spotify" + }, + CACHE_STORE_LAZY_KEY: "CacheStoreLazy", + CACHE_STORE_KEY: "CacheStore", + MAX_INVITE_AVATARS_TO_SHOW: 6, + INVITE_EMBED_AVATAR_SIZE: 50, + UPLOAD_MEDIUM_SIZE: 256, + UPLOAD_SMALL_SIZE: 128, + EMOJI_CHAT_SIZE: 18, + DM_WIDTH: 72, + UpsellTypes: { + "UPLOAD": "upload", + "GLOBAL_EMOJI": "global-emoji", + "TAG": "tag", + "BADGE": "badge", + "ANIMATED_EMOJI": "animated-emoji", + "ANIMATED_AVATAR": "animated-avatar" + }, + ProductIds: { + "PREMIUM_MONTH_TIER_1": "premium_month_tier_1.1", + "PREMIUM_YEAR_TIER_1": "premium_year_tier_1.1", + "PREMIUM_MONTH_TIER_2": "premium_month_tier_2.1", + "PREMIUM_YEAR_TIER_2": "premium_year_tier_2.1", + "PREMIUM_GIFT_MONTH_TIER_1": "premium_month_tier_1.2", + "PREMIUM_GIFT_YEAR_TIER_1": "premium_year_tier_1.2", + "PREMIUM_GIFT_MONTH_TIER_2": "premium_month_tier_2.2", + "PREMIUM_GIFT_YEAR_TIER_2": "premium_year_tier_2.2" + }, + StoreKitErrors: { + "UNKNOWN": "ESKERRORDOMAIN0", + "CLIENT_INVALID": "ESKERRORDOMAIN1", + "PAYMENT_CANCELED": "ESKERRORDOMAIN2", + "PAYMENT_INVALID": "ESKERRORDOMAIN3", + "PAYMENT_NOT_ALLOWED": "ESKERRORDOMAIN4", + "STORE_PRODUCT_NOT_AVAILABLE": "ESKERRORDOMAIN5", + "CLOUD_SERVICE_PERMISSION_DENIED": "ESKERRORDOMAIN6", + "CLOUD_SERVICE_NETWORK_CONNECTION_FAILED": "ESKERRORDOMAIN7" + }, + StorageKeys: { + "LOGOUT_TIMESTAMP_KEY": "logout_timestamp_key" + }, + ModalAnimation: { + "NONE": "none", + "SLIDE": "slide", + "FADE": "fade" + }, + VIDEO_RE_IOS: {}, + GIF_RE_IOS: {}, + HorizontalGradient: { + "START": { + "x": 0, + "y": 0 + }, + "END": { + "x": 1, + "y": 0 + } + }, + Gradients: { + "PREMIUM_TIER_1": [ + "#738ef5", + "#b3aeff" + ], + "PREMIUM_TIER_2": [ + "#b473f5", + "#e292aa" + ], + "PREMIUM_GUILD": [ + "#3e70dd", + "#b377f3" + ] + }, + SlashCommands: ({ + "name": "tableflip", + "commandPreview": "(╯°□°)╯︵ ┻━┻" + } | { + "name": "unflip", + "commandPreview": "┬─┬ ノ( ゜-゜ノ)" + } | { + "name": "shrug", + "commandPreview": "¯\\_(ツ)_/¯" + })[], + CompressionQuality: { + "HIGH": 0.6, + "0.6": "HIGH", + "LOW": 0.3, + "0.3": "LOW" + }, + USER_SETTINGS_CONTAINER_HORIZONTAL_PADDING: 16, + DISCORD_CONNECT_EXAMPLE_APP_DEEPLINK_URI: "discordconnect://connect", + DISCORD_CONNECT_EXAMPLE_APP_APPLICATION_ID: "628735568569696256", + PostAuthStates: { + "CREATE_SERVER": "create_server", + "JOIN_SERVER": "join_server", + "ACCEPT_INVITE": "accept_invite", + "GUILD_TEMPLATES": "guild_templates", + "CHANNEL_PROMPT": "channel_prompt" + }, + MediaType: { + "0": "IMAGE", + "1": "GIF", + "2": "VIDEO", + "IMAGE": 0, + "GIF": 1, + "VIDEO": 2 + }, + ExpressionPickerTabs: { + "EMOJI": "Emoji", + "GIF": "GIF" + } +} \ No newline at end of file diff --git a/LightcordApi/tsconfig.json b/LightcordApi/tsconfig.json new file mode 100644 index 0000000..336b251 --- /dev/null +++ b/LightcordApi/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "noImplicitAny": false, + "module": "CommonJS", + "target": "ES2017", + "jsx": "react", + "outDir": "./dist", + "resolveJsonModule": true, + "rootDir": "./src", + "sourceMap": true, + "declaration": true + } +} \ No newline at end of file diff --git a/LightcordApi/webpack.config.js b/LightcordApi/webpack.config.js new file mode 100644 index 0000000..a823571 --- /dev/null +++ b/LightcordApi/webpack.config.js @@ -0,0 +1,54 @@ +const path = require("path"); +//const CircularDependencyPlugin = require("circular-dependency-plugin"); + +module.exports = { + mode: "development", + target: "node", + devtool: "inline-source-map", + entry: "./src/index.ts", + output: { + filename: "main.js", + path: path.resolve(__dirname, "js"), + library: "LightcordApi", + libraryTarget: "commonjs2" + }, + externals: { + electron: `electron`, + fs: `fs`, + path: `path`, + events: `events`, + rimraf: `rimraf`, + yauzl: `yauzl`, + mkdirp: `mkdirp`, + request: `request`, + "node-fetch": "node-fetch" + }, + resolve: { + extensions: [".js", ".jsx", ".json", ".ts", ".tsx"], + alias: { + "react$": path.resolve(__dirname, "src", "alias", "react.ts"), + "react-dom$": path.resolve(__dirname, "src", "alias", "react-dom.ts") + } + }, + module: { + rules: [{ + test: /\.jsx?$/, + loader: "babel-loader", + exclude: /node_modules/, + query: { + presets: [ + ["@babel/env", { + targets: { + node: "12.8.1", + chrome: "78" + } + }], "@babel/react" + ] + } + }, { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/, + }] + } +}; \ No newline at end of file diff --git a/README.md b/README.md index f86eb6d..9aeef8c 100644 --- a/README.md +++ b/README.md @@ -31,5 +31,5 @@ Only the freeze at the launch because of the downloading is pretty annoying. So ## Plugins & Themes Plugins and themes are not in the standard BetterDiscord folder. They have been moved because betterdiscord supports only stable, ptb and canary release. Using the same directory could cause problems with settings. -They are located in `%AppData%/LightCord_BD`. This is the main folder for BetterDiscord. +They are located in `%AppData%/Lightcord_BD`. This is the main folder for BetterDiscord. diff --git a/compile.js b/compile.js index 17e2c55..8257e77 100644 --- a/compile.js +++ b/compile.js @@ -2,7 +2,9 @@ const child_process = require("child_process") const path = require("path") const terser = require("terser") const util = require("util") -var rimraf = require("rimraf"); + +const production = true + let electron try{ electron = require("electron") @@ -53,7 +55,7 @@ async function main(){ await processNextDir(startDir, { startDir, newDir - }, ((filepath) => filepath.endsWith(".js") && !filepath.includes("node_modules")), async (filepath, newpath) => { + }, ((filepath) => filepath.endsWith(".js") && (!production ? !filepath.includes("node_modules") : true)), async (filepath, newpath) => { console.info(`Minifying ${filepath} to ${newpath}`) await fs.promises.writeFile(newpath, terser.minify(await fs.promises.readFile(filepath, "utf8")).code, "utf8") }).then(() => { @@ -63,7 +65,7 @@ async function main(){ await processNextDir(path.join(__dirname, "modules"), { startDir: path.join(__dirname, "modules"), newDir: path.join(__dirname, "distApp", "modules") - }, ((filepath) => filepath.endsWith(".js") && !filepath.includes("node_modules")), async (filepath, newpath) => { + }, ((filepath) => filepath.endsWith(".js") && (!production ? !filepath.includes("node_modules") : true)), async (filepath, newpath) => { console.info(`Minifying ${filepath} to ${newpath}`) await fs.promises.writeFile(newpath, terser.minify(await fs.promises.readFile(filepath, "utf8")).code, "utf8") }).then(() => { diff --git a/modules/discord_desktop_core/core/app/BetterDiscord/index.js b/modules/discord_desktop_core/core/app/BetterDiscord/index.js index 617316b..d6495a1 100644 --- a/modules/discord_desktop_core/core/app/BetterDiscord/index.js +++ b/modules/discord_desktop_core/core/app/BetterDiscord/index.js @@ -8,19 +8,20 @@ const fetch = require("node-fetch").default const uuid = require("uuid/v4") const events = exports.events = new EventEmitter() -const logger = exports.logger = new Logger("LightCord") +const logger = exports.logger = new Logger("Lightcord") let hasInit = false let tries = 0 exports.init = function(){ if(hasInit == true){ - console.warn(new Error("LightCord has already inited.")) + console.warn(new Error("Lightcord has already inited.")) return } + require("./patchNotifications") hasInit = true let readyInterval = setInterval(()=>{ - events.emit("debug", `[INIT] try ${tries++} loading LightCord`) + events.emit("debug", `[INIT] try ${tries++} loading Lightcord`) try{ if(!global.webpackJsonp)return if(!ModuleLoader.get(4))return @@ -71,7 +72,7 @@ async function privateInit(){ return window.Lightcord.Settings.callRingingBeat ? "call_ringing_beat" : "call_ringing" }, set(data){ - console.log("Attempting to set call_ringing value. Canceling "+data) + console.log("Attempting to set call_ringing value. Canceling", data) }, configurable: false }) @@ -145,7 +146,7 @@ async function privateInit(){ */ let DiscordJS try{ - DiscordJS = require("../../../../../DiscordJS").default + //DiscordJS = require("../../../../../DiscordJS").default }catch(err){ console.error(err) DiscordJS = null @@ -178,13 +179,16 @@ async function privateInit(){ if(typeof data !== "string" && data !== null)return Authorization appSettings.set("LIGHTCORD_AUTH", Authorization = data) appSettings.save() - } + }, + ensureExported }, - BetterDiscord: { // Global BetterDiscord's exported modules + BetterDiscord: { // Global BetterDiscord's exported modules / only for exporting to Lightcord's main script, not for using in plugins } } + require("../../../../../LightcordApi/js/main") + if(shouldShowPrompt){ let onConn = (ev) => { console.log(`Showing auth window.`, ev) @@ -258,6 +262,7 @@ async function privateInit(){ const BetterDiscord = window.BetterDiscord = window.mainCore = new(require("../../../../../BetterDiscordApp/js/main.js").default)(BetterDiscordConfig) const Utils = window.Lightcord.BetterDiscord.Utils + // security delete delete window.Lightcord.BetterDiscord.Utils delete window.Lightcord.BetterDiscord.Utils @@ -338,9 +343,11 @@ async function privateInit(){ logger.log(`Logged in as an user. Skipping`) } } - return _handleDispatch.call(this, ...arguments) + let returnValue = _handleDispatch.call(this, ...arguments) + if(event === "READY" && DiscordJS)DiscordJS.client.emit("ready") + return returnValue } - function cancelPrototype(methodName){ + function cancelGatewayPrototype(methodName){ if(gatewayModule.default.prototype[methodName]){ const original = gatewayModule.default.prototype[methodName] gatewayModule.default.prototype[methodName] = function(){ @@ -348,16 +355,16 @@ async function privateInit(){ } } } - cancelPrototype("updateGuildSubscriptions") - cancelPrototype("callConnect") - cancelPrototype("lobbyConnect") - cancelPrototype("lobbyDisconnect") - cancelPrototype("lobbyVoiceStatesUpdate") - cancelPrototype("guildStreamCreate") - cancelPrototype("streamWatch") - cancelPrototype("streamPing") - cancelPrototype("streamDelete") - cancelPrototype("streamSetPaused") + cancelGatewayPrototype("updateGuildSubscriptions") + cancelGatewayPrototype("callConnect") + cancelGatewayPrototype("lobbyConnect") + cancelGatewayPrototype("lobbyDisconnect") + cancelGatewayPrototype("lobbyVoiceStatesUpdate") + cancelGatewayPrototype("guildStreamCreate") + cancelGatewayPrototype("streamWatch") + cancelGatewayPrototype("streamPing") + cancelGatewayPrototype("streamDelete") + cancelGatewayPrototype("streamSetPaused") const hasUnreadModules = BDModules.get(e => e.default && e.default.hasUnread) hasUnreadModules.forEach((mod) => { const original = mod.default.hasUnread @@ -778,8 +785,6 @@ async function privateInit(){ BetterDiscord.init() events.emit("ready") - - if(DiscordJS)DiscordJS.client.emit("ready") } require.extensions[".css"] = (m, filename) => { diff --git a/modules/discord_desktop_core/core/app/BetterDiscord/patchNotifications.js b/modules/discord_desktop_core/core/app/BetterDiscord/patchNotifications.js new file mode 100644 index 0000000..8881d6d --- /dev/null +++ b/modules/discord_desktop_core/core/app/BetterDiscord/patchNotifications.js @@ -0,0 +1,53 @@ +const ipcRenderer = require("../discord_native/ipc") + +if(process.platform === "win32"){ + const originalNotification = window.Notification + + ipcRenderer.send("NOTIFICATIONS_CLEAR") + + const notifications = {} + ipcRenderer.on("NOTIFICATION_CLICK", (e, id) => { + var notification = notifications[id]; + if(notification){ + notification.onclick() + notification.close() + } + }) + window.Notification = class LightcordNotification { + constructor(title, data){ + this.id = LightcordNotification._id++ + this.onshow = function() {} + this.onclick = function() {} + this.onclose = function() {} + this.title = title + this.body = data.body + this.icon = data.icon + setTimeout(() => { + return this.onshow() + }, 0) + notifications[this.id] = this + ipcRenderer.send("NOTIFICATION_SHOW", { + id: this.id, + title: this.title, + body: this.body, + icon: this.icon + }) + } + + static _id = 0 + + static requestPermission(callback){ + callback() + } + + static permission = "granted" + + close(){ + if(!notifications[this.id])return + + delete notifications[this.id] + ipcRenderer.send("NOTIFICATION_CLOSE", this.id) + this.onclose() + } + } +} \ No newline at end of file diff --git a/modules/discord_desktop_core/core/app/discord_native/ipc.js b/modules/discord_desktop_core/core/app/discord_native/ipc.js index 75b1625..ea79b20 100644 --- a/modules/discord_desktop_core/core/app/discord_native/ipc.js +++ b/modules/discord_desktop_core/core/app/discord_native/ipc.js @@ -5,14 +5,17 @@ const ipcRenderer = electron.ipcRenderer; // We prefix events with the `DISCORD_` string to prevent malicious use function send(event, ...args) { + console.log(`[DEBUG]: send -> ${event}:`, ...args) ipcRenderer.send(`DISCORD_${event}`, ...args); } function on(event, callback) { + console.log(`[DEBUG]: on -> ${event}:`, callback) ipcRenderer.on(`DISCORD_${event}`, callback); } function removeListener(event, callback) { + console.log(`[DEBUG]: removeListener -> ${event}:`, callback) ipcRenderer.removeListener(`DISCORD_${event}`, callback); } diff --git a/modules/discord_desktop_core/core/app/ipcMain.js b/modules/discord_desktop_core/core/app/ipcMain.js index 9bc71ac..87585a6 100644 --- a/modules/discord_desktop_core/core/app/ipcMain.js +++ b/modules/discord_desktop_core/core/app/ipcMain.js @@ -7,8 +7,17 @@ Object.defineProperty(exports, "__esModule", { var _electron = require('electron'); exports.default = { - on: (event, callback) => _electron.ipcMain.on(`DISCORD_${event}`, callback), - removeListener: (event, callback) => _electron.ipcMain.removeListener(`DISCORD_${event}`, callback), - reply: (event, channel, ...args) => event.sender.send(`DISCORD_${channel}`, ...args) + on: (event, callback) => { + console.log(`[DEBUG]: on -> ${event}:`, callback) + _electron.ipcMain.on(`DISCORD_${event}`, callback) + }, + removeListener: (event, callback) => { + console.log(`[DEBUG]: removeListener -> ${event}:`, callback) + _electron.ipcMain.removeListener(`DISCORD_${event}`, callback) + }, + reply: (event, channel, ...args) => { + console.log(`[DEBUG]: reply -> ${event} -> ${channel} :`, callback) + event.sender.send(`DISCORD_${channel}`, ...args) + } }; module.exports = exports.default; \ No newline at end of file diff --git a/modules/discord_desktop_core/core/app/mainScreen.js b/modules/discord_desktop_core/core/app/mainScreen.js index 0bc8098..5d1490a 100644 --- a/modules/discord_desktop_core/core/app/mainScreen.js +++ b/modules/discord_desktop_core/core/app/mainScreen.js @@ -169,6 +169,7 @@ function setWindowVisible(isVisible, andUnminimize) { if (isVisible) { if (andUnminimize || !mainWindow.isMinimized()) { mainWindow.show(); + mainWindow.focus() webContentsSend('MAIN_WINDOW_FOCUS'); } } else { diff --git a/modules/discord_desktop_core/core/app/notifications/9cb691623c7ba013e791aad8845e93cb.svg b/modules/discord_desktop_core/core/app/notifications/9cb691623c7ba013e791aad8845e93cb.svg index e5f71c3..0b13ac7 100644 --- a/modules/discord_desktop_core/core/app/notifications/9cb691623c7ba013e791aad8845e93cb.svg +++ b/modules/discord_desktop_core/core/app/notifications/9cb691623c7ba013e791aad8845e93cb.svg @@ -1,29 +1,36 @@ - - + + viewBox="0 0 168 190" style="enable-background:new 0 0 168 190;" xml:space="preserve"> + - + - - - + + + + - - - - + + + + + - - - - + + + + + - =0&&s.splice(t,1)}function v(e){var t=document.createElement("style");return e.attrs.type="text/css",y(t,e.attrs),m(e,t),t}function y(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function g(e,t){var n,r,i,o;if(t.transform&&e.css){if(!(o=t.transform(e.css)))return function(){};e.css=o}if(t.singleton){var a=c++;n=u||(u=v(t)),r=k.bind(null,n,a,!1),i=k.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",y(t,e.attrs),m(e,t),t}(t),r=function(e,t,n){var r=n.css,i=n.sourceMap,o=void 0===t.convertToAbsoluteUrls&&i;(t.convertToAbsoluteUrls||o)&&(r=f(r));i&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */");var a=new Blob([r],{type:"text/css"}),l=e.href;e.href=URL.createObjectURL(a),l&&URL.revokeObjectURL(l)}.bind(null,n,t),i=function(){h(n),n.href&&URL.revokeObjectURL(n.href)}):(n=v(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute("media",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),i=function(){h(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else i()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||(t.singleton=a()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=p(e,t);return d(n,t),function(e){for(var r=[],i=0;iI.length&&I.push(e)}function U(e,t,n){return null==e?0:function e(t,n,r,i){var l=typeof t;"undefined"!==l&&"boolean"!==l||(t=null);var u=!1;if(null===t)u=!0;else switch(l){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case o:case a:u=!0}}if(u)return r(i,t,""===n?"."+F(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;cthis.eventPool.length&&this.eventPool.push(e)}function fe(e){e.eventPool=[],e.getPooled=ce,e.release=se}i(ue.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=ae)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=ae)},persist:function(){this.isPersistent=ae},isPersistent:le,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=le,this._dispatchInstances=this._dispatchListeners=null}}),ue.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},ue.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var o=new t;return i(o,n.prototype),n.prototype=o,n.prototype.constructor=n,n.Interface=i({},r.Interface,e),n.extend=r.extend,fe(n),n},fe(ue);var de=ue.extend({data:null}),pe=ue.extend({data:null}),me=[9,13,27,32],he=Y&&"CompositionEvent"in window,ve=null;Y&&"documentMode"in document&&(ve=document.documentMode);var ye=Y&&"TextEvent"in window&&!ve,ge=Y&&(!he||ve&&8=ve),be=String.fromCharCode(32),xe={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},ke=!1;function we(e,t){switch(e){case"keyup":return-1!==me.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function Ee(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Te=!1;var _e={eventTypes:xe,extractEvents:function(e,t,n,r){var i=void 0,o=void 0;if(he)e:{switch(e){case"compositionstart":i=xe.compositionStart;break e;case"compositionend":i=xe.compositionEnd;break e;case"compositionupdate":i=xe.compositionUpdate;break e}i=void 0}else Te?we(e,n)&&(i=xe.compositionEnd):"keydown"===e&&229===n.keyCode&&(i=xe.compositionStart);return i?(ge&&"ko"!==n.locale&&(Te||i!==xe.compositionStart?i===xe.compositionEnd&&Te&&(o=oe()):(re="value"in(ne=r)?ne.value:ne.textContent,Te=!0)),i=de.getPooled(i,t,n,r),o?i.data=o:null!==(o=Ee(n))&&(i.data=o),$(i),o=i):o=null,(e=ye?function(e,t){switch(e){case"compositionend":return Ee(t);case"keypress":return 32!==t.which?null:(ke=!0,be);case"textInput":return(e=t.data)===be&&ke?null:e;default:return null}}(e,n):function(e,t){if(Te)return"compositionend"===e||!he&&we(e,t)?(e=oe(),ie=re=ne=null,Te=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1